はじめに
Active Directory (AD) 環境への侵入に成功した際、次に攻撃者が行うべきことは 「列挙 (Enumeration)」 です。
「誰が偉いのか?」「どこにドメインコントローラがあるのか?」「どのグループに入れば管理者になれるのか?」
これらを把握せずに闇雲に攻撃を仕掛けるのは、目隠しをして迷路を走るようなものです。
本記事では、TryHackMeの "AD: Basic Enumeration" および "AD: Authenticated Enumeration" で学んだ、認証済みユーザー権限で行うAD偵察の手法(Living off the Land, PowerShell, BloodHound)をまとめます。
1. 思考の転換:リストからグラフへ
AD攻略において最も重要な概念の一つが、John Lambert氏の以下の言葉です。
"Defenders think in lists. Attackers think in graphs."
(防御側はリストで考え、攻撃者はグラフで考える)
防御側は「Domain Adminsグループのメンバーリスト」を管理しますが、攻撃者は「AさんがBさんのPCにログインしており、BさんのPCにはCさんの認証情報が残っていて、CさんはDomain Adminである」という 関係性のパス(グラフ) を探します。
この「グラフ」を視覚化するツールが BloodHound ですが、まずは基本となるCUIツールから見ていきます。
2. Living Off The Land (環境寄生型偵察)
攻撃ツール(nmapなど)を持ち込むと検知されるリスクがあります。そのため、Windows標準搭載のコマンド (net.exe など) を使って偵察を行う手法が基本となります。
基本コマンド:NET コマンド
最も基本的ですが、強力なツールです。/domain オプションの有無が決定的な違いを生みます。
| 目的 | コマンド | 解説 |
|---|---|---|
| ドメインユーザー一覧 | net user /domain |
ドメイン全体のユーザーを表示。ここからターゲットを選定する。 |
| ユーザー詳細 | net user <User> /domain |
特定ユーザーの所属グループやパスワードポリシーを確認。 |
| ドメイングループ一覧 | net group /domain |
"Domain Admins" などの特権グループを探す。 |
| グループメンバー確認 | net group "<Group>" /domain |
特定グループに誰が所属しているかを確認。 |
| ローカルユーザー確認 | net user |
(注意) /domain なしだと、現在ログインしているマシンのローカル情報を表示。 |
3. PowerShellによる高度な偵察 (PowerView)
コマンドプロンプトはテキストベースで見にくい上に、複雑なフィルタリングができません。
PowerShellを使えば、オブジェクトとして情報を扱えるため、「名前に"admin"が含まれるグループを抽出」といった操作が容易になります。
ここでは、Windows標準の ActiveDirectory モジュールと、攻撃用フレームワーク PowerSploit の PowerView モジュールを比較します。
モジュールのインポート
# PowerViewの読み込み (パスは環境による)
Import-Module .\PowerView.ps1
コマンド比較チートシート
| 目的 | ActiveDirectory (公式) | PowerView (ハッカー向け) | PowerViewの利点 |
|---|---|---|---|
| ユーザー列挙 | Get-ADUser -Filter * |
Get-DomainUser |
詳細な属性情報が見やすい |
| グループ列挙 | Get-ADGroup -Filter * |
Get-DomainGroup |
*admin* 等のフィルタが容易 |
| PC列挙 | Get-ADComputer -Filter * |
Get-DomainComputer |
OS情報なども即座に取得 |
| SPN確認 | (複雑なフィルタが必要) | Get-DomainUser -SPN |
Kerberoasting攻撃の標的を即座に特定 |
PowerViewの実践例
# "admin" という文字が含まれるグループを探し、その数を数える
Get-DomainGroup "*admin*" | Measure-Object
# コンピュータ名だけをリストアップする
Get-DomainComputer | Select-Object Name
4. 最強の可視化ツール:BloodHound
前述の「グラフで考える」を実現するツールです。
SharpHound (データ収集) と BloodHound GUI (可視化・分析) の2つで構成されています。
Step 1: データ収集 (AttackBox / Linuxからの場合)
Windows環境がない場合や、Linuxの攻撃機から実施する場合は Python版 (bloodhound-python) を使用します。
# ドメインコントローラ(DC)を指定して全情報を収集し、ZIP化する
bloodhound-python -u <User> -p <Pass> -d <Domain> -ns <DC_IP> -c All --zip
⚠️ トラブルシューティング (DNSエラー)
bloodhound-python実行時にdns.resolver.NoResolverConfigurationエラーが出る場合、攻撃機側のDNS設定 (/etc/resolv.conf) が空になっている可能性があります。
echo "nameserver 8.8.8.8" > /etc/resolv.conf等でDNSを指定すると解決します。
Step 2: データのインポートと分析
収集した .zip ファイルを BloodHound GUI にドラッグ&ドロップでインポートします。
よく使う分析クエリ:
- Find all Domain Admins: ドメイン管理者を特定。
- Shortest Paths to Domain Admins: 一般ユーザーから管理者権限を奪取するための最短ルートを表示。
-
Node Info (Edge): 線(エッジ)をクリックすると、
MemberOf(所属) やGenericAll(全権限)、ForceChangePassword(パスワード変更権限) などの関係性がわかります。
まとめ
Active Directoryの偵察は、以下の3段階で深めていくのが定石ということを学びました。
-
侵入直後:
netコマンドで自分の立ち位置とドメインの規模を把握する -
詳細調査:
PowerViewを使い、管理者グループや重要なサーバーを特定する -
攻略パスの特定:
BloodHoundで可視化し、複雑な権限委譲やセッション情報を利用した攻撃ルート(Attack Path)を見つけ出す
ツールはあくまで手段です。「防御側が見落としている『隠れた関係性』を見つけ出す」という視点を持つことが、AD攻略の鍵となります。
