YakinAnd/morok
GitHub: YakinAnd/morok
轻量级单二进制 Active Directory 攻击路径枚举工具,无需 BloodHound 或 Neo4j 即可全面检测域环境安全风险并生成可视化报告。
Stars: 0 | Forks: 0
# morok
**Active Directory 攻击路径枚举器**
morok 是一款轻量级的单二进制文件 CLI 工具,用于枚举 Active Directory 环境、识别通往特权组的攻击路径,并检测安全配置错误——无需 BloodHound、Neo4j 或任何额外的基础设施。
## 
## morok 的功能
morok 通过 LDAP 连接到域控制器,并跨多个域运行全面的安全分析:
| 类别 | 检查内容 |
|---|---|
| **攻击路径** | 通过 BFS 图遍历检查 Domain Admins、Enterprise Admins、Backup Operators、DNSAdmins 及其他 4 个特权组 |
| **Kerberos** | Kerberoastable 账户、AS-REP roastable 账户 (无需预认证) |
| **ACL** | GenericAll、WriteDACL、WriteOwner、ForceChangePassword、AddMember、DCSync (复制权限) |
| **委派** | 非约束性、约束性、RBCD 配置错误 |
| **ADCS** | 证书模板漏洞 ESC1–ESC9、ESC11、ESC13 |
| **SMB 签名** | DC (端口 445) 上的 SMB 签名状态——NTLM 中继风险,无需凭据 |
| **Shadow Credentials** | 对特权对象的 `msDS-KeyCredentialLink` 写入权限 |
| **信任** | SID 筛选、信任方向/类型、特权组中的外部安全主体 |
| **GPO** | 密码策略、GPO 写入 ACL、GPP/MS14-025 cpassword |
| **暴露面** | 闲置账户、krbtgt 年龄、LAPS 覆盖率、描述中的密码 |
| **受保护用户** | 不在受保护用户组中的特权账户 |
| **AdminSDHolder** | 孤立的 adminCount=1 对象、后门 ACE |
| **LDAP 安全** | 签名/通道绑定强制执行、SASL 机制、匿名读取 |
| **审核策略** | 旧版审核类别、AD 回收站、机器账户配额 |
每项发现都包含**后续步骤**(漏洞利用命令)和**修复指导**。
## 主要特性
- **单一二进制文件** — 无需 Neo4j、Python 或 BloodHound
- **多域** — 自动跟随林信任;CLI 输出中按域划分的部分以及 HTML 报告中按域划分的选项卡
- **任意权限级别** — 适用于任何有效的域账户;低权限足以进行大多数检查
- **多种认证方法** — 密码、Pass-the-Hash (NTLM)、Pass-the-Ticket (Kerberos ccache)
- **SOCKS5 代理** — 通过代理路由所有 LDAP 流量 (`--proxy socks5://127.0.0.1:1080`)
- **范围审计** — 将枚举限制在特定的 OU (`--scope "OU=Finance,DC=corp,DC=local"`)
- **JSON 导出** — 将 AD 对象导出为 JSON (`--json ./json_out/`);格式兼容 BloodHound CE v5
- **独立 HTML 报告** — 单文件、深色/浅色主题、全局搜索、D3.js 攻击路径图
- **CI 模式** — `--quiet` 打印不带 ANSI 码的单行结论,适用于 Jenkins/GitHub Actions/GitLab
## 安装
```
# 从源代码构建(需要 Go 1.21+)
git clone https://github.com/YakinAnd/morok
cd morok
go build -o morok ./cmd/morok/
./morok version
```
预构建的二进制文件可在 [发布](https://github.com/YakinAnd/morok/releases) 页面获取。
## 快速开始
```
# 完整枚举 + HTML 报告
morok enum -d corp.local -u administrator -p 'Password1' --dc 10.0.0.1 --report report.html
# CI/自动化 — 单行判定结果(无交互式输出)
morok enum --quiet -d corp.local -u svc_audit -p '...' --dc 10.0.0.1
# 输出: RISK CRITICAL (F · 83/100) — 38 critical, 40 high, 1 medium
# 详细模式 — 显示所有发现,不截断
morok enum --verbose -d corp.local -u administrator -p '...' --dc 10.0.0.1
# Pass-the-Hash
morok enum -d corp.local -u administrator -H aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c --dc 10.0.0.1
# Pass-the-Ticket (Kerberos ccache)
morok enum -d corp.local --ccache /tmp/administrator.ccache --dc 10.0.0.1
# SOCKS5 代理(通过失陷主机进行 pivoting)
morok enum -d corp.local -u jdoe -p 'Password1' --dc 10.0.0.1 --proxy socks5://127.0.0.1:1080
# 将范围限制为特定 OU
morok enum -d corp.local -u administrator -p '...' --scope 'OU=Finance,DC=corp,DC=local'
# JSON 导出(兼容 BloodHound CE v5)
morok enum -d corp.local -u jdoe -p 'Password1' --dc 10.0.0.1 --json ./json_out/
# 隐蔽模式 — 最小 LDAP 足迹(SIEM 密集型环境)
morok enum --stealth -d corp.local -u administrator -p '...' --dc 10.0.0.1
# 无凭据 Username enumeration (Kerberos AS-REQ)
morok kerb-enum -d corp.local --dc 10.0.0.1 --wordlist users.txt
# SMB signing 检查(无需凭据)
morok smb -d corp.local --dc 10.0.0.1
```
## 命令
| 命令 | 描述 |
|---|---|
| `enum` | 完整枚举 — 运行所有模块,生成 HTML 报告 |
| `kerberos` | Kerberoastable + AS-REP roastable 账户 |
| `acl` | 危险的 ACL 权限 (GenericAll, WriteDACL, DCSync…) |
| `delegation` | 非约束性、约束性、RBCD 委派 |
| `gpo` | GPO 安全分析 + 密码策略 |
| `adcs` | ADCS 证书模板漏洞 (ESC1–ESC9, ESC11, ESC13) |
| `trust` | 域/林信任分析、外部安全主体 |
| `shadow` | Shadow Credentials — 对 msDS-KeyCredentialLink 的写入权限 |
| `audit` | 审核策略、AD 回收站、机器账户配额 |
| `users` | 枚举 AD 用户 — 包含 AS-REP、adminCount、上次登录的汇总表 |
| `computers` | 枚举 AD 计算机 — 全林范围、操作系统、LAPS、委派汇总 |
| `kerb-enum` | 通过 Kerberos AS-REQ 进行用户名枚举 — 无需凭据 |
| `smb` | DC 端口 445 上的 SMB 签名检查 — 无需凭据 |
| `version` | 打印版本 |
## 枚举标志
```
-d, --domain Target domain (required)
-u, --username Username
-p, --password Password
-H, --hashes NT hash for Pass-the-Hash
--ccache Kerberos ccache file path (Pass-the-Ticket)
--dc Domain controller IP or hostname
--proxy SOCKS5 proxy (socks5://host:port) — PTT not supported
--scope Restrict to OU/DN
--report Save HTML report (e.g. report.html)
--json Export objects as JSON to directory
--verbose Show all findings without truncation
--quiet Print only risk verdict line (for CI/scripting)
--stealth Minimal queries — no ACL/GPO/ADCS/delegation
--max-depth BFS depth for attack path search (default 10)
```
## HTML 报告

`--report` 标志会生成一个完整的交互式 HTML 报告,包含:
- **概览** 选项卡 — 风险评分 (A–F 等级)、按类别划分的风险贡献条形图
- **摘要** 选项卡 — 发现结果概览图表、攻击面指标
- **攻击路径** — 有向图可视化 (D3.js)
- **Kerberos**、**ACL**、**委派**、**ADCS**、**信任**、**Shadow Creds**、**GPO**、**LDAP 安全**、**审核**、**SYSVOL**
- **用户**、**组**、**计算机** — 具有按列筛选 (包括主要组) 功能的可搜索/可排序表格
- **多域选项卡** — 每个域单独的选项卡;所有发现结果表格上的域筛选器
- 浅色/深色主题切换
- CVSS 评分,支持点击复制向量
## CI 集成
```
# 遇到 CRITICAL 或 HIGH 风险时以非零状态退出
result=$(morok enum --quiet -d corp.local -u svc -p '...' --dc 10.0.0.1)
echo "$result"
if echo "$result" | grep -qE "RISK (CRITICAL|HIGH)"; then
echo "AD compliance check failed"
exit 1
fi
```
`--quiet` 输出为纯 ASCII 且不带 ANSI 颜色代码 — 可安全用于 Jenkins、GitHub Actions、GitLab CI 日志解析器。
## 认证
| 方法 | 标志 |
|--------|-------|
| 密码 | `-u user -p 'pass'` |
| Pass-the-Hash | `-u user -H NT_HASH` |
| Pass-the-Ticket | `--ccache /path/to/file.ccache` |
| 匿名 | (无凭据 — 数据有限) |
## 评分与严重等级
morok 中的严重性分数和风险等级基于实证
研究和已知攻击模式,但应被视为
**指示性估计**,而非确定性测量。
目前的局限性:
- 分数可能因环境和配置而异
- 部分攻击路径缺乏足够的真实世界数据以进行精确校准
- 权重可能会随着研究的深入而改变
我们鼓励从业者将这些评级作为**起点**
进行自己的评估,而不是作为最终结论。
发现不准确或边缘情况?→ 提交 issue 或联系我们。
## 许可证
morok 在 [GNU Affero General Public License v3.0](LICENSE) (AGPL-3.0) 下发布。
标签:ACL滥用, ADCS漏洞, AD攻防, BloodHound替代, Checkov, CLI安全工具, CSV导出, EVTX分析, HTTP, Kerberos攻击, LDAP枚举, SMB安全, 协议分析, 单文件工具, 嗅探欺骗, 域渗透, 多模态安全, 委派攻击, 安全基线检查, 密码策略检测, 攻击路径枚举, 日志审计, 权限提升, 权限维持, 活动目录, 电子数据取证, 网络安全, 防御绕过, 隐私保护