Post

Active Directory列挙チェックリスト — SMB/LDAP/Kerberos/BloodHound

Active Directory列挙チェックリスト。DNS、SMB、LDAP、Kerberos、NetExec、BloodHound、AD CS、WinRM、MSSQL、報告用証跡を整理。

Active Directory列挙チェックリスト — SMB/LDAP/Kerberos/BloodHound

TL;DR

Active Directory の列挙では、攻撃の前に 何が存在するか、どこに認証できるか、どの経路が重要か を明確にします。このチェックリストは、許可されたラボまたは診断での利用を前提としています。低負荷な探索、ロックアウトポリシー確認、認証情報検証、BloodHound、AD CS、サービス別確認の順で進めます。

フェーズ 目的
スコープ ドメイン、DC、範囲を記録 printf '%s\n' corp.local dc01.corp.local 10.10.10.10
ポート AD系サービスを確認 nmap -Pn -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,5986,1433 --open -iL targets.txt
SMB ホストとSigning状況 nxc smb targets.txt
ポリシー ロックアウト条件 nxc smb <DC_IP> -u '<USER>' -p '<PASS>' --pass-pol
LDAP ユーザー、グループ、SID nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --users --groups --get-sid
Kerberos ユーザー名とroast対象 kerbrute userenum --dc <DC_IP> -d <DOMAIN> users.txt
BloodHound 攻撃経路分析 bloodhound-python -u '<USER>' -p '<PASS>' -d <DOMAIN> -ns <DC_IP> -c All
AD CS 証明書サービス確認 certipy find -u '<USER>@<DOMAIN>' -p '<PASS>' -dc-ip <DC_IP> -stdout
WinRM リモート管理確認 nxc winrm targets.txt -u '<USER>' -p '<PASS>'
MSSQL DB経由の足場確認 nxc mssql targets.txt -u '<USER>' -p '<PASS>'

列挙フロー

flowchart TD
    A[スコープとルール確認] --> B[DNSとADポート確認]
    B --> C[SMBホスト把握]
    C --> D[パスワード/ロックアウトポリシー確認]
    D --> E[認証済みSMB/LDAP列挙]
    E --> F[Kerberos確認]
    E --> G[BloodHound収集]
    E --> H[AD CS確認]
    F --> I[攻撃経路の優先度付け]
    G --> I
    H --> I
    I --> J[1経路ずつ検証]
    J --> K[証跡と修正案を報告]

Step 1: スコープと名前を確認する

収集を始める前に、ドメイン名、ドメインコントローラ、対象範囲、許可プロトコル、検証時間、ロックアウト条件を記録します。AD診断での事故は、環境を理解する前にスプレーや広範囲モジュール実行を始めたときに起きやすいです。

項目 保存する証跡
ドメインFQDN corp.local, child.corp.local
NetBIOS名 CORP
ドメインコントローラ ホスト名、IP、必要ならSite
対象範囲 スコープ内CIDRと除外対象
許可された認証テスト スプレー、ハッシュ認証、Kerberos、WinRM、MSSQL
ロックアウトポリシー 閾値、リセット時間、観測時間

Step 2: AD系サービスを確認する

まずはADに関係するポートに絞ります。フルスキャンは、重要ホストを把握してからで十分です。

1
nmap -Pn -n -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,5986,1433 --open -iL targets.txt -oA scans/ad-core
ポート サービス 意味
53 DNS ドメインとDC解決
88 / 464 Kerberos ユーザー検証、roasting、チケット処理
135 / 593 RPC Endpoint Mapping、管理系の文脈把握
389 / 636 LDAP / LDAPS ディレクトリ列挙、ACL確認
445 SMB ホスト、共有、Signing、管理者確認
3268 / 3269 Global Catalog フォレスト横断のLDAP確認
5985 / 5986 WinRM リモート管理
1433 MSSQL DB経由の足場やリンクサーバー

Step 3: SMBでホストとSigningを把握する

SMBはホスト把握とリレーリスク確認に向いています。無認証またはGuest確認が許可されている場合はそこから始め、次に認証済み列挙へ進みます。

1
nxc smb targets.txt
1
nxc smb targets.txt --gen-relay-list no_signing_hosts.txt

保存すべき情報:

情報 意味
ドメイン参加ホスト AD認証が通る場所の把握
OSとビルド パッチ状況や手法選定
SMB Signing無効 リレーリスクと修正優先度
Guestアクセス 共有やRID bruteの可能性
ローカル管理者表示 横展開の候補

Step 4: パスワードとロックアウトポリシーを確認する

