
GPOHound は、SYSVOL 共有から抽出したグループポリシーオブジェクト (GPO) をダンプし、分析するためのツールです。
構造化された形式化されたフォーマットを提供し、Active Directory 環境における設定ミス、安全でない設定、特権昇格パスを発見するのに役立ちます。
このツールは BloodHound の Neo4j データベースと統合し、Active Directory 情報の LDAP 的なソースとして使用するとともに、分析結果に基づいて新しい関係(エッジ)やノードプロパティを追加してデータを強化します。
GPO を構造化された JSON またはツリー形式でダンプ
複数ドメインを処理
GPO 名を GPO GUID で解決
GPO ファイル、GPO GUID、ドメインで出力をフィルタリング
正規表現を使用したキー/値ペアの検索
影響を受けるオブジェクト(例:ローカルグループ、レジストリ)ごとに設定をグループ化
ローカル特権グループに追加されたメンバーを検出
安全でないレジストリ設定、保存された資格情報、特権権限を検出
VNC 資格情報と GPP パスワードの復号をサポート
GPO の影響を受けるドメイン、コンテナ、OU を検出
特定のユーザー、コンピュータ、OU、コンテナ、ドメインに適用された GPO を取得
BloodHound データに関係とプロパティを追加して強化
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx install "git+https://github.com/cogiceo/GPOHound"
BloodHound データの強化のために Neo4j APOC を設定する必要があります:
標準の Neo4j インストールを使用している場合、APOC jar ファイルをプラグインフォルダにコピーし、Neo4j を再起動することで APOC を有効にできます:
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
「Docker Compose」で Neo4j をインストールする場合、環境変数 NEO4J_PLUGINS=["apoc"] を追加します:
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
詳細や他のインストール方法については、公式の APOC ドキュメント を参照してください。
GPOHound によって追加された関係とプロパティを可視化するために、customqueries.json ファイルからカスタムクエリを BloodHound にインポートできます。デフォルトでは、このファイルは ~/.config/bloodhound/customqueries.json にあります。
まず、ドメインコントローラから SYSVOL の内容をダウンロードします。
完全な SYSVOL をダウンロード:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
GPO のみをダウンロード:
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
除外付きでダウンロード:
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
LDAP から必要なすべてのデータを取得します:
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
BloodHound データの強化には、bloodhound.py や SharpHound.exe などのコレクタを使用して BloodHound データを収集し、収集したデータを BloodHound インターフェースにインポートする必要があります。
サンプルの GPOHound ファイルは example.zip にあります。unzip example.zip で展開してください。
デフォルト値や設定のカスタマイズについては CONFIG.md を参照してください。
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
gpohound analysis
gpohound analysis --affected
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL'
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --list
gpohound analysis --trustee 'SRV01.SEVENKINGDOMS.LOCAL' --dump
gpohound analysis --enrich
gpohound analysis --enrich-ce
[!IMPORTANT]
- セキュリティフィルタ、WMI フィルタ、アイテムレベルターゲティングなどの条件は解釈されません。
- GPO の競合はシミュレートされません。有効な設定を見逃さないためです。
ログオン時に特権ローカルグループに割り当てられたユーザーの検出
名前が変更された組み込みの特権ローカルグループの検出
「Preference Process Variables」(例:%ComputerName%、%DomainName%)を使用して特権ローカルグループに追加された trustee の検出
sAMAccountName ハイジャックを使用した悪用可能な trustee の検出
特権ローカルグループに追加された trustee の検出:
既定の特権 trustee と、SID が S-1-5-8 で始まるサービスアカウントは分析から除外されます。
| グループ | エッジ |
|---|
| Administrators | AdminTo |
| Remote Desktop Users | CanRDP |
| Distributed COM Users | ExecuteDCOM |
| Remote Management Users | CanPSRemote |
| Backup Operators | CanPrivEsc |
| Print Operators | CanPrivEsc |
| Network Configuration Operators | CanPrivEsc |
| 分析 | プロパティ |
|---|
| "Everyone" グループに "Anonymous Logon" が含まれている | — |
| SMB サーバーセッション署名が有効になっていない | smbSigningEnabled: false |
| SMB サーバーセッション署名が必須ではない | smbSigningRequired: false |
| NTLMv1 認証がサポートされている | NTLMv1Support: true |
| Windows 自動ログオンの既定のパスワード | — |
| VNC 資格情報 (一般: RealVNC、TightVNC、TigerVNC など) | *VNC*PASS* (各種) |
| FileZilla の保存されたパスワード | — |
| PuTTY プロキシパスワード | — |
| TeamViewer の保存された資格情報 | — |
| WinSCP の保存されたセッション | — |
| Picasa の保存されたパスワード | — |
| 特権 | 説明 | エッジ |
|---|
| SeDebugPrivilege | ユーザーが任意のプロセスをデバッグおよび操作できるようにする | CanPrivEsc |
| SeBackupPrivilege | 機密ファイルへのアクセスを許可 | CanPrivEsc |
| SeRestorePrivilege | 復元中にオブジェクトの権限をバイパス | CanPrivEsc |
| SeAssignPrimaryTokenPrivilege | SYSTEM への昇格のためのトークン偽装を有効にする | CanPrivEsc |
| SeImpersonatePrivilege | 別のユーザーのコンテキストでプロセスを作成できるようにする | CanPrivEsc |
| SeTakeOwnershipPrivilege | ユーザーがシステムオブジェクトの所有権を取得できるようにする | CanPrivEsc |
| SeTcbPrivilege | OS の一部として動作する機能を付与 | CanPrivEsc |
| SeCreateTokenPrivilege | 認証トークンの作成を許可 | CanPrivEsc |
| SeLoadDriverPrivilege | ドライバーのロード/アンロードを許可 | CanPrivEsc |
| SeManageVolumePrivilege | ボリュームまたはディスク管理の特権を付与 | CanPrivEsc |
| SeEnableDelegationPrivilege | コンピュータとユーザーアカウントを委任に対して信頼できるようにする |