kaydaskalakis/AnonymousHound
GitHub: kaydaskalakis/AnonymousHound
AnonymousHound 是一个 PowerShell 工具,用于匿名化 BloodHound 导出数据中的敏感信息,同时保留安全攻击路径供分析使用。
Stars: 28 | Forks: 1
# AnonymousHound
抹除踪迹,保留线索。AnonymousHound 对 BloodHound 导出数据(用户、组、PKI 等)中的敏感数据进行匿名化处理,确保个人可识别信息(PII)被清除,但安全漏洞和攻击路径的完整图谱得以 100% 完整保留,供分析使用。
他超级匿名。
## 他是……
## 目录
- [什么是 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` 并按照提示操作!** 🎉
他超级匿名。
## 他是……
## 目录
- [什么是 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, 人工智能安全, 反取证, 合规性, 多人体追踪, 安全评估, 工具开发, 攻击路径分析, 数据匿名化, 网络安全, 网络安全, 隐私保护, 隐私保护