kaydaskalakis/AnonymousHound

GitHub: kaydaskalakis/AnonymousHound

AnonymousHound 是一个 PowerShell 工具,用于匿名化 BloodHound 导出数据中的敏感信息,同时保留安全攻击路径供分析使用。

Stars: 28 | Forks: 1

# AnonymousHound 抹除踪迹,保留线索。AnonymousHound 对 BloodHound 导出数据(用户、组、PKI 等)中的敏感数据进行匿名化处理,确保个人可识别信息(PII)被清除,但安全漏洞和攻击路径的完整图谱得以 100% 完整保留,供分析使用。 AnonymousHound 他超级匿名。 ## 他是…… ## 目录 - [什么是 AnonymousHound?](#what-is-anonymoushound) - [为何存在?](#why-does-this-exist) - [快速开始](#quick-start) - [v0.3 BETA 版新特性](#whats-new-in-v03-beta) - [功能特性](#features) - [用户体验](#user-experience) - [性能与优化](#performance--optimization) - [匿名化内容](#what-gets-anonymized) - [使用示例](#usage-examples) - [HTML 报告](#html-report) - [支持的文件类型](#supported-bloodhound--githound--azurehound-file-types) - [故障排除](#troubleshooting) - [高级用法](#advanced-usage) - [许可与使用](#license--usage) - [致谢](#credits) - [更新日志](#changelog) **版本:** 0.3 BETA **运行环境要求:** 需要 PowerShell 7+ (`pwsh`)。不支持 Windows PowerShell 5.1 / ISE。 **作者:** Kay Daskalakis **GitHub:** [https://github.com/kaydaskalakis](https://github.com/kaydaskalakis) **LinkedIn:** [https://www.linkedin.com/in/kdaskalakis](https://www.linkedin.com/in/kdaskalakis) ## 什么是 AnonymousHound? AnonymousHound 是一款 PowerShell 工具,用于匿名化处理 BloodHound 数据导出,使安全专业人员能够安全地共享 Active Directory 安全评估结果,而不会暴露敏感的组织信息。 ## 为何存在? ### 问题所在 想象一下,你是一名安全顾问,刚为一家公司完成了一次全面的 Active Directory 安全评估。你发现了几条可能导致攻击者攻陷域管理员账户的关键攻击路径。你希望: - **分享你的发现** 给其他安全研究人员进行同行评审 - **创建培训材料**,展示真实的攻击场景 - **寻求帮助**,在安全论坛上提问而不暴露客户身份 - **演示技术**,在会议或博客文章中展示 **但是** - BloodHound 数据包含极其敏感的信息: - 员工姓名和用户名(例如,“john.smith”、“sarah.johnson”) - 电子邮件地址([john.smith@acmecorp.com](mailto:john.smith@acmecorp.com)) - 计算机主机名(FINANCE-PC-01, CEO-LAPTOP) - 域名(acmecorp.local, internal.acmecorp.com) - 组织结构(销售部 OU,执行部 OU,IT 部门) - 证书详情和基础设施布局 **分享这些数据将构成严重的隐私和安全泄露!** ### 解决方案 AnonymousHound 通过**伪装所有可识别信息同时保留攻击路径**来解决此问题。可以这样理解: #### 匿名化前(已暴露!) ``` User: john.smith@acmecorp.com ├─ MemberOf: Domain Admins ├─ HasSession: FINANCE-PC-01.acmecorp.local └─ Can compromise: CEO-LAPTOP.acmecorp.local ``` #### 匿名化后(可安全分享!) ``` User: USR_A3F2E1@domain1.local ├─ MemberOf: Domain Admins ← (Preserved! Still shows privilege) ├─ HasSession: HOST_B7D9C2.domain1.local └─ Can compromise: HOST_F4E8A6.domain1.local ``` **攻击路径依然存在!** 你仍然可以看到: - 某用户是 Domain Admin - 该用户在某处有会话 - 这构成了一条攻陷另一台计算机的路径 但现在**所有识别信息都已消失** - 没有公司名称,没有员工姓名,没有任何可以追溯到真实组织的信息。 ### 实际应用场景 ### 1. 安全研究与协作 *"我发现了一条疯狂的攻击路径,但不确定它是否可被利用..."* 现在你可以在 Reddit 的 /r/AskNetsec 或安全 Discord 服务器等论坛上分享你的 BloodHound 数据,而不会违反保密协议(NDA)或暴露你的客户。 ### 2. 培训与教育 *"我想使用真实数据教人们关于 Active Directory 攻击的知识..."* 安全培训师可以在课程中使用真实的匿名化数据集,而不是人工实验环境,向学生展示真实企业 AD 环境的样子。 ### 3. 工具开发与测试 *"我正在构建一个分析 BloodHound 数据的工具..."* 开发者可以使用多样化的真实世界数据集测试他们的工具,而无需访问实际的企业环境。 ### 4. 会议演示与博客文章 *"我想在 DEF CON 上展示我的方法论..."* 安全研究人员可以公开演示攻击技术和发现,而不会暴露他们评估过的组织。 ### 5. 合规与审计 *"我们需要向审计团队展示我们的安全发现..."* 某些合规框架要求提供安全测试的证据,但展示原始数据可能违反隐私法规(GDPR、HIPAA)。匿名化数据可以满足这两方面的要求。 ## 快速开始 ### 运行 AnonymousHound 的三种方式 #### 1. 最简单:无参数(交互模式) 直接运行脚本 - 它会引导你完成所有步骤! ``` .\AnonymousHound.ps1 ``` **会发生什么:** - 自动检测缺失参数 - 启动交互式向导 - 逐步提示 - 提供适合初学者或有经验用户的选项 - 支持路径的拖放操作 **适用于:** 首次用户、初学者、探索选项 #### 2. 快速:命令行模式 直接指定输入和输出目录: ``` .\AnonymousHound.ps1 -InputDirectory "C:\BloodHound\Data" -OutputDirectory "C:\BloodHound\Anonymized" ``` **适用于:** 有经验的用户、自动化、脚本编写 需要清理 GitHound 导出数据?自动发现现在可以找到 `githound.json`,或者显式指定它: ``` .\AnonymousHound.ps1 -InputFile ".\githound.json" -OutputDirectory ".\Anonymized" ``` **适用于:** GitHub 图收集、GitHound 数据集、CI 管道 #### 3. 安全:先预览(试运行模式) 在不做任何更改的情况下查看将会发生什么: ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" -WhatIf ``` **显示:** - 将要处理的文件 - 匿名化示例 - 保留的知名对象 - **不会修改任何文件!** **适用于:** 谨慎的用户、验证、新数据集 ## v0.3 BETA 版新特性 v0.3 BETA 是第一个整合了 AD/PKI + GitHound + AzureHound 支持的版本,强化了一致性行为,并带来了重大的吞吐量改进。 ### v0.3 更新日志(完整) - **平台覆盖范围** - 增加了 AzureHound CE 单文件支持 (`azurehound*.json`),包含基于类型的匿名化处理(身份、组、应用/SPN、设备、订阅/资源组/资源、角色和关系记录)。 - 增加了 AD CS `issuancepolicies.json` 支持。 - 扩展了 GitHound 覆盖范围和文档。 - **PII 匿名化强化** - 为嵌套字段中嵌入的电子邮件/UPN 和资源路径添加了递归 Azure 清理器。 - 改进了 `*.onmicrosoft.com` 多标签租户域的 Azure 域处理。 - 统一了资源名称别名,使名称字段和资源路径段保持一致。 - **AD/PKI 一致性修复** - 在 DN 处理期间保留了额外的知名 CN/组用例(包括 Exchange/DHCP 模式系列)。 - 改进了关系结构中 SID/GUID/DN 形状值的对象标识符转换。 - 修复了 Exchange/特殊 `$` 前缀组的处理以及本地组主机名后缀重写。 - **性能改进** - 在文件处理器中用 `List[object].Add()` + `ToArray()` 替换了二次方数组追加。 - 将深度复制切换为快速对象遍历 (`FastClone`),JSON 作为后备方案。 - 将 JSON 输出路径切换为 `System.Text.Json` 写入器 (`FastJsonWriter`),`ConvertTo-Json` 作为后备方案。 - 增加了以 MB/s 和记录/秒 (`objects/sec`) 为单位的吞吐量报告。 - **验证/报告质量** - 通过信任显式的保留类别并添加经过验证的基础设施 CN(`KRA`、`OID`、`AZUREAD` 等)来减少 CN 一致性的假阳性警告噪声。 - 保留了关键的一致性检查(知名对象意外被匿名化、冲突的映射、无效格式)。 - **文档/版本控制** - 更新了支持的文件类型矩阵(BloodHound / GitHound / AzureHound)。 - 更新了并行性说明(`-EnableParallel` 在线程安全的共享映射架构实现之前保留)。 - 将产品/文档版本引用更新至 `v0.3 BETA`。 ### 🎯 用户体验增强 #### 1. 交互模式 - 无需参数 **新功能:** 无需任何参数运行即可获得引导式向导! ``` PS> .\AnonymousHound.ps1 ╔═══════════════════════════════════════════════════════════════════╗ ║ 🛡️ ANONYMOUSHOUND v0.3 BETA ║ ║ BloodHound Data Anonymization Tool ║ ╚═══════════════════════════════════════════════════════════════════╝ No input specified. Let's get started! What would you like to do? [1] Quick Start - Simple guided wizard (recommended for beginners) [2] Specify paths only (for experienced users) [3] Show help and exit Enter your choice (1, 2, or 3): ``` **功能:** - **分步向导**,带示例和默认值 - **拖放支持** - 直接从文件资源管理器粘贴路径 - **高级选项**(可选)- 保留主机名、操作系统版本等 - 处理开始前的**确认屏幕** #### 2. 带有帮助性错误消息的输入验证 **新功能:** 出错时提供清晰、可操作的错误消息: ``` ╔═══════════════════════════════════════════════════════════════════╗ ║ ❌ INPUT VALIDATION ERROR ║ ╚═══════════════════════════════════════════════════════════════════╝ Path not found: C:\MyDat 💡 Suggestions: • Check that the path is spelled correctly • Verify the drive letter (C:\, D:\, etc.) • Make sure you have permission to access this location • Use Tab completion to auto-complete paths • Ensure this is a directory, not a file ``` **验证内容:** - 路径存在性和可访问性 - 文件与目录类型 - JSON 文件检测 - BloodHound 格式验证 - 为边缘情况提供继续的选项 #### 3. 带有预览的试运行模式 (`-WhatIf`) **新功能:** 在提交前精确查看将要发生什么: ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" -WhatIf ``` **显示:** ``` ╔═══════════════════════════════════════════════════════════════════╗ ║ 👁️ DRY RUN MODE (Preview Only) ║ ╚═══════════════════════════════════════════════════════════════════╝ This is a preview. No files will be modified or created. 📂 Input Directory: C:\Data Files that would be processed: users.json (1 file(s)) groups.json (1 file(s)) computers.json (1 file(s)) domains.json (1 file(s)) Total: 4 files Size: 1.23 MB Anonymization Examples: Original Domain: CONTOSO.COM → DOMAIN1.LOCAL Original User: john.smith@contoso.com → USR_A1B2C3@DOMAIN1.LOCAL Original Computer: WKS-FINANCE-01 → COMP_X7Y8Z9 Original Group: Domain Admins → GRP_D4E5F6 Well-Known Objects (Preserved): • Domain Admins, Enterprise Admins, Administrator • BUILTIN groups, Everyone, Authenticated Users • Common service accounts (MSSQLSERVER, etc.) ``` #### 4. 增强的视觉反馈 #### 5. GitHound 图支持(新功能) AnonymousHound 现在会自动识别 GitHound 导出数据(`githound.json`): - 自动发现会列出包含 GitHound 数据的目录,与传统的 BloodHound 收集并列。 - 每种 GitHub 节点类型(用户、组织、团队、仓库、分支、工作流、环境、角色)都使用一致的别名表进行匿名化。 - 边保持不变,因此 GitHub 攻击路径和权限关系保持可分析性。 **新功能:** 美观的彩色图标输出: - **边框**(═, ║, ╔, ╗, ╚, ╝)用于章节 - **图标**(🛡️, ✓, ✗, ⚠️, 💡, 📂, 📄, 📊, ⚡) - **颜色** - 成功(绿色)、错误(红色)、警告(黄色)、信息(青色) - 带 ETA 计算的**进度指示器** ### ⚡ 性能优化 #### 1. 哈希表预分配 **新功能:** 从文件大小估算对象数量并预分配内存: ``` ⚡ Performance Optimizations Applied: • Hashtable pre-allocation (estimated: 2,500 objects) • Throughput (input bytes): 3.45 MB/s • Throughput (records): 12470 objects (~692.8 objects/sec) ``` **影响:** 大型数据集性能提升 10-20% #### 2. 优化的 JSON 解析 **新功能:** 智能文件大小检测与优化的解析器: - 文件 <10MB:快速的标准 `ConvertFrom-Json` - 文件 >10MB:内存高效的 .NET `System.Text.Json` - 错误时自动回退 **影响:** 大型文件内存占用减少 30-40% #### 3. 性能指标跟踪 **新功能:** 实时性能监控: ``` ⚡ Performance Optimizations Applied: • Hashtable pre-allocation (estimated: 1,247 objects) • Throughput (input bytes): 2.34 MB/s • Throughput (records): 6235 objects (~346.4 objects/sec) ``` **跟踪的指标:** - 总处理时长 - 已处理字节数(目录批次) - 吞吐量(MB/s)和适用时的对象/秒 - 已应用的优化 #### 4. 带 ETA 的进度指示器 **改进:** 带时间估算的增强进度条: ``` Anonymizing Collection: 20240101 [████░░░░░░░░░░░░░░░░░░░░] 20% - ETA: calculating... Current file: 20240101_users.json Anonymizing Collection: 20240101 [████████████████████░░░░] 80% - ETA: 2 min 15 sec Current file: 20240101_computers.json ``` **功能:** - 实时进度百分比 - 预热阶段(`ETA: calculating...`),直到有足够的计时数据 - 预热后的预估剩余时间 - 当前正在处理的文件/阶段(单文件和目录模式) - 格式化的时间显示(秒、分钟、小时) ### 📊 增强的 HTML 报告 #### 1. 执行摘要 **新功能:** 面向利益相关者的高层概览: ``` Executive Summary ───────────────── ┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐ │ Success Rate │ Risk Level │ Objects │ Processing │ │ 100.0% │ LOW RISK ✅ │ 1,247 │ 00:12 │ └─────────────────┴─────────────────┴─────────────────┴─────────────────┘ ``` **包括:** - 成功率百分比 - 风险评估(低/中/高) - 已处理的对象总数 - 处理时长 - 快速指标一览 #### 2. 符合 WCAG 2.1 AA 级标准 **新功能:** 完全可访问的 HTML 报告: - **跳过导航链接**,方便键盘用户 - **语义化 HTML5** 地标(header, nav, main, footer) - **ARIA 属性**,供屏幕阅读器使用 - **焦点指示器**(3px 实线轮廓) - **颜色对比度**满足 4.5:1 最低要求 - **键盘导航**支持 - 具有适当 ARIA 状态的**可折叠部分** #### 3. 深色主题 **改进:** 专业的深色主题,附 GDPR 合规说明: - 现代渐变背景 - 高对比度文本 - 彩色徽章 - 响应式设计 - 移动设备友好 ### 🔧 技术改进 #### 1. 一致性检查 **改进:** 域信任 SID 映射修复: - 修复了 3→1 域 SID 关联警告 - 正确的 TargetDomainSid → TargetDomainName 映射 - 增强了域信任关系处理 #### 2. SHARPHOUND 保留 **修复:** SHARPHOUND 主机名现在被正确保留: - 匹配 SPN 中 SHARPHOUND 的模式 - 保留为 'SRV-SHARPHOUND' - 不再被错误匿名化 #### 3. PSScriptAnalyzer 合规 **改进:** 警告减少 97.5%: - 200+ → 5 条警告 - 添加了带理由的适当抑制规则 - 更清洁、更易维护的代码 ### 📝 文档 所有文档已整合到 README.md 中: - 快速开始指南 - 交互模式演练 - 故障排除部分 - 性能调优指南 - 高级用法示例 - 完整的功能文档 ## 功能特性 ### 核心匿名化功能 - ✅ **一致的身份映射** - 相同实体的所有出现都将获得跨所有文件的相同匿名化名称 - ✅ **关系保留** - 攻击路径、组成员资格和权限保持不变 - ✅ **知名主体保护** - 保留内置安全组和账户以进行准确分析 - ✅ **域控制器识别** - 自动识别并保留 DC 命名模式(DC01、DC02、RODC01 等) - ✅ **证书服务支持** - 完整的 AD CS 匿名化,包括模板、CA 和 NTAuthStores - ✅ **LDAP 分区处理** - 正确处理 DomainDnsZones、ForestDnsZones 和 _msdcs 分区 - ✅ **Exchange 组识别** - 特殊处理 Exchange DAG 组和系统组 - ✅ **SPN 匿名化** - 服务主体名称被匿名化,同时保留服务类型 - ✅ **GUID 和 SID 映射** - GUID 和安全标识符的确定性匿名化 ### 数据完整性功能 - ✅ **可分辨名称解析** - 处理具有转义字符和特殊格式的复杂 DN - ✅ **不区分大小写的映射** - 无论源数据中的大小写变化如何,都能一致处理 - ✅ **CN 与 OU 区分** - 正确区分 CN 容器和 OU 组织单位 - ✅ **幂等处理** - 检测并跳过已匿名化的文件 - ✅ **深度 JSON 处理** - 处理嵌套结构和复杂的 BloodHound 模式 - ✅ **时间戳随机化** - 可选功能,用于混淆收集日期 ### 报告与透明度 - ✅ **交互式 HTML 报告** - 符合 WCAG 2.1 AA 级标准,带深色主题 - ✅ **执行摘要** - 面向利益相关者的高层指标 - ✅ **综合映射文件** - 按类型组织的所有匿名化映射的完整记录 - ✅ **保留项文档** - 详细列出未被匿名化的内容及其原因 - ✅ **控制台进度跟踪** - 带 ETA 计算的实时反馈 - ✅ **详细的汇总统计** - 按类别细分所有匿名化实体 - ✅ **错误日志** - 用于故障排除和验证的独立错误日志 - ✅ **性能指标** - 吞吐量跟踪和优化报告 ## 用户体验 ### 支持的工作流 #### 工作流 1:绝对初学者 **目标:** 在无任何先验知识的情况下匿名化 BloodHound/GitHound 数据 **步骤:** 1. 运行:`.\AnonymousHound.ps1` 2. 选择选项 [1] - 快速开始向导 3. 按照提示操作 4. 检查输出 **结果:** 成功匿名化数据,充满信心 #### 工作流 2:有经验的 PowerShell 用户 **目标:** 使用命令行参数快速匿名化 **步骤:** 1. 运行:`.\AnonymousHound.ps1 -InputDirectory "C:\Data" -OutputDirectory "C:\Output"` 2. 完成 **结果:** 立即处理,无提示 #### 工作流 3:谨慎的用户 **目标:** 提交前预览 **步骤:** 1. 运行:`.\AnonymousHound.ps1 -InputDirectory "C:\Data" -WhatIf` 2. 检查预览 3. 如果满意,不带 `-WhatIf` 运行 **结果:** 处理前充满信心 ### 交互模式演练 #### 步骤 1:选择输入类型 ``` Step 1: Select Input ──────────────────── [1] Process a directory of BloodHound/GitHound JSON files (recommended) [2] Process a single JSON file Enter your choice (1 or 2): 1 ``` #### 步骤 2:指定输入路径 ``` Enter the path to your BloodHound/GitHound data directory: (Example: C:\BloodHoundData or drag-and-drop folder here) Directory path: C:\MyData ``` **提示:** 将你的文件夹拖放到 PowerShell 中 - 引号会自动去除! #### 步骤 3:指定输出路径 ``` Step 2: Select Output Location ─────────────────────────────── Enter the path where anonymized data should be saved: (Press Enter for default: .\AnonymizedData) Output directory: [Enter for default] ``` #### 步骤 4:配置选项(可选) ``` Step 3: Options (Optional) ─────────────────────────── Would you like to configure advanced options? (y/n) (Default: n - Use recommended settings) Configure options: n ``` **高级选项包括:** - 保留原始主机名(是/否) - 保留操作系统版本字符串(是/否) - 生成 HTML 报告(是/否,默认:是) #### 步骤 5:确认 ``` ═══════════════════════════════════════════════════════════════════ Ready to Anonymize ═══════════════════════════════════════════════════════════════════ Input: C:\MyData Output: .\AnonymizedData • Generating HTML report Press Enter to begin or Ctrl+C to cancel... ``` ## 性能与优化 ### 性能基准 吞吐量在很大程度上取决于磁盘速度、CPU 和平均记录大小。最近的构建版本添加了**线性时间输出缓冲**(使用 `List[object]` 而非重复的数组连接)、**无 JSON 往返的深拷贝** (`FastClone`),以及用于写入的 `**System.Text.Json` UTF-8 序列化** (`FastJsonWriter`)——这些通常主导了百万条记录导出时的运行时间。 | 数据集大小 | 对象数量 | 处理时间 | 吞吐量(大致) | | -------------------- | ------------- | --------------- | ------------------------------------------------------- | | 小型 (<100MB) | <5,000 | <30 秒 | ~3–8 MB/s 输入*以及*数百–数千对象/秒 | | 中型 (100MB–500MB) | 5,000–25,000 | 1–5 分钟 | ~2–4 MB/s 输入 | | 大型 (500MB–1GB) | 25,000–50,000 | 5–15 分钟 | ~1–3 MB/s 输入 | | 超大型 (>1GB) | 50,000+ | 15–60 分钟 | ~0.5–2 MB/s 输入 | 每次运行后使用汇总行 **吞吐量(记录)**(对象/秒)在你的硬件上进行同类比较。 ### 内存使用 | 数据集大小 | 峰值内存(估计) | 备注 | | ------------ | ----------------------- | ------------------------------ | | <100MB | <500MB | 标准处理 | | 100MB-500MB | 500MB-2GB | 哈希表预分配有所帮助 | | 500MB-1GB | 2GB-4GB | 监控可用 RAM | | >1GB | 4GB+ | 考虑拆分数据集 | ### 已应用的优化 1. **哈希表容量提示** — 目录模式根据总 JSON 字节估算收集大小(信息性的预分配提示)。 2. **智能 JSON 解析** — 较大的输入在有益的情况下使用 `System.Text.Json` 进行反序列化;较小的文件使用 `ConvertFrom-Json`。 3. **线性输出缓冲** — 每个文件处理器通过 `List[object]` 然后 `ToArray()` 追加匿名化行(避免二次方数组增长)。 4. **快速深拷贝** — `Copy-ObjectDeep` 使用嵌入的 `FastClone`(PSObject 遍历);JSON 往返仅作为后备方案。 5. **快速 JSON 写入器** — `ConvertTo-SafeJson` 使用 `FastJsonWriter`(`System.Text.Json`,缩进 UTF-8);`ConvertTo-Json` 仅作为后备方案。 6. **性能指标** — 报告输入 MB/s(目录模式)、处理的总记录数和整个运行的 **对象/秒**。 ### 并行处理 (`-EnableParallel`) 匿名别名必须在**同一个 SharpHound/Azure 收集中的每个 JSON 文件中保持一致**。并行工作者当前无法与 PowerShell 的并行 API 安全地共享实时映射表,因此**每个收集的处理仍然是顺序进行的**。`-EnableParallel` / `-ThrottleLimit` 开关保留用于未来的线程安全架构;启用它们只会打印一条信息性说明——无论是否启用,上面的克隆/写入/列表优化始终适用。 ## 匿名化内容? ### 个人可识别信息 (PII) - ✅ 用户名 → `USR_A3F2E1` - ✅ 电子邮件地址 → `email_b7d9c2@domain1.local` - ✅ 计算机名 → `COMP_F4E8A6` - ✅ 组名 → `GRP_C9B2D1` - ✅ 域名 → `DOMAIN1.LOCAL`, `DOMAIN2.LOCAL` - ✅ 组织单位 → `OU_7F3A21` - ✅ 证书详情 → 随机化的指纹 - ✅ 描述和显示名称 ### 什么不会被匿名化?(对分析至关重要!) - ✅ **知名安全主体**(Domain Admins, Enterprise Admins, Administrators) - ✅ **攻击路径关系**(MemberOf, HasSession, AdminTo 等) - ✅ **权限和 ACL**(谁可以对谁做什么) - ✅ **组策略对象**(攻击面分析) - ✅ **证书模板**(AD CS 攻击路径,如 ESC1-ESC13) - ✅ **域信任关系** - ✅ **安全相关属性**(SPN 名称、加密类型等) - ✅ **内置账户**(Administrator, Guest, krbtgt 等) - ✅ **系统组**(Domain Admins, Enterprise Admins, Schema Admins 等) - ✅ **域控制器**(保留 DC 命名模式) ## 使用示例 ### 基本用法 #### 处理整个目录 ``` .\AnonymousHound.ps1 -InputDirectory "C:\BloodHound\Data" -OutputDirectory "C:\BloodHound\Anonymized" ``` #### 处理单个文件 ``` .\AnonymousHound.ps1 -InputFile "C:\BloodHound\users.json" -OutputDirectory "C:\BloodHound\Output" ``` #### 拖放友好 ``` # 输入此命令,然后将您的文件夹拖入 PowerShell: .\AnonymousHound.ps1 -InputDirectory " # 显示为:"C:\My BloodHound Exports\Collection 2024" # 完成命令: " -OutputDirectory ".\Output" ``` ### 高级用法 #### 随机化时间戳 ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" -OutputDirectory "C:\Output" -RandomizeTimestamps ``` #### 保留主机名以供分析 ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" ` -OutputDirectory "C:\Output" ` -PreserveHostnames ``` **保留:** SERVER-DC01, WKS-FINANCE-01 等。 **匿名化:** 其他所有内容(用户、组、域) #### 保留操作系统版本 ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" ` -OutputDirectory "C:\Output" ` -PreserveOSVersions ``` **保留:** "Windows Server 2019", "Windows 10 Enterprise" **适用于:** 针对特定操作系统的漏洞分析 #### 使用现有映射以保持一致性 ``` .\AnonymousHound.ps1 -InputDirectory "C:\NewData" ` -OutputDirectory "C:\Output" ` -DomainMappingFile "C:\PreviousOutput\domain_mapping.json" ``` **确保:** CONTOSO.COM 在所有运行中始终映射到 DOMAIN1.LOCAL #### 带详细日志记录的试运行 ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" -WhatIf -Verbose ``` ### 自动化与脚本编写 #### 批量处理多个收集 ``` $collections = Get-ChildItem "C:\Collections" -Directory foreach ($collection in $collections) { $outDir = "C:\Output\$($collection.Name)" .\AnonymousHound.ps1 -InputDirectory $collection.FullName -OutputDirectory $outDir } ``` #### 用于自动匿名化的计划任务 ``` $action = New-ScheduledTaskAction -Execute "powershell.exe" ` -Argument "-File C:\Scripts\AnonymousHound.ps1 -InputDirectory C:\BH\Data -OutputDirectory C:\BH\Out" $trigger = New-ScheduledTaskTrigger -Daily -At 2AM Register-ScheduledTask -TaskName "BloodHound Anonymization" -Action $action -Trigger $trigger ``` ## HTML 报告 处理完成后,AnonymousHound 会生成一份全面的 HTML 报告,包含: ### 执行摘要 ``` ┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐ │ Success Rate │ Risk Level │ Objects │ Processing │ │ 100.0% │ LOW RISK ✅ │ 1,247 │ 00:12 │ └─────────────────┴─────────────────┴─────────────────┴─────────────────┘ ``` - **成功率** - 成功匿名化对象的百分比 - **风险级别** - 基于一致性检查的 低/中/高 - **对象数** - 处理的对象总数 - **处理时间** - 匿名化过程的持续时间 ### 详细统计 - **已匿名化对象** - 按类型细分(用户、组、计算机等) - **已保留对象** - 未被匿名化的知名对象 - **一致性检查** - 域映射、CN 映射等 - **性能指标** - 吞吐量和已应用的优化 ### 映射表 - **域映射** - 原始域名 → 匿名化域名 - **用户映射** - 原始用户名 → 匿名化用户名 - **组映射** - 原始组名 → 匿名化组名 - **计算机映射** - 原始计算机名 → 匿名化计算机名 ### 符合 WCAG 2.1 AA 级标准 - **键盘导航** - 完全键盘可访问 - **屏幕阅读器支持** - ARIA 标签和地标 - **颜色对比度** - 满足 4.5:1 最低比率 - **跳过链接** - 跳转到主要内容 - **焦点指示器** - 可见的焦点状态 **在浏览器中打开报告以探索所有功能!** ## 支持的 BloodHound / GitHound / AzureHound 文件类型 - ✅ users.json - ✅ groups.json - ✅ computers.json - ✅ domains.json - ✅ gpos.json - ✅ ous.json - ✅ containers.json - ✅ certtemplates.json (AD CS) - ✅ ntauthstores.json (AD CS) - ✅ aiacas.json (AD CS) - ✅ rootcas.json (AD CS) - ✅ enterprisecas.json (AD CS) - ✅ issuancepolicies.json (AD CS — SharpHound CE 2024+) - ✅ githound.json (GitHound 导出) - GHOrganization / GHUser / GHTeam - GHRepository / GHBranch / GHWorkflow / GHEnvironment - GHTeamRole / GHOrgRole / GHRepoRole - ✅ azurehound*.json (AzureHound CE 单文件导出,例如 `azurehound.json`, `azurehound-ce.json`) - AZTenant / AZUser / AZGroup / AZApp / AZServicePrincipal / AZDevice - AZSubscription / AZResourceGroup / AZManagementGroup - AZKeyVault / AZAutomationAccount / AZContainerRegistry / AZFunctionApp / AZLogicApp / AZManagedCluster / AZVM / AZVMScaleSet / AZWebApp - AZRole(内置角色保留;自定义角色别名化) - AZFederatedIdentityCredential(主体 + 名称别名化) - 所有 `*Owner` / `*RoleAssignment` / `*UserAccessAdmin` / `*Contributor` / `AZGroupMember` 关系类型(对象 ID 保留,嵌入的主体记录和资源路径一致地别名化) - 请参阅 `[ANONYMIZATION_PLAN_AZURE.md](ANONYMIZATION_PLAN_AZURE.md)` 获取完整的 PII 与保留字段矩阵。 ## 故障排除 ### 问题:“路径未找到” **错误:** ``` ❌ Error: Path not found: C:\MyData ``` **解决方案:** - ✅ 检查拼写:`C:\MyData` 与 `C:\My Data` - ✅ 验证驱动器号存在 - ✅ 确保你有读取权限 - ✅ 使用 Tab 补全:输入 `C:\My` 然后按 Tab ### 问题:“未找到 JSON 文件” **错误:** ``` ⚠️ WARNING: No JSON files found in directory ``` **解决方案:** - ✅ 验证这是一个 BloodHound 导出目录 - ✅ 检查是否存在类似命名的文件:`20240101_users.json` - ✅ 确保文件具有 `.json` 扩展名 - ✅ 检查文件是否在子目录中 ### 问题:“预期为目录,但找到的是文件” **错误:** ``` ❌ Error: Expected a directory, but found a file 💡 Did you mean to use -InputFile instead of -InputDirectory? ``` **解决方案:** 对单个文件使用 `-InputFile`: ``` .\AnonymousHound.ps1 -InputFile "C:\Data\users.json" -OutputDirectory "C:\Output" ``` ### 问题:脚本无法运行(执行策略) **错误:** ``` cannot be loaded because running scripts is disabled on this system ``` **解决方案:** ``` Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned ``` 然后再次运行脚本。 ### 问题:希望记录 **解决方案:** 添加 `-Verbose` 标志: ``` .\AnonymousHound.ps1 -InputDirectory "C:\Data" -OutputDirectory "C:\Output" -Verbose ``` 显示每个操作的详细日志记录。 ## 高级用法 ### 获取内置帮助 ``` # 简要帮助 Get-Help .\AnonymousHound.ps1 # 详细帮助 Get-Help .\AnonymousHound.ps1 -Detailed # 示例 Get-Help .\AnonymousHound.ps1 -Examples # 完整文档 Get-Help .\AnonymousHound.ps1 -Full ``` ### 参数参考 | 参数 | 类型 | 描述 | | ---------------------- | ------ | ---------------------------------------------- | | `-InputDirectory` | String | 包含 BloodHound JSON 文件的目录 | | `-InputFile` | String | 要匿名化的单个 JSON 文件 | | `-OutputDirectory` | String | 匿名化文件的保存位置 | | `-DomainMappingFile` | String | 现有域映射文件的路径 | | `-RandomizeTimestamps` | Switch | 使用每对象变化随机化时间戳 | | `-PreserveOSVersions` | Switch | 保留原始操作系统版本字符串 | | `-PreserveHostnames` | Switch | 保留原始主机名 | | `-WhatIf` | Switch | 预览模式,不进行更改(试运行模式) | | `-Verbose` | Switch | 详细日志输出 | ## 理解输出 匿名化完成后,你将获得: ### 1. 匿名化的 JSON 文件 位于:`OutputDirectory\AnonymizedData_TIMESTAMP\` - `ANONYMIZED_20240101_users.json` - `ANONYMIZED_20240101_groups.json` - `ANONYMIZED_20240101_computers.json` - 等等。 ### 2. 映射文件 `domain_mapping.json` - 将原始域映射到匿名化版本 **⚠️ 请妥善保管此文件!** 不要分享此文件 - 它可以反匿名化你的数据。 ### 3. HTML 报告 `anonymization_report.html` - 带有统计信息的交互式报告 - 执行摘要 - 详细统计 - 一致性检查 - 映射表 - 性能指标 ### 4. ZIP 归档 `AnonymizedData_TIMESTAMP.zip` - 所有文件打包便于分享 **✅ 可以分享了!** 仅包含匿名化数据(不含映射文件)。 ### 控制台输出 ``` ╔═══════════════════════════════════════════════════════════════════╗ ║ 🎉 ANONYMIZATION COMPLETE ✓ ║ ╠═══════════════════════════════════════════════════════════════════╣ ║ ⏱️ Processing Time: 00:12 ║ ║ 📊 Success Rate: 100.0% ║ ║ ✅ Objects Anonymized: 1,247 ║ ║ 🛡️ Objects Preserved: 89 ║ ╠═══════════════════════════════════════════════════════════════════╣ ║ 👥 Users: 453 (15 preserved) ║ ║ 👨‍👩‍👧‍👦 Groups: 128 (42 preserved) ║ ║ 💻 Computers: 312 (12 preserved) ║ ║ 🌐 Domains: 4 (0 preserved) ║ ╚═══════════════════════════════════════════════════════════════════╝ ⚡ Performance Optimizations Applied: • Hashtable pre-allocation (estimated: 1247 objects) • Throughput (input bytes): 2.34 MB/s • Throughput (records): 1247 objects (~103.9 objects/sec) 📊 Interactive HTML Report: C:\Output\AnonymizedData_...\anonymization_report.html 📦 Output Location: C:\Output\AnonymizedData_20241014_123456 Files: 13 BloodHound JSON files ZIP: C:\Output\AnonymizedData_20241014_123456.zip (Size: 2.34 MB) ``` ## 示例:前后对比 ### 前(敏感!) ``` { "Properties": { "name": "JOHN.SMITH@ACMECORP.COM", "samaccountname": "john.smith", "email": "john.smith@acmecorp.com", "distinguishedname": "CN=John Smith,OU=Sales,OU=Employees,DC=acmecorp,DC=com" } } ``` ### 后(可安全分享!) ``` { "Properties": { "name": "USR_A3F2E1@DOMAIN1.LOCAL", "samaccountname": "USR_A3F2E1", "email": "email_b7d9c2@domain1.local", "distinguishedname": "CN=CN_F4E8A6,OU=OU_7F3A21,OU=OU_C9B2D1,DC=DOMAIN1,DC=LOCAL" } } ``` ## 重要说明 ⚠️ **请妥善保管映射文件!** `domain_mapping.json` 文件显示了真实名称与匿名化名称之间的转换关系。不要分享此文件! ✅ **分享前请检查**:虽然 AnonymousHound 移除了大部分识别信息,但请始终检查输出以确保没有敏感信息遗漏。 ⚠️ **结构信息保留**:虽然名称被隐藏,但你的 Active Directory 的结构(域的数量、OU、用户等)仍然可见。在极少数情况下,这可能是可识别的。 ✅ **可安全导入**:匿名化文件可以直接导入到 BloodHound 中进行分析。 ## 许可与使用 此工具专为进行授权评估的安全专业人员设计。请始终: - ✅ 拥有收集数据的权限 - ✅ 分享前检查匿名化输出 - ✅ 遵守你所在组织的数据处理政策 - ✅ 尊重隐私和保密协议 **请负责任且合乎道德地使用。** ## 贡献 发现错误?有建议?欢迎贡献!这是一个 BETA 版本。 **问题与反馈:** [GitHub Issues](https://github.com/kaydaskalakis/AnonymousHound/issues) ## 致谢 特别感谢: - **我的家人** - 在开发期间容忍我 - **SpecterOps** - 成为一家超棒的公司,我为之工作 - **Eleysia Friend** - 启发了这个项目,并在我格列佛游历期间表现出超常的耐心 - **BloodHound 社区** - 创造了出色的 Active Directory 分析工具 ## 更新日志 ### v0.3 BETA (逐行更新) **覆盖范围** - 添加了原生 AzureHound CE 单文件处理 (`azurehound*.json`),带有基于类型的匿名化处理器。 - 添加了 AD CS `issuancepolicies.json` 文件类型检测和处理管道。 - 扩展了 GitHound 支持和文档,涵盖图节点/角色/工作流/环境。 - 更新了自动发现模式,以包含 AzureHound 和新的 AD CS 输入。 **匿名化强化** - 为未枚举字符串字段中嵌入的电子邮件/UPN 令牌添加了递归 Azure 清理器。 - 添加了递归 Azure 资源路径重写,以防止嵌套路径泄露。 - 强化了多标签租户域的 Azure `*.onmicrosoft.com` 别名处理。 - 将 Azure 资源 `name` 别名与相应的 `id` 路径段对齐。 **AD/PKI 一致性修复** - 在 CN/DN 路径中遇到时保留了知名的 Exchange/DHCP 系列名称。 - 改进了嵌套关系中 SID/GUID/DN 形状标识符的对象标识符转换。 - 添加了更深入的 ACE 遍历,用于注册代理限制主体/目标标识符。 - 修复了 `$` 前缀特殊组和本地组主机名后缀重写的处理。 **性能** - 在文件处理器中用 `List[object].Add()` + `ToArray()` 替换了重复的数组连接。 - 将深拷贝路径切换为 `FastClone` 对象遍历,JSON 作为后备方案。 - 将 JSON 输出序列化切换为 `FastJsonWriter`(`System.Text.Json`),JSON 作为后备方案。 - 增加了输入 MB/s 和记录/秒的吞吐量报告。 **验证和报告** - 通过信任显式的保留原因类别,减少了 CN 一致性的假阳性。 - 将经过验证的基础设施 CN 添加到保留列表(`KRA`、`OID`、`AZUREAD` 等)。 - 保留了关键的一致性失败路径,以检测真正的匿名化退化。 **文档和版本控制** - 将所有产品/版本标签更新至 `v0.3 BETA`。 - 更新了支持的文件矩阵为 BloodHound/GitHound/AzureHound。 - 澄清了 `-EnableParallel` 在线程安全的共享映射架构实现之前保留。 - 添加了此完整的逐行 v0.3 更新日志块。 ### 以前版本 - `v0.2 BETA`:交互式 UX 大改、试运行模式、更丰富的 HTML 报告、基线性能检测。 - `v0.1 ALPHA`:初始 AD/PKI 匿名化引擎,具有映射一致性和攻击路径保留功能。 *"最好的防御是知识共享,但隐私也同样重要。"* 🎭🐕 **准备匿名化?只需运行 `.\AnonymousHound.ps1` 并按照提示操作!** 🎉
标签:Active Directory, AI合规, BloodHound, Homebrew安装, IPv6, Libemu, PII 脱敏, Plaso, PowerShell, 人工智能安全, 反取证, 合规性, 多人体追踪, 安全评估, 工具开发, 攻击路径分析, 数据匿名化, 网络安全, 网络安全, 隐私保护, 隐私保护