icedracon/adhammer

GitHub: icedracon/adhammer

ADhammer 是一款 Rust 实现的 Active Directory 安全审计与攻击评估工具,内置从零编写的 DCE/RPC、NTLM、SMB2、Kerberos 协议栈,可从 Linux 上完成 PingCastle 级别的域安全评估与多向量攻击验证。

Stars: 0 | Forks: 0

# ADhammer 使用 **Rust** 进行 Active Directory 安全评估与攻击技术 —— 一款 PingCastle 级别的 审计工具,内置从零开始编写的协议栈(即目前在 Rust 中尚不存在的 "impacket")。它被打包为单一的静态二进制文件,旨在从 Kali/Linux 上针对 Windows 运行。 ADhammer 通过 LDAP 收集域内信息,在进程内构建 BloodHound 风格的控制路径图,跨越 PingCastle 的四个类别运行了 33 项检查,并对结果进行评分。除了被动审计,它还实现了一套可用的攻击栈 —— Kerberos roasting、密码喷洒、LDAP 对象滥用、强制身份验证、**RBCD** 以及 **Shadow Credentials (key-trust PKINIT)** —— 这些都建立在原生手写的 DCE/RPC · NTLM · SMB2 · Kerberos 协议栈之上。 ``` # Interactive(提示输入 domain/user,保存 session,attack 菜单): adhammer # first run — enter creds, saved to ~/.config/adhammer/session.json adhammer --old # reuse saved session # Power-user 子命令(unchanged): # scan passive audit(检查 + control-path graph + SYSVOL) # enum {samr,lsa,net} 只读 RPC / 网络枚举 # attack {roast,spray,abuse,coerce,rbcd,dcsync,capture,poison,relay} adhammer scan --url ldaps://dc.corp.local:636 --user CORP\\svc --password ... --insecure [--sysvol \\corp.local\SYSVOL] adhammer attack roast --url ldaps://... --user ... --password ... --insecure --kdc dc.corp.local adhammer attack spray --kdc dc.corp.local --realm CORP.LOCAL --users @users.txt --password 'Winter2025!' adhammer attack rbcd --account ... --account-password ... --realm CORP.LOCAL --kdc ... --impersonate Administrator --target-spn cifs/victim # Shadow Credentials(两个阶段,相同子命令): adhammer attack abuse --url ldaps://... --user ... --password ... --insecure --action add-keycred --target victim adhammer attack abuse --action pkinit --target victim --realm CORP.LOCAL --kdc dc.corp.local # → victim.ccache ``` `attack abuse` 还支持 `add-spn`(针对性 Kerberoast)、`add-member`、`set-password` 和 `write-rbcd`。`attack coerce` 实现了 PetitPotam / MS-EFSR。 ## 架构 在一个 workspace 中包含 11 个 crate,采用了分层设计,使得两大审计核心优势 —— 自主实现的安全描述符解析器和进程内控制路径图 —— 构建于共享的核心类型之上,而攻击技术则构建在自主实现的 RPC/Kerberos 协议栈之上。 | Crate | 作用 | |-------|------| | `core` | 共享模型:`Sid`/`Guid`, `AdObject`, `Snapshot`, `Finding`, MITRE 表 | | `sddl` | ⭐ 自主实现的 `SECURITY_DESCRIPTOR`/DACL/ACE 解析器 (MS-DTYP) + RBCD SD 构建器 + 扩展权限 GUID | | `graph` | ⭐ 基于 `petgraph` 的控制路径图;通往 Tier-0 的反向 Dijkstra 算法 | | `collector` | 基于 `ldap3`, rustls 的 LDAP 收集(覆盖域和 Configuration NC);SD_FLAGS 控制;LDAP 写入 | | `checks` | 跨越所有四个类别的 33 条规则引擎 | | `kerberos` | AS-REP roast · Kerberoast (RC4+AES) · spray/enum · S4U/RBCD · **Shadow Credentials PKINIT** · ccache — 基于 `picky-krb` | | `sysvol` | GPP cpassword 恢复 (MS14-025) + GptTmpl.inf 签名/NTLM/LM 策略 | | `report` | 可配置的风险评分 → JSON / HTML | | `dcerpc` | NDR marshaling · RPC PDU · **NTLMSSP sign+seal** · TCP/SMB 传输 · EPM · SAMR · LSAT · EFSR | | `ntlm` | NTLMSSP (NTLMv2, MIC) + 用于 RPC 数据包隐私的 RC4 sign+seal (`SealState`) | | `smb` | 最小化 SMB2 客户端 (negotiate → NTLMv2 SPNEGO 会话 → IPC$ → named-pipe RPC) | ## 审计覆盖范围 **特权账户** — AS-REP/Kerberoast 暴露面、非约束性委派、DCSync 控制路径 (图)、敏感组成员身份、gMSA 读取 ACL、SID history、RBCD、LAPS 覆盖率、PASSWD_NOTREQD。 **信任** — SID filtering、selective auth、跨林的 TGT 委派、RC4、transitivity。 **陈旧对象** — 不活跃的用户/计算机、陈旧的密码、EOL OS、重复的 SPN、陈旧的机器密码。 **异常** — MachineAccountQuota、krbtgt 年龄、RC4 Kerberos、可逆加密、badSuccessor (dMSA)、**AD CS ESC1/2/3/4/9/13**、密码策略、匿名 LDAP (dSHeuristics)、Pre-Windows 2000 Compatible Access、Guest、GPP cpassword,以及 —— 来自 SYSVOL GptTmpl.inf 的 —— LM/NTLMv1、LDAP/SMB 签名、NoLMHash、Netlogon sealing。 每项发现都关联了 MITRE ATT&CK 技术(T1558.003 Kerberoasting、T1558.004 AS-REP、T1003.006 DCSync、T1649 证书滥用、T1484 策略/信任修改 等)。 ## 内嵌协议栈 由于 Rust 领域不存在 impacket,因此基于 RPC 和 Kerberos 的功能都是从底层网络字节流开始实现,并针对协议规范进行了单元测试: ``` NDR ─ PDU (bind/request/response, sign+seal) ─┬─ TCP transport ── EPM (ept_map) └─ SMB2 (+NTLMv2 SPNEGO) ── SAMR · LSAT · EFSR Kerberos (picky-krb) ── AS-REQ/REP · TGS-REQ/REP · S4U2Self/Proxy (PA-FOR-USER) · PKINIT (DH + CMS) ``` ## 攻击能力(实战验证) 已在受控实验室环境中,针对经过严格安全加固的 **Windows Server 2025** DC 完成了端到端验证: - **侦察** — `scan`(33 项检查 + 控制路径图,通过 LDAP SD_FLAGS 控制可作为低权限用户运行)、`enum samr`(基于 SAMR-over-SMB 的完整用户枚举)、`enum lsa`(LSAT 名称↔SID)。 - **Roasting** — AS-REP(无需凭证)和 Kerberoast,同时输出 RC4(hashcat 13100/18200)和 AES(19700)哈希;通过 `abuse add-spn` 实现针对性 Kerberoast。 - **RBCD** — 完整的 `write-rbcd` → S4U2Self → S4U2Proxy 链,直至生成模拟票据,内置手写的 PA-FOR-USER 校验和与 PA-PAC-OPTIONS。 - **Shadow Credentials** — `add-keycred` 写入 `msDS-KeyCredentialLink` KeyCredential,随后 `pkinit` 执行 key-trust PKINIT 以目标身份获取 TGT,并写入可重用的 MIT ccache。支持处理 Server 2025 引入的 `paChecksum2` PKAuthenticator 要求(基于 KDC-REQ-BODY 的 SHA-256),该要求目前会导致 Rubeus/PKINITtools 崩溃或失效。 - **强制身份验证** — PetitPotam / MS-EFSR(对于已打补丁的 DC 会正确报告为无漏洞)。 - **DCSync** — `attack dcsync --target `:在加密信道上执行 DRSBind → DRSCrackNames → DRSGetNCChanges (EXOP_REPL_OBJ),随后进行 session-key + 按 RID 的 DES 解密以获取 NT hash → 转换为 secretsdump 格式(`user:rid:lm:nt:::`)。已针对 `krbtgt`/`Administrator` 进行验证。 有关完整的已闭环 / 部分实现 / 开放的攻击向量矩阵和路线图,请参阅 **[VECTORS.md](VECTORS.md)**。 ## 构建与测试 ``` cargo build --release # target/release/adhammer(.exe) cargo test --workspace # 51 unit tests ``` 要求 Rust 1.80+。`ldap3` 使用 rustls,因此整个代码树可构建为静态的 Linux/musl 二进制文件(目标场景是从 Kali 跨向 Windows;而 PingCastle 仅限 Windows)。 ## 状态与注意事项 - 所有解析、加密和 marshaling 均有单元测试覆盖(规范向量 + 往返测试): NTOWFv2 (MS-NLMP §4.2.4.2), RC4 (RFC 6229), GPP AES key (MS14-025), NDR alignment/strings, RPC PDU 结构, EPM tower/port, SMB2 headers/signing, SAMR/LSAT marshaling, PKINIT DH group 和 reply-key 推导。 - 上文提及的审计和攻击流程已针对 Server 2025 实验室 DC 完成了**实战验证**。 - 默认 LDAP 绑定要求使用 LDAPS(实验室的自签名证书可使用 `--insecure`)或 SASL GSSAPI(`--gssapi`,默认关闭的 cargo feature);安全加固过的 DC 会拒绝明文简单绑定。 AD CS ESC5/6/7/8/10/11 超出了当前的范围 —— 详情请参阅 [VECTORS.md](VECTORS.md)。 仅供授权研究 / 学术 / 合法授权的授权委托使用。
标签:Active Directory, HTTP, M2M, Plaso, Rust, 协议栈, 可视化界面, 模拟器, 网络安全, 网络流量审计, 通知系统, 隐私保护