GPOHound 是一款用于从 SYSVOL 共享中提取和分析组策略对象(GPO)的工具。
它提供结构化的、形式化的格式,帮助发现在 Active Directory 环境中的错误配置、不安全设置以及权限提升路径。
该工具与 BloodHound 的 Neo4j 数据库集成,将其用作 Active Directory 信息的类似 LDAP 来源,同时通过基于分析结果添加新的关系(边)和节点属性来丰富数据。
git clone "https://github.com/cogiceo/GPOHound"
cd GPOHound
pip install .
pipx install "git+https://github.com/cogiceo/GPOHound"
你需要设置 Neo4j APOC 以进行 BloodHound 数据丰富:
如果你使用的是标准 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 界面。
example.zip 中提供了示例 GPOHound 文件。使用 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 冲突,以避免遗漏有效的设置。
检测登录时分配给特权本地组的用户
检测重命名的内置特权本地组
检测使用“首选项进程变量”(例如 %ComputerName%、%DomainName%)添加到特权本地组的受托人
检测使用 sAMAccountName 劫持的可滥用受托人
检测添加到特权本地组的任何受托人:
默认特权受托人以及 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 | 授予作为操作系统一部分执行的能力 | CanPrivEsc |
| SeCreateTokenPrivilege | 允许创建身份验证令牌 | CanPrivEsc |
| SeLoadDriverPrivilege | 授权加载/卸载驱动程序 | CanPrivEsc |
| SeManageVolumePrivilege | 授予卷或磁盘管理权限 | CanPrivEsc |
| SeEnableDelegationPrivilege | 允许计算机和用户帐户被信任用于委派 |