tielestudio/Active-Directory-Audit-Tool
GitHub: tielestudio/Active-Directory-Audit-Tool
面向 Active Directory 环境的单文件安全审计工具,将 LDAP 枚举、DNS 验证和 BloodHound JSON 关联分析整合为一份统一的 JSON 报告。
Stars: 1 | Forks: 1
**用于 AD 安全审计的快速 LDAP · DNS · BloodHound JSON 关联分析**
[](https://python.org)
[](.)
[](.)
[](.)
[](.)
## `>_ 概述`
`ad-audit.py` 是一个**单文件 Python 工具**,用于对 Active Directory 环境执行安全审计并生成统一的 JSON 报告。它通过 LDAP 和 DNS 收集数据,可选地使用 BloodHound JSON 来丰富发现结果,并将所有内容关联为结构化的输出。
```
LDAP collection
└──▶ DNS validation
└──▶ BloodHound JSON (existing or live)
└──▶ ad_audit_report.json
```
## `>_ 功能`
| 能力 | 描述 |
|---|---|
| **LDAP 收集** | 域信息、RootDSE、用户、组、计算机、UAC 标志、委派、SPN |
| **DNS 验证** | 根据配置的 DNS 解析计算机对象 |
| **BloodHound JSON (已有)** | 从磁盘读取先前收集的 BH JSON 文件 |
| **BloodHound JSON (实时)** | 将 `bloodhound-python` 作为子进程运行 |
| **发现关联** | 将 LDAP/DNS 发现结果与 BloodHound 上下文结合 |
| **ACL 分析** | DCSync 权限、危险 ACEs、GPO 写入权限、shadow credentials |
| **JSON 报告** | 统一的单一输出文件 |
## `>_ 安装`
**最低要求**
```
pip install ldap3 dnspython pycryptodome
```
**支持实时 BloodHound 收集**
```
pip install ldap3 dnspython pycryptodome bloodhound-python
```
**推荐方式(虚拟环境)**
```
python3 -m venv .venv
source .venv/bin/activate
pip install ldap3 dnspython pycryptodome bloodhound-python
```
### 依赖
| 包 | 用途 |
|---|---|
| `ldap3` | LDAP 查询和 NTLM 绑定 |
| `dnspython` | DNS 解析检查 |
| `pycryptodome` | 用于 LDAP 绑定的 NTLM/MD4 支持 |
| `bloodhound-python` | *(可选)* 实时 BloodHound 收集 |
## `>_ 快速开始`
```
git clone https://github.com/tielestudio/Active-Directory-Audit-Tool
cd Active-Directory-Audit-Tool
python3 -m venv .venv && source .venv/bin/activate
pip install ldap3 dnspython pycryptodome bloodhound-python
python3 tools/ad-audit.py \
--server dc01.corp.local \
--domain corp.local \
--user 'CORP\jane.doe' \
--password 'StrongPassword!' \
--dns-server 10.0.0.10 \
--output ./ad_audit_report.json
```
**预期输出:**
```
[+] Report written to: tools/ad_audit_report.json
[+] Users: 42 | Groups: 18 | Computers: 27
[+] Total findings: 6 (LDAP/DNS: 4, BH correlation: 2)
[+] BloodHound JSON files embedded into report and deleted from disk (2 files)
```
## `>_ 操作模式`
### 模式 1 — 仅 LDAP + DNS
运行 LDAP 收集和 DNS 解析检查。不包含 BloodHound。
```
python3 tools/ad-audit.py \
--server 10.0.0.10 \
--domain corp.local \
--user 'CORP\jane.doe' \
--password 'StrongPassword!' \
--dns-server 10.0.0.10 \
--output tools/ad_audit_report.json
```
### 模式 2 — LDAP + DNS + 已有 BloodHound JSON
从目录中读取先前收集的 BH JSON 文件,并将它们与 LDAP/DNS 发现结果进行关联。
```
python3 tools/ad-audit.py \
--server dc01.corp.local \
--domain corp.local \
--user 'CORP\jane.doe' \
--password 'StrongPassword!' \
--bloodhound-dir ./bh-output \
--keep-bh-files
```
脚本会查找匹配以下模式的文件:`*_users.json`、`*_computers.json`、`*_groups.json`、`*_domains.json`、`*_gpos.json`、`*_containers.json` —— 并自动选择最新的兼容数据集。
### 模式 3 — LDAP + DNS + 实时 BloodHound 收集
运行 `bloodhound-python`,读取生成的 JSON 文件,将它们嵌入到报告中,并用于关联分析。
```
python3 tools/ad-audit.py \
--server dc01.corp.local \
--domain corp.local \
--user 'CORP\jane.doe' \
--password 'StrongPassword!' \
--run-bloodhound \
--bh-dc dc01.corp.local \
--bh-ns 10.0.0.10 \
--bloodhound-dir ./bh-output \
--output ./ad_audit_report.json
```
## `>_ 发现参考`
### AD 发现 (LDAP/DNS)
| ID | 发现 |
|---|---|
| `AD-001` | 特权组成员暴露 |
| `AD-002` | 可进行 Kerberoast 攻击的用户 |
| `AD-003` | 可进行 AS-REP Roast 攻击的用户 |
| `AD-004` | 过期/闲置用户 |
| `AD-005` | 过期/闲置计算机 |
| `AD-006` | 无法通过 DNS 解析的计算机 |
| `AD-007` | Machine Account Quota |
| `AD-008` | 密码永不过期 |
| `AD-009` | AdminCount 用户 |
| `AD-010` | AdminCount 组 |
| `AD-011` | 非约束委派 —— 用户 |
| `AD-012` | 非约束委派 —— 计算机 |
| `AD-013` | 从未登录过的用户 |
| `AD-014` | 从未登录过的计算机 |
| `AD-015` | 旧版操作系统 |
| `AD-016` | krbtgt 密码使用期限 |
| `AD-017` | 弱密码 / 账户锁定策略 |
| `AD-018` | 设置了密码永不过期的特权用户 |
| `AD-019` | PASSWD_NOTREQD 用户 |
| `AD-020` | 拥有 SPN 的特权用户 |
| `AD-021` | LAPS 状态 |
### BloodHound 关联发现
| ID | 发现 |
|---|---|
| `BH-001` | 收集期间未解析的主机 |
| `BH-002` | 设置了密码永不过期的高价值对象 |
| `BH-003` | 拥有 SPN 的高价值用户 |
| `BH-004` | 高价值 / 关键系统上的非约束委派 |
| `BH-005` | 关键系统上缺失 LAPS |
### ACL 发现
| ID | 发现 |
|---|---|
| `ACL-001` | 危险 ACEs |
| `ACL-002` | DCSync 权限 |
| `ACL-003` | Shadow Credentials / AddKeyCredentialLink |
| `ACL-004` | GPO 写入权限 |
| `ACL-005` | DnsAdmins 成员身份 |
| `ACL-006` | Domain Controller 本地管理员偏差 |
## `>_ 命令行参考`
### 必填项
| 参数 | 描述 |
|---|---|
| `--server` | LDAP / DC 地址 |
| `--domain` | 域名 (例如 `corp.local`) |
| `--user` | NTLM 用户名 (例如 `CORP\jane.doe`) |
| `--password` | 用户密码 |
### LDAP / DNS 选项
| 参数 | 默认值 | 描述 |
|---|---|---|
| `--dns-server` | — | 覆盖 DNS 名称服务器 |
| `--days-user-stale` | `90` | 闲置用户阈值 (天) |
| `--days-computer-stale` | `90` | 闲置计算机阈值 (天) |
| `--min-never-used-age-days` | `30` | 从未使用账户的最小存在时间 |
| `--krbtgt-warn-days` | `180` | krbtgt 密码使用期限告警阈值 |
| `--output` | `ad_audit_report.json` | 输出路径 |
| `--debug` | `false` | 启用 debug 输出 |
### BloodHound 选项
| 参数 | 默认值 | 描述 |
|---|---|---|
| `--run-bloodhound` | `false` | 将 `bloodhound-python` 作为子进程运行 |
| `--bloodhound-binary` | `bloodhound-python` | BH 二进制文件名或路径 |
| `--bloodhound-dir` | `.` | 用于读/写 BH JSON 文件的目录 |
| `--bh-user` | — | 覆盖 BH 收集的用户名 |
| `--bh-password` | — | 覆盖 BH 收集的密码 |
| `--bh-dc` | — | 用于 BH 收集的 DC |
| `--bh-ns` | — | 用于 BH 收集的名称服务器 |
| `--bh-dns-tcp` | `false` | 对 BH DNS 查询使用 TCP |
| `--bh-disable-autogc` | `false` | 禁用 BH 自动-GC |
| `--bh-gc` | — | 覆盖 Global Catalog |
| `--keep-bh-files` | `false` | 加载后将 BH JSON 文件保留在磁盘上 |
## `>_ 架构`
### 数据流
```
┌─────────────────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ LDAP │──▶│ DNS │──▶│ BloodHound JSON │ │
│ └──────────┘ └──────────┘ └────────────────────┘ │
│ │ │ │ │
│ └───────────────┴──────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────┐ │
│ │ ad_audit_report.json │ │
│ └───────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
```
### 内部组件
```
ad-audit.py
├── LDAP Layer
│ ├── ldap_connect / ldap_search
│ ├── get_domain_info / get_root_dse
│ ├── get_users / get_groups / get_computers
│ └── get_laps_attributes
│
├── DNS Layer
│ ├── build_resolver
│ └── resolve_host
│
├── BloodHound Layer
│ ├── build_bloodhound_command
│ ├── run_bloodhound_collection
│ ├── parse_bloodhound_log
│ ├── discover_bloodhound_prefix
│ └── load_bloodhound_json_bundle
│
├── Correlation Layer
│ ├── correlate_bloodhound_unresolved_with_ldap
│ ├── correlate_high_value_password_never_expires
│ ├── correlate_high_value_spn_users
│ ├── correlate_unconstrained_delegation_high_value_computers
│ └── correlate_laps_missing_on_critical_computers
│
└── ACL Analysis Layer
├── analyze_acl_dangerous_permissions
├── analyze_acl_dcsync_rights
├── analyze_acl_shadow_credentials
├── analyze_acl_gpo_write_permissions
├── analyze_dnsadmins_membership
└── analyze_dc_local_admins
```
## `>_ 报告结构`
默认输出:`ad_audit_report.json`
```
{
"assessment_name": "...",
"generated_at": "2024-01-01T00:00:00Z",
"target": { "domain": "corp.local", "server": "dc01.corp.local" },
"summary": {
"users": 42,
"groups": 18,
"computers": 27,
"severity_summary": { "critical": 1, "high": 3, "medium": 2 }
},
"metadata": { "rootdse": {}, "bloodhound": {} },
"bloodhound_collection": {},
"findings": [
{ "id": "AD-002", "title": "Kerberoastable users", "severity": "high", "objects": [] }
]
}
```
| 字段 | 描述 |
|---|---|
| `assessment_name` | 评估名称 |
| `generated_at` | 报告生成时间戳 |
| `target` | 域和服务器信息 |
| `summary` | 计数、域 DN、MAQ、严重性摘要 |
| `metadata` | RootDSE 和 BloodHound 元数据 |
| `bloodhound_collection` | 已加载的 BH JSON 文件的原始内容 |
| `findings` | 所有 `AD-*`、`BH-*` 和 `ACL-*` 发现 |
## `>_ 仓库结构`
```
.
├── tools/
│ └── ad-audit.py
├── examples/
│ └── ad_audit_report.json
├── README.md
└── requirements.txt
```
**`requirements.txt`**
```
ldap3
dnspython
pycryptodome
bloodhound-python
```
## `>_ 注意事项`
- 该工具**不会**查询 Neo4j 或 BloodHound 图数据库
- BloodHound 数据直接从 JSON 收集文件中读取
- 无需使用 `--run-bloodhound` 即可使用 BloodHound 数据 —— 如果在 `--bloodhound-dir` 下找到已有的 JSON 文件,它们将被自动加载
- 默认情况下,加载后的 BloodHound JSON 文件在嵌入到报告中后将从磁盘删除
- 如果 LDAP 绑定失败,脚本会向标准输出写入 JSON 错误并以代码 `2` 退出
## `>_ 法律声明`
`ad-audit.py` · MIT 许可证 · LDAP · DNS · BloodHound JSON · ACL 分析
标签:ACL分析, Active Directory, AD审计, BloodHound, Checkov, DCSync, DNS, JSON关联, LDAP, Plaso, Python, SPN, UAC, 域渗透, 委派攻击, 攻击面评估, 数据融合, 无后门, 电子数据取证, 虚拟环境, 逆向工具