Icex0/domain_audit.py
GitHub: Icex0/domain_audit.py
一款从渗透测试视角出发的 Active Directory 自动化安全审计工具,集成了大量域环境安全检查功能。
Stars: 1 | Forks: 0
# 域审计

Active Directory 安全审计工具。是 [`domain_audit.ps1`](https://github.com/0xJs/domain_audit) 的 Python 移植版本,并增加了额外的检查和改进。
## 环境要求
- Python 3.10+
- 可访问目标 Domain Controller 的网络权限
- 有效的 AD 凭据
- **netexec** - 安装命令:`pipx install --force git+https://github.com/Pennyw0rth/NetExec`
- **certipy** - 安装命令:`pipx install --force certipy-ad`
## 安装说明
### 使用 UV(推荐)
```
# 如果你尚未安装 UV,请安装它 (Linux & macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
# For Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# 在系统范围内安装 domain-audit
# 从项目根目录运行此命令
uv tool install --force .
# 现在你可以在任何地方运行 domain-audit!
domain-audit --help
```
### 替代方案:使用 pip
```
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# 安装
pip install .
```
### Docker
```
# 构建 Docker image
docker build -t domain-audit .
# 运行 audit (结果保存到 ./results)
docker run --rm -it -v $(pwd)/results:/data domain-audit -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!'
```
## 用法
```
# 运行完整 audit
domain-audit -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!'
# 使用 LDAPS
domain-audit -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!' --ldaps
# 跳过 BloodHound collection
domain-audit -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!' --skip-bloodhound
# 跳过 Kerberoasting/AS-REP roasting
domain-audit -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!' --skip-roasting
# 列出可用检查
domain-audit -L
# 运行特定检查
domain-audit --check adcs -d contoso.com -dc 10.0.0.1 -u domainuser -p 'Password123!'
```
## 功能说明
### 枚举
- 用户、组、计算机、OU、GPO
- Domain Controller 和域 SID
- 特权用户(Domain Admins、Enterprise Admins 等)
- 域信任
### 安全检查
**域和密码策略**
- 域功能级别评估
- 默认密码策略(长度、复杂性、锁定)
- 细粒度密码策略(FGPP)枚举
- Kerberos 策略设置(票据生命周期、加密类型)
**LAPS**
- Schema 检测(旧版 LAPS vs Windows LAPS)
- 计算机对象中的部署覆盖率
- 未启用 LAPS 的计算机
- LAPS 密码可读性检查(当前用户权限)
- LAPS 策略配置(AdminAccountName、PasswordComplexity、PasswordLength、PasswordAgeDays、PwdExpirationProtectionEnabled、AdmPwdEnabled)
**Kerberos 攻击**
- Kerberoastable 账户(用户账户上的 SPN)
- AS-REP roastable 账户(DONT_REQ_PREAUTH)
- 通过 Impacket 提取哈希以进行离线破解
**委派**
- 用户和计算机上的非约束性委派
- 约束性委派(S4U2Self/S4U2Proxy)
- 基于资源的约束性委派(RBCD)
**用户属性**
- PASSWD_NOTREQD 标志(可以具有空密码的账户)
- DONT_EXPIRE_PASSWORD 标志
- 启用了可逆加密
- 仅 DES 的 Kerberos 加密
- 用户/组/计算机描述中的敏感数据
- userPassword 属性暴露(明文或哈希密码)
**特权账户**
- Protected Users 组成员身份
- 管理员账户上的 NOT_DELEGATED 标志
- 特权用户的密码时长(>180 天)
- KRBTGT 密码时长
- 高特权组的成员身份(Account Operators、Backup Operators、Print Operators、DNS Admins、Schema Admins)
**过期对象**
- 不活跃的计算机和用户(6 个月以上无登录)
- 停止支持的操作系统(Server 2008/2012,Windows 7/10 EOL 版本)
- Pre-Windows 2000 Compatible Access 组成员身份
- ANONYMOUS LOGON (S-1-5-7) 组成员身份检测(当与 Authenticated Users 结合时会发出警告)
- Pre-Windows 2000 计算机密码喷射列表生成
- 域加入权限(ms-DS-MachineAccountQuota)
**信任**
- 域信任枚举
- 信任方向和类型分析
- SID 过滤状态(SID 历史记录注入风险)
**ADIDNS**
- 经过身份验证的用户的区域权限
- 通配符记录检测
**证书 (ADCS)**
- PKI 注册服务器枚举
- 证书颁发机构检测
- **通过 certipy 检测易受攻击的证书模板**(ESC1、ESC2、ESC3、ESC4、ESC5、ESC6、ESC7、ESC8、ESC9、ESC10、ESC11、ESC13、ESC14、ESC15)
**Exchange**
- 默认 Exchange 组检测
- Exchange Windows Permissions WriteDACL 提权路径(PrivExchange)
- Organization Management 提权风险
**Azure**
- Azure AD Connect 检测
- AZUREADSSOACC 安全性(Seamless SSO):
- 账户上禁用了非约束性委派
- 禁用了约束性委派(账户无法委派给其他服务)
- 账户上禁用了基于资源的约束性委派(RBCD)
- 没有其他账户可以委派给 AZUREADSSOACC
- Kerberos 解密密钥时长(建议 30 天更新一次)
**SCCM**
- SCCM System Management 容器检测
**WSUS**
- 通过 GPO (SYSVOL) 进行 WSUS 服务器配置
- HTTP 与 HTTPS 检测(HTTP 容易受到通过 WSUSpect/wsuks 进行的 MITM 攻击)
**DC 漏洞**
- Zerologon (CVE-2020-1472) - 域接管漏洞
- NoPac (CVE-2021-42278/CVE-2021-42287) - 提权至 Domain Admin
**NTLM 安全**
- NTLMv1 支持检测(LmCompatibilityLevel 0/1/2 容易受到降级/中继攻击)
- NTLM 限制策略(RestrictNTLMInDomain、RestrictSendingNTLMTraffic、RestrictReceivingNTLMTraffic)
- 启用 LLMNR 检测(容易受到 Responder 凭据捕获攻击)
**网络服务**
- IP 解析和 /24 范围计算
- 端口扫描(SMB、WinRM、RDP、MSSQL、HTTP)
- SMB 签名强制要求
- SMBv1 检测
- SMB 空会话身份验证检查
- SMB 访客访问检查
- 非 DC 上的域管理员会话
- SMB/RDP/WinRM/MSSQL 访问检查(通过 netexec 获得本地管理员权限)
- RDP NLA 禁用检测
- WebClient 服务检测
- NTLM 反射漏洞检测
- Domain Controller 上的 PrintSpooler
**LDAP 安全**
- LDAP 匿名绑定检测(未经身份验证访问域数据)
- LDAP 签名要求
- LDAPS 通道绑定配置
**文件共享**
- SYSVOL 密码搜索(GPP、脚本)
- NETLOGON 脚本凭据分析
**SQL Server**
- MSSQL 服务器发现
- MSSQL sysadmin 角色检测
- 加密配置
- 链接服务器枚举
- 模拟检查
### 外部工具集成
- **Impacket** - Kerberoasting、AS-REP roasting、身份验证
- **NetExec** - SMB 枚举、LDAP 检查、SQL 枚举
- **Certipy** - ADCS 证书模板漏洞检测
## 启动检查
该工具在启动时会自动验证:
1. **DNS 配置** - 检查 DNS 是否设置为 DC IP,如果以 root/管理员身份运行则尝试自动配置
2. **netexec 可用性** - 验证是否已安装 `nxc`/`netexec`
3. **certipy 可用性** - 验证是否已安装 `certipy`
如果任何检查失败,该工具将提供安装说明并退出。
## 输出
结果将写入 `{domain}-{date}/` 目录中,包含三个文件夹:
```
contoso.com-20260201/
├── findings/ # Issues to report (red)
├── checks/ # Requires manual review (yellow)
└── data/ # Raw enumeration data
```
## 待办事项
- [ ] 支持 Kerberos 身份验证
- [ ] 更好的 netexec 错误处理
- [ ] 支持 PowerUpSQL 中的更多 MSSQL 检查
标签:Active Directory, Checkov, Plaso, Python, Web报告查看器, 无后门, 请求拦截, 逆向工具