thechosenone-shall-prevail/cold-relay
GitHub: thechosenone-shall-prevail/cold-relay
一款采用确定性验证语言的 Active Directory 安全评估工具,通过多协议凭据收集与离线攻击图构建,帮助操作员清晰区分已证实与推测性的域内攻击路径。
Stars: 2 | Forks: 0
# Cold Relay
**身份路径,确证无疑。**
Cold Relay 是一款专供授权操作员使用的单二进制 Active Directory 安全评估工具。它通过 LDAP、Kerberos、SMB、DNS、GPO、委派、证书服务、会话和权限元数据收集 Windows 认证凭据,随后将这些凭据转化为确定性的分析发现和离线攻击图。
它不声称虚假的确定性。分析发现会被标记为 `validated`(已验证)、`likely`(可能)、`theoretical`(理论上的)、`blocked`(已阻止)或 `insufficient_visibility`(可见性不足),并且输出中会附带证据、阻碍因素和下一步操作。
Windows 身份验证失败时并不会大张旗鼓。它只会留下冰冷的痕迹:过时的权限、可读的共享、暴露的 SPN、委派的信任、脆弱的证书路径、被遗忘的会话,以及能够悄然解释如何在该域中横向移动的目录元数据。
Cold Relay 负责记录这些痕迹。
## 演示
一段针对 HackTheBox 机器执行被动和主动模式评估的 3 分钟演示视频 —— 涵盖了枚举、候选项输出以及攻击图查看器。
https://github.com/user-attachments/assets/3189b36f-ada5-4997-a052-feaa7e3e518d
## 功能简介
- 枚举 Active Directory 用户、组、SPN、账户标志、时间戳、描述和操作元数据。
- 发现暴露的与 AD 相关的服务,如 Kerberos、LDAP、SMB、WinRM、RDP、Global Catalog、ADWS 和 kpasswd。
- 支持 LDAP、LDAPS、STARTTLS、CA 验证、不安全 TLS 模式以及 TLS 回退。
- 识别 AS-REP 和 Kerberoast 候选项,并能在主动模式下执行真实的 Kerberos 哈希提取。
- 枚举 SMB 共享,检查管理共享访问权限,搜寻敏感文件,扫描 SYSVOL,并解密 GPP 的 `cpassword` 值。
- 分析信任关系、DNS 区域传送暴露、LAPS 和 gMSA 对象、GPO 容器、会话指示器、特权对象、RBCD、S4U、DCSync 类权限,以及 PKINIT/AD CS 模板。
- 构建包含验证状态、证据、阻碍因素和下一步操作的确定性候选项元数据。
- 构建一个离线的 `attack_graph`(攻击图),连接主体、组、SPN、服务、共享、文件、机密、会话、ACL 对象、信任、委派边缘、证书模板和复制权限发现。
- 构建一个 `control_plane`(控制平面)模型,将权限标准化为操作员安全的状态:`proven_true`(确证为真)、`proven_false`(确证为假)、`unknown`(未知)和 `error`(错误)。
- 解析 `nTSecurityDescriptor` DACL ACE,以发出带有证据支持的 ACL 控制权限,例如 `GenericWrite`、`WriteDacl`、`WriteOwner`、`GenericAll` 和与 DCSync 相关的权限。
- 当缺少可见性时,显式报告覆盖范围的缺失,而不是默默地推断出确定性。
- 输出 JSON、CSV 和可选的 Sigma 检测规则。
## 安装
```
git clone https://github.com/thechosenone-shall-prevail/cold-relay.git
cd cold-relay
go build -o cold-relay ./cmd/cold-relay
```
## 快速开始
被动模式执行协议发现、LDAP 连接、用户枚举、候选项选择、确定性验证标记和报告生成。
```
./cold-relay -t 10.129.29.229 \
-u wallace.everette@logging.htb \
-p 'Welcome2026@' \
--mode passive --report report.html
```
主动模式增加了真实的 Kerberos 交互和高级 AD/SMB 分析。
```
./cold-relay -t 10.129.245.130 \
-u wallace.everette@logging.htb \
-p 'Welcome2026@' \
--mode aggressive --report report.html
```
输出 JSON、CSV 和 Sigma 规则:
```
./cold-relay -t 10.129.29.229 \
-u wallace.everette@logging.htb \
-p 'Welcome2026@' \
--mode aggressive \
-o results.json \
--csv candidates.csv \
--siem
```
## 命令行选项
### 基本选项
| 标志 | 描述 |
|------|-------------|
| `-t ` | 目标 IP 或主机名。除非按位置参数提供,否则为必填项。 |
| `-u ` | 用于身份验证的用户名。支持 `DOMAIN\user` 和 `user@domain` 格式。 |
| `-p ` | 用于身份验证的密码。 |
| `-d ` | 域名。如果省略,Cold Relay 将尝试基于 RootDSE 的检测。 |
| `--mode ` | `passive` 运行枚举和推理。`aggressive` 运行全面分析。 |
| `--graph-viewer ` | 从现有的结果文件启动本地 3D 图形查看器(无需扫描)。 |
| `--graph-port ` | 本地图形查看器的端口。默认值:`7788`。 |
### 输出选项
| 标志 | 描述 |
|------|-------------|
| `-o ` | JSON 输出路径。默认值:`results.json`。 |
| `--csv ` | 可选的 CSV 候选项导出。 |
| `--bloodhound-json ` | 可选的 BloodHound 风格的 JSON 图形导出。 |
| `--bloodhound-csv ` | 可选的 BloodHound 风格的 CSV 导出基础路径。 |
| `--run-store-dir ` | 用于持久化运行元数据构件的可选目录。 |
| `--json` | 仅将 JSON 打印到标准输出。 |
| `--siem` | 生成 Sigma 检测规则。 |
### 连接和 Kerberos 选项
| 标志 | 描述 |
|------|-------------|
| `--ldaps` | 在端口 636 上使用 LDAPS。 |
| `--starttls` | 在 LDAP 端口 389 上使用 STARTTLS。 |
| `--insecure` | 跳过 TLS 证书验证。 |
| `--cafile ` | 用于 TLS 验证的 PEM CA 捆绑包。 |
| `--kdc ` | 显式指定 Kerberos KDC 主机名或 IP。 |
| `--fallback-tls` | 如果普通 LDAP 失败,依次尝试 STARTTLS,然后尝试 LDAPS。 |
### 高级选项
| 标志 | 描述 |
|------|-------------|
| `-w ` | 在主动模式下,提取并尝试使用提供的字典破解候选项哈希。 |
| `--audit` | 在支持的高级分析器中传递审计模式。 |
| `--enable-spray` | 显式启用凭据喷洒工作流。默认禁用。 |
| `--i-understand-spray-risk` | 与 `--enable-spray` 配合使用必需,作为显式安全确认。 |
| `--spray-max-users ` | 喷洒工作流期间的最大账户尝试数。默认值:`25`。 |
| `--spray-delay-ms ` | 喷洒尝试之间的延迟(以毫秒为单位)。默认值:`750`。 |
凭据喷洒被故意设计为选择性启用,并需要通过显式确认来解锁。
### 3D 图形查看器
从保存的结果中启动本地的交互式图形查看器(类似 Notion/Obsidian 风格的探索):
```
./cold-relay --graph-viewer results.json --graph-port 7788
```
然后在浏览器中打开 `http://127.0.0.1:7788`。
## 验证语言
Cold Relay 使用证据状态而不是百分比:
| 状态 | 含义 |
|--------|---------|
| `validated` | 已直接观察到该条件,或协议操作已成功执行。 |
| `likely` | 存在强有力的证据,但至少有一个现实前提尚未得到证实。 |
| `theoretical` | 目录或配置数据表明存在某种路径,但控制权或可达性尚未得到证实。 |
| `blocked` | 工具尝试执行检查但未能完成,或者所需的可见性被拒绝。 |
| `insufficient_visibility` | 收集到的数据不足以做出负责任的判断。 |
这是经过深思熟虑的。LDAP 可见性不等于可利用性。委派不等于可达的链条。SPN 存在不等于凭据已被破解。会话元数据不等于主机控制权。Cold Relay 在输出中始终保持这种区别的清晰可见。
## 输出模型
JSON 报告使用 schema 版本 `2.0`,旨在收集后进行离线阅读。
高层结构:
```
{
"schema_version": "2.0",
"domain": {
"name": "LOGGING.HTB",
"dn": "DC=logging,DC=htb",
"functional_level": "2016",
"os_version": "Windows Server 2019"
},
"summary": {
"total_users": 12,
"asrep_candidates": 0,
"kerberoast_candidates": 0,
"recon_candidates": 1,
"hvt_candidates": 2,
"loot_candidates": 0,
"validation_status": {
"validated": 3,
"likely": 1,
"theoretical": 2
}
},
"candidates": [
{
"SamAccountName": "Administrator",
"Type": "HVT",
"validation": "validated",
"evidence": [
"LDAP group membership marks this principal as privileged."
],
"blockers": [
"No current credential, session, or control edge proves access to this principal."
],
"next_actions": [
"Look for reachable credentials, sessions, ACL writes, or delegation edges into this principal."
]
}
],
"attack_graph": {
"nodes": [],
"edges": [],
"attack_paths": [],
"summary": {}
},
"control_plane": {
"nodes": [],
"edges": [],
"coverage": []
},
"advanced": {}
}
```
## 攻击图
Cold Relay 从收集到的证据构建出一个图形。该图形不是 AI 的猜测,也不是百分比模型。它是观察到的对象和关系的确定性表示。
图节点包括:
- `principal`
- `group`
- `target`
- `domain`
- `service`
- `spn`
- `share`
- `file`
- `secret`
- `directory_object`
- `trust`
- `gpo`
- `certificate_template`
- `delegation_account`
- `delegation_target`
- `replication_principal`
图边缘包括:
- `authenticated_to`
- `exposes_service`
- `member_of`
- `owns_spn`
- `exposes_share`
- `contains_sensitive_file`
- `exposes_secret`
- `likely_active_session`
- `marked_privileged`
- `has_trust`
- `tested_axfr`
- `contains_managed_credential`
- `has_gpo`
- `can_act_on_behalf`
- `delegates_to_spn`
- `can_enroll_certificate`
- `has_replication_rights`
攻击路径是基于这些边缘生成的,并附有验证状态、证据和阻碍因素。
## 模式
### 被动模式
被动模式是用于枚举和离线推理的默认模式。
它执行:
- 协议发现。
- LDAP 绑定和域检测。
- 分页用户枚举。
- AS-REP 和 Kerberoast 候选项识别。
- 候选项评分。
- 验证标记。
- 从收集到的证据构建攻击图。
- 根据需要输出 JSON/CSV/SIEM。
### 主动模式
主动模式运行完整的评估面。
它额外执行:
- 真实的 Kerberos AS-REP 和 TGS 提取尝试。
- SMB 共享枚举。
- ADMIN$ 和 C$ 访问检查。
- SYSVOL GPP 扫描和 `cpassword` 解密。
- 在有价值的共享上搜寻敏感文件。
- 信任、DNS、LAPS/gMSA、GPO、会话、ACL、RBCD、S4U、PKINIT 和 DCSync 分析。
- 当提供 `-w` 时的可选破解工作流。
## 安全 LDAP 和 KDC 解析
Cold Relay 支持:
- 389 端口上的普通 LDAP。
- 636 端口上的 LDAPS。
- 389 端口上的 STARTTLS。
- 使用 `--cafile` 进行 CA 捆绑包验证。
- 使用 `--insecure` 绕过自签名或实验室证书。
- 使用 `--fallback-tls` 进行连接回退。
KDC 解析顺序:
1. 显式的 `--kdc`。
2. RootDSE 的 `dnsHostName`。
3. LDAP 连接主机。
4. 针对 `_kerberos._tcp.dc._msdcs.` 的 DNS SRV 查找。
5. 针对 `_kerberos._tcp.` 的 DNS SRV 查找。
## 高级分析面
### 身份和权限
- 用户枚举。
- 组成员身份。
- 标记为管理员的客体。
- 特权组成员身份。
- 非活动账户指示器。
- 服务账户指示器。
- 针对机密类材料的 LDAP 属性挖掘。
### Kerberos
- AS-REP 候选项检测。
- Kerberoast 候选项检测。
- 主动模式下的多 etype AS-REP 提取。
- 主动模式下的已认证 Kerberoasting。
- KDC 解析和 TCP Kerberos 帧。
### SMB 和文件证据
- 共享枚举。
- 管理共享访问检查。
- SYSVOL GPP XML 扫描。
- GPP `cpassword` 解密。
- 在有价值的共享上发现敏感文件。
- 从可读文件中提取机密类内容。
### 委派和复制
- RBCD 目标枚举。
- S4U 委派分析。
- 在可读的情况下进行 DCSync 类扩展权限检测。
- 带有验证说明的利用路径报告。
- 解析 `nTSecurityDescriptor` 以直接从 DACL ACE 提取 ACL 权限。
### ACL 控制平面
- 将图关系标准化为以权限为中心的控制边缘。
- 将从安全描述符解析出的 ACL 边缘(`acl_control_edges`)添加到输出的控制平面中。
- 将不确定区域标记为显式的覆盖盲区,并附带下一步验证操作。
### 基础设施
- 协议发现。
- 域信任枚举。
- DNS 区域传送检查。
- LAPS 和 gMSA 枚举。
- 组策略容器分析。
- 基于LDAP 时间戳和登录次数的会话情报。
- PKINIT 和 AD CS 证书模板分析。
## CSV 输出
CSV 输出包括:
- `SamAccountName`
- `Type`
- `Severity`
- `Validation`
- `Reasons`
- `Evidence`
- `Blockers`
- `Next`
- `SPNs`
- `ExportHashPath`
## SIEM 输出
`--siem` 会针对常见的 Kerberos 攻击信号(例如 AS-REP Roasting 和 Kerberoasting)输出 Sigma 风格的检测规则。
```
./cold-relay -t dc01.corp.local -u alice@corp.local -p 'Password123!' --mode aggressive --siem
```
## 构建和测试
```
go test ./...
go vet ./...
go build -o cold-relay ./cmd/cold-relay
```
## Docker
```
docker build -t cold-relay .
docker run --rm -it cold-relay --help
```
## 安全与授权
Cold Relay 仅用于授权的安全评估工作。
协议发现、LDAP 枚举、Kerberos 请求、SMB 共享访问、SYSVOL 遍历和文件读取可能会产生日志并触发安全控制措施。请仅在您拥有测试权限的环境中运行它。
检测示例:
- Kerberos AS-REQ 和 TGS-REQ 流量可能会生成 Windows 安全事件,例如 4768 和 4769。
- SMB 共享访问可能会生成共享访问事件,例如 5140。
- LDAP 枚举可能会被目录监控和 SIEM 工具察觉。
- DNS AXFR 尝试可能会被 DNS 基础设施记录。
请先在实验环境中进行测试。在生产网络中运行之前,请了解每种模式的具体作用。
## 理念
Cold Relay 的构建围绕着“操作员信任”的核心理念。
它应该告诉你:
- 观察到了什么。
- 为什么它很重要。
- 什么已被证实。
- 什么仅仅是推测。
- 是什么阻碍了验证。
- 操作员下一步应该检查什么。
它不应将目录关系伪装成一次系统沦陷。它不应将启发式方法粉饰为精确的数学结论。Active Directory 攻击路径是有状态的、依赖于具体环境的,并且是具有先决条件的。Cold Relay 致力于让这些条件保持清晰可见。
## 致谢
基于以下项目构建:
- [go-ldap/ldap](https://github.com/go-ldap/ldap)
- [jcmturner/gokrb5](https://github.com/jcmturner/gokrb5)
- [hirochachacha/go-smb2](https://github.com/hirochachacha/go-smb2)
- [miekg/dns](https://github.com/miekg/dns)
本项目的灵感来源于成熟的 AD 评估工具的实践经验,以及“从证据到验证,而不是从猜想到噪音”的操作员工作流。
## 许可证
MIT 许可证。详见 [LICENSE](LICENSE)。
标签:Active Directory, AD CS, AD安全, AS-REP Roasting, Checkov, Conpot, DCSync, EVTX分析, GPO, GPP, HTTP, Kerberoasting, LDAP, log2timeline, OpenCanary, PKINIT, Plaso, RBCD, SMB, SYSVOL, Windows安全, 企业安全, 凭证提取, 协议分析, 单文件工具, 反取证, 域渗透, 委派攻击, 安全评估, 工控安全, 攻击图, 数据展示, 日志审计, 权限提升, 横向移动, 电子数据取证, 确定性分析, 离线分析, 红队, 组策略, 编程规范, 网络安全, 网络资产管理, 自动化评估, 请求拦截, 错误配置检测, 防御绕过, 隐私保护