YakinAnd/morok

GitHub: YakinAnd/morok

轻量级单二进制 Active Directory 攻击路径枚举工具,无需 BloodHound 或 Neo4j 即可全面检测域环境安全风险并生成可视化报告。

Stars: 0 | Forks: 0

# morok **Active Directory 攻击路径枚举器** morok 是一款轻量级的单二进制文件 CLI 工具,用于枚举 Active Directory 环境、识别通往特权组的攻击路径,并检测安全配置错误——无需 BloodHound、Neo4j 或任何额外的基础设施。 ## ![CLI 演示](/docs/assets/demo-cli.png) ## 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 报告 ![HTML 报告](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8412acbb72083045.png) `--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安全, 协议分析, 单文件工具, 嗅探欺骗, 域渗透, 多模态安全, 委派攻击, 安全基线检查, 密码策略检测, 攻击路径枚举, 日志审计, 权限提升, 权限维持, 活动目录, 电子数据取证, 网络安全, 防御绕过, 隐私保护