# GPOHound
`GPOHound` 是一款用于从 SYSVOL 共享中提取和分析组策略对象(GPO)的工具。
它提供结构化的、形式化的格式,帮助发现在 Active Directory 环境中的错误配置、不安全设置以及权限提升路径。
该工具与 BloodHound 的 Neo4j 数据库集成,将其用作 Active Directory 信息的类似 LDAP 来源,同时通过基于分析结果添加新的关系(边)和节点属性来丰富数据。
## 功能
### 转储
- [x] 以结构化的 JSON 或树形格式转储 GPO
- [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
你需要设置 Neo4j APOC 以进行 BloodHound 数据丰富:
- 如果你使用的是标准 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 界面。
## 使用
`example.zip` 中提供了示例 GPOHound 文件。使用 `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 冲突,以避免遗漏有效的设置。
### 本地组
- 检测登录时分配给特权本地组的用户
- 检测重命名的内置特权本地组
- 检测使用“首选项进程变量”(例如 %ComputerName%、%DomainName%)添加到特权本地组的受托人
- 检测使用 `sAMAccountName` 劫持的可滥用受托人
- 检测添加到特权本地组的任何受托人:
| 组 | 边 |
|--------------------------------|----------------|
| 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 存储的密码 | — |
### 特权权限
默认特权受托人以及 SID 以 `S-1-5-8` 开头的服务帐户会被排除在分析之外。
| 权限 | 描述 | 边 |
| ----------------------------- | ----------------------------------------------------------------- | --------------- |
| SeDebugPrivilege | 允许用户调试并与任何进程交互 | `CanPrivEsc` |
| SeBackupPrivilege | 授予对敏感文件的访问权限 | `CanPrivEsc` |
| SeRestorePrivilege | 在还原期间绕过对象权限 | `CanPrivEsc` |
| SeAssignPrimaryTokenPrivilege | 启用令牌模拟以提升至 SYSTEM | `CanPrivEsc` |
| SeImpersonatePrivilege | 允许在另一个用户的上下文中创建进程 | `CanPrivEsc` |
| SeTakeOwnershipPrivilege | 允许用户获取系统对象的所有权 | `CanPrivEsc` |
| SeTcbPrivilege | 授予作为操作系统一部分执行的能力 | `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/) 审核配置扩展
- [x] [\[MS-GPCAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPCAP/) 中央访问策略协议扩展
- [x] [\[MS-GPEF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPEF/) 加密文件系统扩展
- [x] [\[MS-GPFAS\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFAS/) 防火墙和高级安全数据结构
- [x] [\[MS-GPFR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPFR/) 文件夹重定向协议扩展
- [ ] [\[MS-GPIE\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPIE/) Internet Explorer 维护扩展
- [x] [\[MS-GPNAP\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNAP/) 网络访问保护(NAP)扩展
- [x] [\[MS-GPNRPT\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPNRPT/) 名称解析策略表(NRPT)数据扩展
- [x] [\[MS-GPOL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPOL/) 核心协议
- [x] [\[MS-GPPREF\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPPREF/) 首选项扩展数据结构
- [x] [\[MS-GPREG\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPREG/) 注册表扩展编码
- [x] [\[MS-GPSB\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSB/) 安全协议扩展
- [x] [\[MS-GPSCR\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSCR/) 脚本扩展编码
- [x] [\[MS-GPSI\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPSI/) 软件安装协议扩展
### 仅 LDAP
- [x] [\[MS-GPDPC\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPDPC/) 已部署打印机连接扩展
- [ ] [\[MS-GPWL\]](https://learn.microsoft.com/en-us/openspecs/windows_protocols/MS-GPWL/) 无线/有线协议扩展