mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
107 lines
6.8 KiB
Markdown
107 lines
6.8 KiB
Markdown
# Active Directory Web Services (ADWS) Enumeration & Stealth Collection
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
## ADWSとは?
|
||
|
||
Active Directory Web Services (ADWS)は、**Windows Server 2008 R2以降のすべてのドメインコントローラーでデフォルトで有効**になっており、TCP **9389**でリッスンしています。名前に反して、**HTTPは関与していません**。代わりに、このサービスは独自の.NETフレーミングプロトコルのスタックを介してLDAPスタイルのデータを公開します:
|
||
|
||
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
|
||
|
||
トラフィックはこれらのバイナリSOAPフレーム内にカプセル化され、一般的でないポートを通過するため、**ADWSを通じた列挙は、従来のLDAP/389および636トラフィックよりも検査、フィルタリング、または署名される可能性がはるかに低い**です。オペレーターにとって、これは意味します:
|
||
|
||
* ステルスな偵察 – ブルーチームはしばしばLDAPクエリに集中します。
|
||
* **非Windowsホスト(Linux、macOS)**から9389/TCPをSOCKSプロキシを通じてトンネリングする自由。
|
||
* LDAPを介して取得するのと同じデータ(ユーザー、グループ、ACL、スキーマなど)と、**書き込み**を行う能力(例:**RBCD**のための`msDs-AllowedToActOnBehalfOfOtherIdentity`)。
|
||
|
||
> 注:ADWSは多くのRSAT GUI/PowerShellツールでも使用されているため、トラフィックは正当な管理者の活動と混在する可能性があります。
|
||
|
||
## SoaPy – ネイティブPythonクライアント
|
||
|
||
[SoaPy](https://github.com/logangoins/soapy)は、**純粋なPythonでのADWSプロトコルスタックの完全な再実装**です。NBFX/NBFSE/NNS/NMFフレームをバイト単位で作成し、.NETランタイムに触れることなくUnix系システムからの収集を可能にします。
|
||
|
||
### 主な機能
|
||
|
||
* **SOCKSを介したプロキシ**をサポート(C2インプラントから便利)。
|
||
* LDAPの`-q '(objectClass=user)'`と同じ細かい検索フィルター。
|
||
* オプションの**書き込み**操作(`--set` / `--delete`)。
|
||
* BloodHoundへの直接取り込みのための**BOFHound出力モード**。
|
||
* 人間の可読性が必要な場合にタイムスタンプや`userAccountControl`を整形するための`--parse`フラグ。
|
||
|
||
### インストール(オペレーターのホスト)
|
||
```bash
|
||
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
|
||
```
|
||
## ステルスADコレクションワークフロー
|
||
|
||
以下のワークフローは、ADWSを介して**ドメインおよびADCSオブジェクト**を列挙し、それらをBloodHound JSONに変換し、証明書ベースの攻撃経路を追跡する方法を示しています - すべてLinuxから:
|
||
|
||
1. **ターゲットネットワークからあなたのボックスへの9389/TCPトンネル**(例:Chisel、Meterpreter、SSH動的ポートフォワードなど)。 `export HTTPS_PROXY=socks5://127.0.0.1:1080`をエクスポートするか、SoaPyの`--proxyHost/--proxyPort`を使用します。
|
||
|
||
2. **ルートドメインオブジェクトを収集する:**
|
||
```bash
|
||
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
|
||
-q '(objectClass=domain)' \
|
||
| tee data/domain.log
|
||
```
|
||
3. **Configuration NCからADCS関連オブジェクトを収集する:**
|
||
```bash
|
||
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
|
||
-dn 'CN=Configuration,DC=ludus,DC=domain' \
|
||
-q '(|(objectClass=pkiCertificateTemplate)(objectClass=CertificationAuthority) \\
|
||
(objectClass=pkiEnrollmentService)(objectClass=msPKI-Enterprise-Oid))' \
|
||
| tee data/adcs.log
|
||
```
|
||
4. **BloodHoundに変換する:**
|
||
```bash
|
||
bofhound -i data --zip # produces BloodHound.zip
|
||
```
|
||
5. **ZIPをBloodHound GUIにアップロード**し、`MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c`のようなサイファークエリを実行して、証明書昇格パス(ESC1、ESC8など)を明らかにします。
|
||
|
||
### `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD)の記述
|
||
```bash
|
||
soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
|
||
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
|
||
msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....'
|
||
```
|
||
`s4u2proxy`/`Rubeus /getticket`を組み合わせて、完全な**リソースベースの制約付き委任**チェーンを作成します。
|
||
|
||
## 検出と強化
|
||
|
||
### 詳細なADDSログ記録
|
||
|
||
ドメインコントローラーで以下のレジストリキーを有効にして、ADWS(およびLDAP)からの高コスト/非効率的な検索を明らかにします:
|
||
```powershell
|
||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics' -Name '15 Field Engineering' -Value 5 -Type DWORD
|
||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Expensive Search Results Threshold' -Value 1 -Type DWORD
|
||
New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters' -Name 'Search Time Threshold (msecs)' -Value 0 -Type DWORD
|
||
```
|
||
イベントは**Directory-Service**の下に表示され、完全なLDAPフィルターが適用されます。クエリがADWS経由で到着した場合でも同様です。
|
||
|
||
### SACLカナリアオブジェクト
|
||
|
||
1. ダミーオブジェクト(例:無効なユーザー`CanaryUser`)を作成します。
|
||
2. _Everyone_ プリンシパルに対して**Audit** ACEを追加し、**ReadProperty**で監査します。
|
||
3. 攻撃者が`(servicePrincipalName=*)`、`(objectClass=user)`などを実行するたびに、DCは**Event 4662**を発行し、実際のユーザーSIDを含みます。リクエストがプロキシされている場合やADWSから発信されている場合でも同様です。
|
||
|
||
Elasticの事前構築ルールの例:
|
||
```kql
|
||
(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10"
|
||
```
|
||
## ツール概要
|
||
|
||
| 目的 | ツール | ノート |
|
||
|------|-------|-------|
|
||
| ADWS列挙 | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, 読み書き |
|
||
| BloodHound取り込み | [BOFHound](https://github.com/bohops/BOFHound) | SoaPy/ldapsearchログを変換 |
|
||
| 証明書の妥協 | [Certipy](https://github.com/ly4k/Certipy) | 同じSOCKSを通じてプロキシ可能 |
|
||
|
||
## 参考文献
|
||
|
||
* [SpecterOps – Make Sure to Use SOAP(y) – An Operators Guide to Stealthy AD Collection Using ADWS](https://specterops.io/blog/2025/07/25/make-sure-to-use-soapy-an-operators-guide-to-stealthy-ad-collection-using-adws/)
|
||
* [SoaPy GitHub](https://github.com/logangoins/soapy)
|
||
* [BOFHound GitHub](https://github.com/bohops/BOFHound)
|
||
* [Microsoft – MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-nbfx/)
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|