はじめに
Active Directory(AD)環境に侵入できた場合、**最初にやるべきことの一つがアカウントディスカバリー(Account Discovery)**です。
これは「今、自分は誰としてログインしているのか」「他にどんなユーザー・グループ・権限が存在するのか」を把握するための重要なステップです。
本記事では、AD 環境における アカウント種別の整理 と、PowerShell を使った基本的なユーザー列挙(AD Enum) の方法を解説します。
1. なぜ最初にアカウント列挙をするのか?
初期侵入(Initial Access)直後の状況では:
- 今のユーザーは どの権限を持っているのか?
- 他に 狙えそうなアカウント はいるか?
- 管理者権限への昇格ルート は存在するか?
これらはすべて AD 内のユーザー・グループ情報 を調べることで見えてきます。
つまり、アカウント列挙は:
「このドメインの攻略マップを作る最初の一歩」
と言っても過言ではありません。
2. Active Directory に存在する主なアカウント種別
AD 環境には、目的ごとにいくつかの種類のアカウントが存在します。
2.1 ビルトインローカルユーザー(Built-in Local Users)
- 各マシンに ローカルで存在 するアカウント
- AD には属さない
- 例:
Administrator,Guest(ローカル)
ドメイン環境とは別枠の存在
2.2 ドメインユーザー(Domain Users)
- Active Directory によって 集中管理されるユーザー
- ドメイン参加マシンにログイン可能
- AD サービス(Kerberos, LDAP など)を利用可能
通常の社員アカウントや一般ユーザーはここ
2.3 管理されたサービスアカウント(Managed Service Accounts)
- AD が管理する サービス用の特殊アカウント
- 一般ユーザーより 高い権限 を持つことが多い
- 設定ミスがあると 権限昇格の踏み台 になりがち
2.4 ドメイン管理者(Domain Administrators)
- AD 環境の 最上位権限
- 管理できるもの:
- ユーザー / グループ
- GPO
- サーバー
- ドメイン設定
- ほぼすべて
Red Team の最終目標は、ほぼ確実に Domain Admin の奪取 です。
3. 代表的な AD 管理者グループ
AD には、用途別に強力な権限グループが用意されています:
| グループ名 | 権限 |
|---|---|
| BUILTIN\Administrator | ドメインコントローラのローカル管理者 |
| Domain Admins | ドメイン内すべてのリソース管理 |
| Enterprise Admins | フォレスト全体の管理(ルートドメインのみ) |
| Schema Admins | スキーマ変更可能(攻撃者的に超重要) |
| Server Operators | ドメインサーバー管理可能 |
| Account Operators | 特権グループ以外のユーザー管理可能 |
これらのグループに 誰が入っているか は、最優先で確認すべきポイントです。
4. AD 環境の列挙(AD Enumeration)の考え方
マシンが AD に参加していると分かったら、次のフェーズは:
- ユーザーの列挙
- グループの列挙
- 権限の関連性の把握
- 攻撃パスの発見
ここではまず PowerShell を使ったユーザー列挙 から始めます。
5. PowerShell で AD ユーザーを列挙する
5.1 全ユーザーを取得する
ActiveDirectory モジュールが使える場合、次のコマンドで 全ユーザー を取得できます:
Get-ADUser -Filter *
出力例:
DistinguishedName : CN=Administrator,CN=Users,DC=thmredteam,DC=com
Enabled : True
Name : Administrator
SamAccountName : Administrator
SID : S-1-5-21-1966530601-3185510712-10604624-500
ここで注目すべきポイント:
-
SamAccountName→ ログイン名 -
DistinguishedName→ AD 内での配置場所 -
SID→ セキュリティ識別子(重要)
6. Distinguished Name(DN)とは?
AD ではオブジェクトの場所を DN(Distinguished Name) で表します。
例:
CN=User1,CN=Users,DC=thmredteam,DC=com
構造的には:
-
DC=thmredteam,DC=com→ ドメイン -
CN=Users→ Users コンテナ -
CN=User1→ ユーザーオブジェクト
つまり:
「ドメインの中の、Users コンテナの中の、User1」
という 階層構造のパス を表しています。
7. SearchBase を使って特定コンテナ配下だけを列挙する
たとえば、CN=Users 配下のユーザーだけを取得したい場合:
Get-ADUser -Filter * -SearchBase "CN=Users,DC=THMREDTEAM,DC=COM"
これにより:
- Users コンテナ配下のユーザーのみ表示
- OU ごとにスコープを絞った列挙が可能
8. 実践課題:THM OU 配下のユーザーを探す
ラボでは次のようなことを試します:
-
OU=THM配下を SearchBase に指定 - その中に存在する 全ユーザーを列挙
- 結果から「どんなアカウントがいるか」を確認
例(イメージ):
Get-ADUser -Filter * -SearchBase "OU=THM,DC=THMREDTEAM,DC=COM"
環境によっては 複数ユーザーが返る ので、そこから次の攻撃対象を考える、という流れになります。
Red Team 視点まとめ
-
AD 列挙の第一歩は ユーザーとグループの把握
-
特に注目すべきは:
- Domain Admins
- 高権限サービスアカウント
- OU ごとの管理者
-
DN と SearchBase を使いこなすと ピンポイント列挙 が可能
-
ここで得た情報が:
権限昇格・ラテラルムーブメント・ドメイン制圧へのルート設計
に直結する