Dark-Moon 拆解:先把真实 IP 和凭证本地脱敏,再放 AI 去打
一、速览:值不值得你花时间
推荐指数:★★★★☆(4 / 5)
给到这个分数的理由:它解决的是自主渗透这个领域最卡企业落地的一个真问题 —— 你不能把含有真实 IP、内网域名、凭证片段的流量发给云端大模型,但本地小模型又撑不起复杂推理。Dark-Moon 的答案是 Privacy Gateway:可逆的本地 tokenization。真实值在离开你的边界之前就变成了确定性占位符(比如把 10.0.0.1 换成 __HOST_A__),只在工具真正要执行的那一刻在本地还原。占位符是确定性的,所以模型依然能做「同一个主机出现了三次」这类关联推理,但送出去的文本里没有真实资产。
第二个加分点是工具是真家伙而且数量管够:一个多阶段构建的 Docker 镜像里塞了 140+ 安全工具(Nuclei、sqlmap、WPScan、NetExec、BloodHound、Impacket 30+ 脚本、kubectl、aws/az/gcloud、hashcat、john……),不是一个「AI 假装自己在扫描」的壳子。
扣掉的一颗星在四个地方:GPL-3.0(比 AGPL 温和,但仍是强 copyleft);README 里 Pro 版的存在感过强(大段截图和「自动修复出 PR」都是付费的,开源版只有 CLI);那条 57 个漏洞的 benchmark 是用云端 frontier 模型(Anthropic Claude)跑出来的,本地模型的覆盖率 README 自己写了「取决于你跑的模型」——所以 headline 数字不代表本地跑的效果;以及 Open Issues 只有 2 个,社区样本还很小。
关键数据(截至 2026-09-30)
| 语言 | Python |
| Star / Fork | 975 / 159 |
| 提交 / Open Issues | 220 / 2 |
| 许可证 | GPL-3.0 |
| 首次提交 | 2024-11-26(约 22 个月) |
| 最近提交 | 2026-09-27(2 天前,非常活跃) |
| 仓库体积 | 约 92 MB(含文档与镜像构建资源) |
| 运行时要求 | Docker & Docker Compose + LLM API key 或本地模型 |
| 模型支持 | 云端:Anthropic / OpenAI / OpenRouter;本地:Ollama / llama.cpp |
| 官方站点 | https://dark-moon.org/ |
适合谁
| 人群 | 分 | 理由 |
|---|---|---|
| 企业安全运营 | 4 / 5 | Privacy Gateway + 本地模型是对合规最友好的组合;CI/CD 原生集成也齐 |
| 红队 / 渗透测试工程师 | 4 / 5 | 140+ 真工具 + AD/K8s/云全覆盖,覆盖面在开源里少见 |
| DevSecOps 工程师 | 5 / 5 | GitHub Actions / GitLab CI / Jenkins / VS Code / JetBrains 全都有官方集成 |
| 安全研究员 | 3 / 5 | 架构上没有 LuaN1ao 那种证据链硬约束,偏工程而非方法论 |
| 个人 / 学习者 | 2 / 5 | Docker Compose 全栈 + 92MB 仓库,起步成本偏高 |
二次开发
| 难度 | 说明 |
|---|---|
| 改配置 | 低 —— ./install.sh 交互式配 LLM provider,不用手改 docker-compose.yml;FOCUS / EXCLUDE / NOISE 等 flag 直接写进 prompt |
| 改集成 | 低 —— 有 npm 包 @darkmoon_ai/client,8 个官方集成,且所有集成只输出安全元数据(severity / status / MITRE / ids),不含证据与凭证 |
| 改内核 | 中 —— MCP workflow、agent 定义都在 docs/full.md 里有章节,可以加自定义 agent,但要懂 OpenCode + MCP 两层 |
二、它是什么,不是什么
- 不是一个漏洞扫描器的包装。它不产出「分数」,README 的用词是 Evidence, not scores —— 每条发现都附带确切的命令和原始输出。
- 不是让 AI 直接碰系统的工具。架构里有一句很硬的话:The AI never runs a command directly,所有动作都经 MCP 这个 controlled + logged 的接口。
- 不是纯云端 SaaS。它能全本地跑(Ollama / llama.cpp),这是它和 strix、shannon 最核心的差异。
- 不是一个「50 个 agent 各干各的」的 swarm。它是一个 agentic system 在推理和规划,按需派发专家 agent。
提炼三个关键词:Privacy Gateway(本地可逆脱敏)、MCP Gatekeeper(AI 与工具之间的受控层)、sub-agent dispatch(按检测到的技术栈派发专家)。
三、Privacy Gateway:这条设计是它最值钱的地方
先把威胁模型说清楚。你让一个 AI agent 去打你的内网,它会看到:真实 IP、内网域名、URL 路径、响应体里可能带的内网标识、甚至你给的凭证。这些文本要送给 LLM 做推理。如果 LLM 在云端,你等于把资产测绘结果发给了第三方。
Dark-Moon 的做法:
Reversible local tokenization turns real IPs, hosts, URLs and credentials into deterministic placeholders, rehydrated only locally at the moment a tool runs.
三个关键词值得拆:
- Reversible(可逆) —— 不是哈希掉找不回来。工具真要打
10.0.0.1的时候得能还原成真地址,否则扫不了。 - Deterministic(确定性) —— 同一个真实值每次都映射到同一个占位符。这一条是能不能做推理的关键:模型必须能看出「第 3 步和第 7 步遇到的是同一个主机」,如果占位符是随机的,这条关联就断了,规划质量会崩。
- Rehydrated only locally, at the moment a tool runs(只在工具执行那一刻本地还原) —— 还原发生的时间窗极短,且不出本地边界。送进模型上下文的始终是占位符。
这套思路其实和业界做「LLM 数据防泄漏」的路子一致,但把它专门针对渗透场景的资产标识符做了适配,这是 Dark-Moon 的原创贡献。企业里真要上自主渗透,这一条几乎是必备项。
但要诚实地说:README 只描述了机制,没有给出脱敏覆盖率的量化数据(哪些字段会脱敏、有没有漏网的、占位符碰撞怎么处理)。想依赖它做合规,得自己先审一遍代码再下结论。
四、架构:AI 只能隔着 MCP 下令
1 | User ──> DarkmoonCLI ──> OpenCode (AI Brain) ──> MCP (Security Gatekeeper) ──> Docker Toolbox (Real Tools) |
1 | sequenceDiagram |
三层职责很清楚:AI 推理和规划,MCP 决定什么能被执行,Toolbox 在 Docker 里跑隔离的工具。
这里有个细节值得单独拎出来 —— 需要凭证才有意义的平面永远不在推理时派发:
Planes that require credentials to be meaningful (cloud accounts, CI/CD, secret stores, databases, Active Directory, Kubernetes) are never dispatched on inference. They fire only when a concrete artifact is found (a key, a token, a reachable metadata endpoint) or when you authorize them explicitly, and are otherwise flagged in the report.
也就是说,AD / K8s / 云 / 数据库这几类 agent,不是「模型觉得该打就打」,而是必须先找到具体凭证或可达的 metadata 端点,或者你显式授权。没触发就在报告里标出来让你自己看。这是个很务实的收敛 —— 既避免了模型凭空幻想云环境,也避免了一上手就对着云 API 猛打。
子 agent 派发表(部分)
| 检测到的技术 | 触发的 agent |
|---|---|
| WordPress / Drupal / Joomla / Magento / PrestaShop / Moodle | CMS 专用 |
| PHP / Node.js / Flask / ASP.NET / Spring Boot / Ruby on Rails / Go | 技术栈专用 |
| GraphQL | GraphQL agent |
| LLM / AI 推理端点(OpenAI-compatible、Ollama、vLLM、TGI) | LLM agent |
| Active Directory | AD agent |
| Kubernetes | Kubernetes agent |
| AWS / Azure / GCP | 云厂商 agent |
| Entra ID | Identity agent |
| GitHub / GitLab / Jenkins | SCM & CI/CD agent |
| Terraform / Ansible | IaC agent |
| Docker / 容器仓库 | Container agent |
| HashiCorp Vault | Secrets agent |
| PostgreSQL / MySQL / MSSQL / Oracle | Database agent |
| Redis / RabbitMQ / Kafka / MQTT | Messaging & cache agent |
| 固件 / IoT 镜像 | Firmware agent |
它连你自己的 AI 也打 —— LLM agent 会用 garak 支撑的 probes 去测 AI/LLM 推理端点的 OWASP LLM Top 10。这一条在同类工具里不常见。
五、Benchmark:57 个漏洞,但要看清跑法
README 给的是一次真实、可复现的黑盒运行,靶场是 OWASP Juice Shop:
| 指标 | 结果 |
|---|---|
| 发现漏洞数 | 57(8 critical / 24 high / 21 medium / 4 low) |
| 墙钟耗时 | 28.5 分钟 |
| 利用证明 | 每条发现附 command + raw output |
| 所用 LLM | Anthropic Claude(云端 frontier) |
这里必须提醒一句:这张表的 57 是云端 frontier 模型的成绩。README 同一段紧接着写:
DarkMoon also runs fully local (Ollama / llama.cpp) behind the Privacy Gateway — so nothing leaves your infrastructure; local-model coverage depends on the model you run.
也就是说,你如果为了合规跑本地模型,不能指望复现 57 这个数字。本地能到多少,README 没给数据。这是评估这个项目时最容易踩的坑 —— headline 和你的实际部署形态不是一回事。
想自己复现对比,官方给了仓库:ASCIT31/Darkmoon-Benchmarks。这个态度是加分的。
官方还给了横向对比表(标注「整理自公开 repo/doc,2026-08,欢迎 PR 更正」):
| DarkMoon | strix | shannon | PentAGI | |
|---|---|---|---|---|
| 跑在本地 LLM 上 | ✅ | ❌ 云端 | ❌ 云端 | partial |
| Privacy Gateway(本地 tokenization) | ✅ | ❌ | ❌ | ❌ |
| Active Directory + Kubernetes | ✅ | ❌ | ❌ | partial |
| 利用证明 | ✅ | ✅ | ✅ | ✅ |
| 开源 | ✅ GPL-3.0 | ✅ | ✅ | ✅ |
这张表是项目方自己整理的,不是第三方评测,读的时候要带这个前提。
六、部署与集成
安装
1 | git clone https://github.com/ASCIT31/Dark-Moon.git |
install.sh 会交互式配置 LLM provider(不用手改 docker-compose.yml)并构建整个栈:
1 | ./install.sh # 若 .opencode.env 已配置则跳过表单 |
跑第一次评估并实时看日志:
1 | ./darkmoon.sh "TARGET: example.com" |
前置条件:Docker & Docker Compose,加一个 LLM API key(或本地模型)。
Scope 与 flag
1 | # 快速渗透(零配置) |
主要 flag:FOCUS、EXCLUDE、CREDS、TOKEN、NOISE、SEVERITY、FORMAT,全部由 AI 自然语义解析。
工具箱(140+,Docker 多阶段构建)
| 类别 | 工具举例 |
|---|---|
| 端口扫描 | Naabu(发现)、nmap(定向服务探测) |
| Web 扫描 | Nuclei、ffuf、dirb、sqlmap、Arjun、wafw00f |
| 侦察 & 爬取 | Subfinder、Katana、Waybackurls、httpx |
| CMS | WPScan、CMSeeK、WhatWeb |
| Active Directory | NetExec、BloodHound、Impacket(30+ 脚本) |
| Kubernetes | kubectl、Kubescape、Kubeletctl、kube-bench、rbac-police |
| 云 CLI | aws、az、gcloud、gsutil、bq |
| 数据库 & 缓存 | psql、mysql、redis-cli、sqlite3 |
| 固件 / IoT | binwalk、unsquashfs、sasquatch、firmwalker |
| 破解 | hashcat、john、7z2john |
| 网络 | Hydra、curl、dig、SNMP 工具 |
| 浏览器 | Lightpanda(headless) |
集成矩阵
| 平台 | 作用 | 版本 |
|---|---|---|
| GitHub Actions | 按严重程度 fail 流水线 | OSS + Pro |
| GitLab CI/CD | 输出 Code Quality + SAST 报告 | OSS + Pro |
| Jenkins | 输出 Warnings-NG issues | OSS + Pro |
| VS Code | 从编辑器浏览和发起评估 | OSS + Pro |
| JetBrains | IDE tool window 显示发现 | OSS + Pro |
| n8n | 自动化 campaign / retest / 告警 | Pro |
| Grafana | 安全态势仪表盘 | Pro |
| Splunk | SOC 接入(HEC)+ 告警动作 | OSS + Pro |
| SDK / CLI | npm @darkmoon_ai/client 自建集成 |
OSS + Pro |
一个很好的约束:所有集成只输出安全的元数据(severity、status、MITRE、id),不输出证据、密钥或 token。这避免了「CI 日志里泄露了内网证据」这类二次事故。
七、边界与风险(必须诚实说的部分)
1)GPL-3.0,不是 Apache/MIT。 比 AGPL-3.0 温和(没有网络服务化条款),但仍是强 copyleft。企业把它嵌进自有产品要谨慎;作为独立工具使用没问题。
2)README 的 Pro 版篇幅过重,容易误读。 大段 dashboard 截图、orbital attack-surface map、scheduler、以及「finding → sandbox-validated fix → human-reviewed PR」这条自动修复链路,全都是 Darkmoon Pro 付费功能,不在你 clone 的开源仓库里。开源版是 CLI。README 虽然用 🔒 标了,但视觉上 Pro 的篇幅远超 OSS,第一次读很容易以为那些是开源能力。
3)57 漏洞的成绩与本地部署无关。 见第五章 —— 用云端 Claude 跑出来的。想评估本地方案的实际效果,目前没有公开数据,只能自己跑 benchmark 仓库。
4)本地模型的实际能力是个未知数。 文档只说「coverage depends on the model you run」。而本地小模型在长链条工具调用上的退化是行业共性问题 —— 50 个 agent 的派发决策、MCP 工具参数构造,对小模型都不友好。别默认「开了 Ollama 就等于等价替代」。
5)Open Issues 只有 2 个,未必等于稳定。 975 star、220 commit、22 个月历史,issue 数这么低更可能反映社区参与度还很小。你踩到坑时,能指望的外部帮助有限。
6)对比表是自评。 「整理自公开 repo/doc(2026-08),欢迎 PR 更正」—— 这个免责声明很诚实,但也说明它不是独立评测。用它做选型时请自己验证。
7)依赖链偏重。 OpenCode(AI Brain)+ MCP + Docker Compose 全栈 + 92MB 仓库 + 140+ 工具的镜像。构建时间和排障成本都不低,而且这三层里任何一层出问题都会让整条链停下来。
八、上手建议(按这个顺序来)
- 用
./install.sh而不是手改docker-compose.yml。 它会交互式配好 provider 并构建全栈。想换云端/本地模型用./install.sh --init。 - 第一次跑选最窄的 scope。 官方示例是
TARGET: http://172.19.0.3:3000这种单点,别一上来就给网段。 - 优先试 Privacy Gateway 的脱敏效果。 这是它的核心卖点。跑的时候盯着
--log <session_id>的实时日志,确认送出去的文本里确实没有真实 IP 和凭证。这一步不建议跳过 —— 它是你决定是否敢用云端模型的前提。 - 想聚焦就用
FOCUS。 比如FOCUS=sqli,xss,idor能显著缩短跑完的时间,也减少无关噪声。第一次评估建议聚焦单一类别,看清楚它怎么推理。 - 云端模型先跑通,再切本地做对比。 先用 Claude 复现一遍 Juice Shop(对照
Darkmoon-Benchmarks),建立基线;再切 Ollama 跑同一个靶场,自己量化本地退化多少。这个差值才是你做部署决策的真实依据。 - CI/CD 集成从 GitHub Actions 或 GitLab CI 开始,这两个是 OSS 版就有的,且只输出元数据不输出证据,风险最低。别一上来就用 n8n / Grafana,那是 Pro。
- 如果需要 AD / K8s / 云的覆盖,准备好显式授权。 那几个平面不会在推理时自动派发,你要么找到具体凭证/可达 metadata 端点,要么显式授权,否则它们只会在报告里被标出来。
九、一句话结论
如果你的约束是「渗透可以自动化,但资产信息一步都不能出门」,Dark-Moon 是目前开源里唯一把本地可逆脱敏做进主流程的选择;但请记住它的 57 漏洞战绩属于云端 Claude,而那些漂亮的 dashboard 和自动修 PR 属于付费的 Pro。
给企业安全团队的第一动作:用 ./install.sh 起一套,先跑 Juice Shop 单点,全程开着 --log 验证脱敏是否真的生效。 确认了这一点,再谈要不要把它接进 CI。