# GPOHound
`GPOHound` は、SYSVOL 共有から抽出したグループポリシーオブジェクト (GPO) をダンプし、分析するためのツールです。
構造化された形式化されたフォーマットを提供し、Active Directory 環境における設定ミス、安全でない設定、特権昇格パスを発見するのに役立ちます。
このツールは BloodHound の Neo4j データベースと統合し、Active Directory 情報の LDAP 的なソースとして使用するとともに、分析結果に基づいて新しい関係(エッジ)やノードプロパティを追加してデータを強化します。
## 機能
### ダンプ
- [x] GPO を構造化された JSON またはツリー形式でダンプ
- [x] 複数ドメインを処理
- [x] GPO 名を GPO GUID で解決
- [x] GPO ファイル、GPO GUID、ドメインで出力をフィルタリング
- [x] 正規表現を使用したキー/値ペアの検索
### 分析
- [x] 影響を受けるオブジェクト(例:ローカルグループ、レジストリ)ごとに設定をグループ化
- [x] ローカル特権グループに追加されたメンバーを検出
- [x] 安全でないレジストリ設定、保存された資格情報、特権権限を検出
- [x] VNC 資格情報と GPP パスワードの復号をサポート
- [x] GPO の影響を受けるドメイン、コンテナ、OU を検出
- [x] 特定のユーザー、コンピュータ、OU、コンテナ、ドメインに適用された GPO を取得
- [x] BloodHound データに関係とプロパティを追加して強化
## インストール
### pip でインストール
```
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
```
### pipx でインストール
```
pipx install "git+https://github.com/cogiceo/GPOHound"
```
### Neo4j の APOC を設定
BloodHound データの強化のために Neo4j APOC を設定する必要があります:
- 標準の Neo4j インストールを使用している場合、APOC `jar` ファイルをプラグインフォルダにコピーし、Neo4j を再起動することで APOC を有効にできます:
```bash
cp /var/lib/neo4j/labs/apoc-* /var/lib/neo4j/plugins/
neo4j restart
```
- 「Docker Compose」で Neo4j をインストールする場合、環境変数 `NEO4J_PLUGINS=["apoc"]` を追加します:
```yaml
neo4j:
image: neo4j:latest
environment:
- NEO4J_PLUGINS=["apoc"]
```
> 詳細や他のインストール方法については、公式の [APOC ドキュメント](https://neo4j.com/docs/apoc/current/installation/) を参照してください。
### BloodHound クエリの追加
`GPOHound` によって追加された関係とプロパティを可視化するために、`customqueries.json` ファイルからカスタムクエリを BloodHound にインポートできます。デフォルトでは、このファイルは `~/.config/bloodhound/customqueries.json` にあります。
## 前提条件
### SYSVOL のダンプ
まず、ドメインコントローラから `SYSVOL` の内容をダウンロードします。
- 完全な `SYSVOL` をダウンロード:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
- GPO のみをダウンロード:
```bash
gpohound sysvol --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD --gpos
```
- 除外付きでダウンロード:
```bash
gpohound sysvol --dc $DC_HOST -u $USER -p $PASSWORD --exclude '/Policydefinitions/','/scripts/' --max-size 100
```
### LDAP のダンプ
LDAP から必要なすべてのデータを取得します:
```bash
gpohound ldap --dc $DC_HOST -d $DOMAIN -u $USER -p $PASSWORD
```
### BloodHound
BloodHound データの強化には、`bloodhound.py` や `SharpHound.exe` などのコレクタを使用して BloodHound データを収集し、収集したデータを BloodHound インターフェースにインポートする必要があります。
## 使用方法
サンプルの GPOHound ファイルは `example.zip` にあります。`unzip example.zip` で展開してください。
デフォルト値や設定のカスタマイズについては [CONFIG.md](https://github.com/cogiceo/gpohound/blob/main/CONFIG.md) を参照してください。
```bash
gpohound --neo4j-user $USER --neo4j-pass $PASS dump
gpohound --neo4j-user $USER --neo4j-pass $PASS analysis
```
### パース
```bash
gpohound parse "gpos/sysvols/$DOMAIN/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol"
```
### ダンプ
```bash
gpohound dump
gpohound dump --list
gpohound dump --guid 31B2F340-016D-11D2-945F-00C04FB984F9
gpohound dump --policies scripts psscripts
gpohound dump --search 'VNC.*Server' --show
```
### 分析
```bash
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 の検出:
| グループ | エッジ |
|--------------------------------|--------------|
| 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 の保存されたパスワード | — |
### 特権権限
既定の特権 trustee と、SID が `S-1-5-8` で始まるサービスアカウントは分析から除外されます。
| 特権 | 説明 | エッジ |
| ----------------------------- | -------------------------------------------------------------- | ------------ |
| SeDebugPrivilege | ユーザーが任意のプロセスをデバッグおよび操作できるようにする | `CanPrivEsc` |
| SeBackupPrivilege | 機密ファイルへのアクセスを許可 | `CanPrivEsc` |
| SeRestorePrivilege | 復元中にオブジェクトの権限をバイパス | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | SYSTEM への昇格のためのトークン偽装を有効にする | `CanPrivEsc` |
| SeImpersonatePrivilege | 別のユーザーのコンテキストでプロセスを作成できるようにする | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | ユーザーがシステムオブジェクトの所有権を取得できるようにする | `CanPrivEsc` |
| SeTcbPrivilege | OS の一部として動作する機能を付与 | `CanPrivEsc` |
| SeCreateTokenPrivilege | 認証トークンの作成を許可 | `CanPrivEsc` |
| SeLoadDriverPrivilege | ドライバーのロード/アンロードを許可 | `CanPrivEsc` |
| SeManageVolumePrivilege | ボリュームまたはディスク管理の特権を付与 | `CanPrivEsc` |
| SeEnableDelegationPrivilege | コンピュータとユーザーアカウントを委任に対して信頼できるようにする | |
# 今後の改善
- [x] ログの改善
- [x] LDAP の統合
- [x] SMB の統合
- [ ] 残りの拡張機能の解析
- [ ] Webインターフェース
- [ ] GPO 間の潜在的な競合の強調表示
## GPO ドキュメント
### SYSVOL と LDAP
- [x] [\[MS-GPAC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPAC/) Audit Configuration Extension
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) Central Access Policies Protocol Extension
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) Encrypting File System Extension
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) Firewall and Advanced Security Data Structure
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) Folder Redirection Protocol Extension
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Internet Explorer Maintenance Extension
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) Network Access Protection (NAP) Extension
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) Name Resolution Policy Table (NRPT) Data Extension
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) Core Protocol
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) Preferences Extension Data Structure
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) Registry Extension Encoding
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) Security Protocol Extension
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) Scripts Extension Encoding
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) Software Installation Protocol Extension
### LDAP のみ
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) Deployed Printer Connections Extension
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) Wireless/Wired Protocol Extension