スプレー前に必ず確認します。ポリシーが確認できない場合は、最も保守的に扱い、広範囲の認証試行は避けます。

1
nxc smb <DC_IP> -u '<USER>' -p '<PASS>' --pass-pol

低リスク寄りのスプレー例:

1
nxc smb targets.txt -u users.txt -p '<ONE_PASSWORD>' --gfail-limit 5 --ufail-limit 2 --fail-limit 3 --jitter 2

ルールオブエンゲージメントで明示されていない限り、大量ユーザーと大量パスワードの組み合わせは避けます。


Step 5: 有効認証情報でSMB列挙する

認証情報が有効なら、次の行動に直結する情報を集めます。

1
nxc smb targets.txt -u '<USER>' -p '<PASS>' --shares
1
nxc smb <DC_IP> -u '<USER>' -p '<PASS>' --users
1
nxc smb <DC_IP> -u '<USER>' -p '<PASS>' --groups 'Domain Admins'
1
nxc smb targets.txt -u '<USER>' -p '<PASS>' --continue-on-success

見るべきポイント:

シグナル 次の確認
読み取り可能な SYSVOL ポリシースクリプトや古い資格情報の有無
独自共有 設定ファイル、スクリプト、バックアップ
Pwn3d! や管理者表示 実行権限を慎重に確認
失敗認証の増加 停止して上限を見直す

Step 6: LDAP列挙

LDAPはホスト単位のSMBより、ドメイン全体の情報を整理して取得しやすいです。ユーザー、グループ、コンピュータ、OU、SID、DCを確認します。

1
nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --users --groups --dc-list --get-sid
1
nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --computers
1
nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --password-not-required
1
nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --trusted-for-delegation

グループ名、特権ユーザー、サービスアカウント、委任フラグ、description属性の運用メモを保存します。


Step 7: Kerberos確認

Kerberos列挙では、ユーザー名の有効性、roast可能なアカウント、チケットベースの経路が見えてきます。

1
kerbrute userenum --dc <DC_IP> -d <DOMAIN> users.txt
1
GetNPUsers.py <DOMAIN>/ -usersfile users.txt -dc-ip <DC_IP> -no-pass
1
GetUserSPNs.py <DOMAIN>/<USER>:'<PASS>' -dc-ip <DC_IP> -request -outputfile kerberoast_hashes.txt

これらの出力は、構成リスクの証跡として扱います。スプレーを広げる理由にしない方が安全です。

関連記事:


Step 8: BloodHound収集

BloodHoundは列挙結果を攻撃経路に変換します。スコープで許可された範囲だけを収集し、収集時刻をメモします。

1
bloodhound-python -u '<USER>' -p '<PASS>' -d <DOMAIN> -ns <DC_IP> -c All
1
nxc ldap <DC_IP> -u '<USER>' -p '<PASS>' --bloodhound -c All

優先すべき経路:

経路 意味
GenericAll / GenericWrite オブジェクト制御や資格情報悪用
AddMember グループ昇格
ForceChangePassword アカウント奪取
CanPSRemote WinRM横展開
AdminTo ローカル管理者の広がり
AllowedToDelegate Kerberos委任リスク
AD CS edges 証明書ベースの昇格

Step 9: AD CS確認

Certificate Services は高影響の昇格経路になりやすいです。登録権限、脆弱テンプレート、ESC8、Manager Approval などを確認します。

1
certipy find -u '<USER>@<DOMAIN>' -p '<PASS>' -dc-ip <DC_IP> -stdout
1
certipy find -u '<USER>@<DOMAIN>' -p '<PASS>' -dc-ip <DC_IP> -vulnerable -enabled -json

関連記事:


Step 10: リモート管理と横展開確認

認証情報が正しいことと、WinRM、SMB実行、MSSQLに入れることは別です。個別に確認します。

1
nxc winrm targets.txt -u '<USER>' -p '<PASS>'
1
nxc smb targets.txt -u '<USER>' -p '<PASS>' -x 'whoami'
1
nxc mssql targets.txt -u '<USER>' -p '<PASS>'

管理者権限や複製権限がある場合は、制御された証跡収集へ進みます。


報告用チェックリスト

各発見事項は、防御側が再現して直せる形で保存します。

証跡
時刻と送信元 操作端末、時刻、コマンド
対象 ホスト名、IP、ドメイン、OU
アカウント文脈 ユーザー、グループ、権限
証明 最小限の出力、スクリーンショット、BloodHound経路、コマンド結果
影響 そのアクセスで何が可能か
修正 ポリシー、ACL、テンプレート、委任、パスワード、監視

関連記事

This post is licensed under CC BY 4.0 by the author.