IPAHound/IPAHound

GitHub: IPAHound/IPAHound

IPAHound 是一款专为 FreeIPA 设计的 BloodHound 数据收集器,通过 LDAP 枚举将 Linux 域环境中的身份与权限关系转化为图数据库格式,支撑基于图的安全分析与攻击路径发现。

Stars: 21 | Forks: 1

IPAHound

专为 FreeIPA 打造的 BloodHound 收集器
“攻击者以图的方式思考...” — 在 Linux 上也是如此!

## 目录 - [概述](#overview) - [配套 GUI](#companion-gui) - [快速入门](#quickstart) - [环境要求](#requirements) - [类型与边](#types-and-edges) - [工作原理](#how-it-works) - [安装](#installation) - [使用方法](#usage) - [将数据导入 Neo4j](#loading-data-into-neo4j) - [待办事项](#todo) - [其他资源](#additional-resources) - [Star 历史](#star-history) - [贡献指南](#contributing) ## 概述 IPAHound 是一个专门为 FreeIPA 域控制器设计的 LDAP 收集器,可通过基于图的可视化实现全面的域分析。它填补了 FreeIPA 复杂结构与 BloodHound 强大分析能力之间的空白。 该收集器主要分为两个阶段运行: 1. **数据收集** - 从 FreeIPA LDAP 服务器收集信息。 2. **数据处理** - 创建关系(边)并导出为 JSON 格式。 数据收集完成后,可以通过以下任一方式导入: - **Neo4j 的 APOC (Awesome Procedures On Cypher) 插件**(推荐 - 速度显著提升) - **经典 BloodHound GUI**(旧版支持) ### 设计理念 IPAHound 通过将 FreeIPA 繁杂的抽象简化为直观的格式,优先考虑了用户友好性。它将复杂的 FreeIPA 结构转化为易于分析的图,从而使您的安全评估工作更加高效。 ## 配套 GUI 原版 BloodHound 无法识别 FreeIPA 的节点和边标签,因此不会对其进行渲染。要可视化和查询 IPAHound 生成的数据,请使用配套的分支版本: - **[IPAHound-GUI](https://github.com/IPAHound/IPAHound-GUI)** - 支持 FreeIPA 节点/边的 BloodHound 分支版本。 ## 快速入门 端到端操作,从零开始生成可查询的图: 1. 安装 IPAHound。 ~$ uv tool install git+https://github.com/IPAHound/IPAHound.git 2. 从您的 FreeIPA DC 收集数据(此处演示 Kerberos 认证;密码认证请参阅使用方法)。 ~$ kinit admin ~$ ipahound -k -s dc01.ipa.local -a out.json 3. 在 Neo4j 中(一次性操作,在首次导入前) - 创建约束。完整约束列表请参阅下文的“将数据导入 Neo4j”。 4. 通过 APOC 导入 JSON(cypher-shell 或 Neo4j Browser)。 CALL apoc.import.json("/absolute/path/to/out.json"); 5. 打开 IPAHound-GUI,将其指向您的 Neo4j,然后开始狩猎。 ## 环境要求 - **Python** ≥ 3.10 - **Neo4j** 4.x 或 5.x,以及与之版本匹配的 **APOC** 插件(Neo4j 的次要版本与 APOC 版本**必须**匹配)。 - **FreeIPA** - 已在 4.9–4.11 版本上测试通过。更早的版本可能可以使用,但未进行主动测试。 - 能够访问 FreeIPA DC 上的 LDAP/LDAPS 端口的网络访问权限,以及有效的 Kerberos 票据或 LDAP 凭据。 ## 类型与边 ### 节点类型 IPAHound 将各种 FreeIPA 对象整合为简化的节点类型: | IPAHound 类型 | FreeIPA 对象 | |:--------------------------:|:-----------------------------------------------------------| | **IPADomain** | 根域对象 | | **IPAUser** | 用户,系统用户 | | **IPAGroup** | 组,系统组,权限,网络组,主机组 | | **IPAComputer** | 计算机 | | **IPAService** | 服务 | | **IPAPermission** | 权限 | | **IPARole** | 角色 | | **IPACA** | 证书颁发机构 | | **IPACertificateTemplate** | 证书模板 | | **IPASELinux** | SELinux 规则 | ### 边类型 节点之间的关系代表了各种权限和成员身份: | 边类型 | 描述 | |:-----------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------| | **TrustedBy** | FreeIPA 域与 MS Active Directory 之间的信任关系 | | **MemberOf** | 属于 IPAGroup、IPASELinux、IPACertificateTemplate 等的成员 | | **AddMember** | 管理组成员的能力(通过 _MemberManager_ 属性) | | **ForceChangePassword** | 创建新 Kerberos 密钥的权限 (_ipaAllowedToPerform;write_keys_) | | **ReadKerberosKey** | 读取 Kerberos 密钥/检索 keytab 的权限 (_ipaAllowedToPerform;read_keys_) | | **Owns** | 对 Computer 或 Group 对象的完全控制权 (_ManagedBy_ 属性)。支持配置 RBCD、创建 Kerberos 密钥、添加 SSH 密钥以及管理证书 | | **CanSSH** | 允许 SSH 访问的 HBAC 规则 | | **CanSUDO** | 允许在主机上执行 sudo 的组合 HBAC 和 SUDO 规则 | | **Can{*}** | 使用 `--save-all-hbac` 时,每个 HBAC 服务生成一条边(例如,`Cancrond`、`CanFTP`)。边名称派生自服务的 `cn`。 | | **AllowedToDelegate** | 约束委派权限 (S4U2Proxy) | | **Enroll** | 签发证书的权限 | | **AddRBCD** | 配置基于资源的约束委派的权限 (_ipaAllowedToPerform;write_delegation_) | | **DCSync** | DCSync 权限(从默认权限值推断) | ## 工作原理 ### 步骤 1:身份验证 FreeIPA LDAP 服务器支持两种身份验证方法: - **Kerberos** - 自动使用您 Kerberos 票据中的凭据。 - **简单绑定** - 需要完整的 DN (Distinguished Name)。 对于简单绑定,收集器接受纯用户名,并尝试自动构建完整的 DN。在非标准配置中,此预测可能会失败;如果失败,请显式传入完整的 DN。 DN 示例: - **User:** `uid=admin,cn=users,cn=accounts,dc=ipa,dc=local` - **Service:** `krbprincipalname=dogtag/pc01.ipa.local@IPA.LOCAL,cn=services,cn=accounts,dc=ipa,dc=local` ### 步骤 2:数据收集 收集器根据 `LDAP_PATHS` 结构检索所有可访问的数据。FreeIPA 可能会根据您的权限限制某些条目和属性的可见性。考虑使用不同的用户账户运行收集器,以获得最全面的覆盖。 运行结束后,IPAHound 会打印警告信息,例如 `No "krbTicketFlags" in computer accounts, try again with more privileges.` - 这些警告在低权限绑定下是**预期内**的,仅表明将缺少哪些图功能,而不是出现了错误。 可以使用 `--output-raw` 标志保存原始数据,以便用于: - 离线处理 - 调试目的 - 审计追踪 ### 步骤 3:数据处理 在此阶段,IPAHound 会: - 分析原始数据以创建关系边 - 过滤掉已禁用的账户和不活跃的规则 - 优化图结构以便于分析 ### 步骤 4:导出 IPAHound 支持两种导出格式。它们是**互斥的** - 每次运行只能选择一种: 1. **APOC 格式** (`-a` 选项) - 为 Neo4j APOC 插件导入优化(推荐) 2. **经典格式** (`-o` 选项) - 兼容经典 BloodHound JSON 加载器 ## 安装 安装 [uv](https://docs.astral.sh/uv/): ``` ~$ curl -LsSf https://astral.sh/uv/install.sh | sh ``` 将 `ipahound` 作为 CLI 工具安装: ``` ~$ uv tool install git+https://github.com/IPAHound/IPAHound ~$ ipahound -h ``` 安装 `ipahound` 以进行开发: ``` ~$ git clone https://github.com/IPAHound/IPAHound ~$ cd IPAHound ~$ uv sync ~$ uv run ipahound -h ``` 如果您更喜欢 [Poetry](https://python-poetry.org/),该仓库还附带了 `poetry.lock`: ``` ~$ pip install poetry ~$ poetry install ~$ poetry run ipahound -h ``` ## 使用方法 ### 命令行选项 ``` _____ _____ _____ _____ _ | | _ | _ | | |___ _ _ ___ _| | |- -| __| | | . | | | | . | |_____|__| |__|__|__|__|___|___|_|_|___| by Mikhail Sukhov (@Im10n), @ptswarm usage: ipahound [-h] [-d] [-s SERVER] [-b BASE_DN] [-u USER] [-p PASSWORD] [-k] [--save-all-hbac] [-a FILE] [-o FILE] [--output-raw FILE] [--input-raw FILE] IPA BloodHound Collector options: -h, --help Show this help message and exit -d, --debug Enable debug output LDAP connection parameters: -s SERVER, --ldap-server SERVER IP address or DNS name of LDAP server -b BASE_DN, --ldap-base-dn BASE_DN Base DN for LDAP dump (optional, defaults to auto-detection) Authentication options: -u USER, --ldap-user USER Username for LDAP (can use DN format: uid=admin,cn=users,cn=accounts,dc=ipa,dc=local) -p PASSWORD, --ldap-password PASSWORD Password for LDAP authentication -k, --kerberos Use Kerberos authentication instead of username/password Output format options: --save-all-hbac Draw all HBAC services in the graph (default: only sudo and SSH) -a FILE, --apoc-output FILE Output JSON for APOC neo4j plugin (recommended) -o FILE, --output FILE Output JSON for BloodHound loader Advanced options (debugging): --output-raw FILE Output RAW JSON before processing (useful for debugging) --input-raw FILE Process existing RAW JSON instead of performing LDAP dump ``` ### 示例 使用密码认证导出域数据(APOC 格式): ``` ~$ ipahound -u uid=admin,cn=users,cn=accounts,dc=ipa,dc=local -p P@ssw0rd -s dc01.ipa.local -a out_for_apoc.json ~$ ipahound -u admin -p P@ssw0rd -s dc01.ipa.local -a out_for_apoc.json ``` 使用 Kerberos 认证导出域数据(BloodHound 经典格式): ``` ~$ ipahound -k -s dc01.ipa.local -o out.json ``` 处理现有的原始数据转储(不产生 LDAP 流量): ``` ~$ ipahound --input-raw raw_dump.json -a processed_output.json ``` ## 将数据导入 Neo4j ### 前置条件 1. 从 [APOC 发布页面](https://github.com/neo4j/apoc/releases) 安装 APOC 插件。Neo4j 版本**必须**与 APOC 插件的版本匹配。 2. 在 `/etc/neo4j/apoc.conf` (Linux) 或 `conf/apoc.conf` (Windows) 中添加以下内容,启用 Neo4j 中的文件导入功能: apoc.import.file.enabled=true 3. 在 Neo4j 中创建必要的约束(一次性操作,在**首次**导入前执行): CREATE CONSTRAINT FOR (n:IPADomain) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPAUser) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPAGroup) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPAComputer) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPAService) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPAPermission) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPACertificateTemplate) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPACA) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:Base) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPARole) REQUIRE n.neo4jImportId IS UNIQUE; CREATE CONSTRAINT FOR (n:IPASELinux) REQUIRE n.neo4jImportId IS UNIQUE; ### 导入过程 导入(或重新导入)收集到的数据: ``` CALL apoc.import.json("/path/to/file.json"); ``` 要在全新导入前清除现有数据(例如在两次任务之间): ``` MATCH (n) DETACH DELETE n; ``` 上述步骤 3 中创建的约束在执行 `DETACH DELETE` 后依然有效,永远不需要重新创建。 ## 待办事项 - [ ] 添加 ACI 解析器 ## 其他资源 有关 FreeIPA 安全分析和攻击技术的更多详细信息,请参阅我们的博客文章: 1. https://swarm.ptsecurity.com/thinking-in-graphs-with-ipahound/ 2. https://habr.com/ru/companies/pt/articles/1028412/ - ... ## 贡献指南 我们欢迎各种贡献!请随时提交 Issue、功能请求和 Pull Request。

祝您狩猎愉快! 🎯

标签:APT, BloodHound, Checkov, Cypher, FreeIPA, GUI, HTTP, LDAP, Neo4j, 协议分析, 反取证, 图论, 域控制器, 域渗透, 域环境分析, 威胁建模, 安全评估, 开源安全工具, 攻击路径分析, 数据展示, 无线安全, 权限提升, 电子数据取证, 系统管理员, 红队, 网络安全, 逆向工具, 逆向工程平台, 隐私保护