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.

三个关键词值得拆:

  1. Reversible(可逆) —— 不是哈希掉找不回来。工具真要打 10.0.0.1 的时候得能还原成真地址,否则扫不了。
  2. Deterministic(确定性) —— 同一个真实值每次都映射到同一个占位符。这一条是能不能做推理的关键:模型必须能看出「第 3 步和第 7 步遇到的是同一个主机」,如果占位符是随机的,这条关联就断了,规划质量会崩。
  3. 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sequenceDiagram
participant U as User
participant O as OpenCode
participant A as AI Agent
participant M as MCP Darkmoon
participant T as Docker Toolbox

U->>O: User prompt
O->>A: Delegate task
A->>M: MCP function call
M->>T: Execute real tool
T-->>M: Results
M-->>A: Structured output
A-->>O: Next decision
O-->>U: Summary / result

三层职责很清楚: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
2
3
git clone https://github.com/ASCIT31/Dark-Moon.git
cd Dark-Moon
./install.sh

install.sh 会交互式配置 LLM provider(不用手改 docker-compose.yml)并构建整个栈:

1
2
3
./install.sh           # 若 .opencode.env 已配置则跳过表单
./install.sh --init # 强制重新配置(云端或本地模型)
./install.sh --help # 查看用法

跑第一次评估并实时看日志:

1
2
./darkmoon.sh "TARGET: example.com"
./darkmoon.sh --log <session_id>

前置条件:Docker & Docker Compose,加一个 LLM API key(或本地模型)。

Scope 与 flag

1
2
3
4
5
6
7
8
9
10
11
# 快速渗透(零配置)
./darkmoon.sh "TARGET: http://172.19.0.3:3000"

# 漏洞赏金模式(flag 自动激活)
./darkmoon.sh "TARGET: http://172.19.0.3:3000 PROGRAM=\"Juice Shop\" FOCUS=sqli,xss,idor NOISE=moderate FORMAT=h1"

# 指定技术栈聚焦 + 排除
./darkmoon.sh "TARGET: https://app.example.com PROGRAM=\"Example BB\" FOCUS=sqli,rce,ssrf EXCLUDE=H1 FORMAT=h1"

# Active Directory
./darkmoon.sh "TARGET: 192.168.1.10"

主要 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+ 工具的镜像。构建时间和排障成本都不低,而且这三层里任何一层出问题都会让整条链停下来。

八、上手建议(按这个顺序来)

  1. 用 ./install.sh 而不是手改 docker-compose.yml。 它会交互式配好 provider 并构建全栈。想换云端/本地模型用 ./install.sh --init。
  2. 第一次跑选最窄的 scope。 官方示例是 TARGET: http://172.19.0.3:3000 这种单点,别一上来就给网段。
  3. 优先试 Privacy Gateway 的脱敏效果。 这是它的核心卖点。跑的时候盯着 --log <session_id> 的实时日志,确认送出去的文本里确实没有真实 IP 和凭证。这一步不建议跳过 —— 它是你决定是否敢用云端模型的前提。
  4. 想聚焦就用 FOCUS。 比如 FOCUS=sqli,xss,idor 能显著缩短跑完的时间,也减少无关噪声。第一次评估建议聚焦单一类别,看清楚它怎么推理。
  5. 云端模型先跑通,再切本地做对比。 先用 Claude 复现一遍 Juice Shop(对照 Darkmoon-Benchmarks),建立基线;再切 Ollama 跑同一个靶场,自己量化本地退化多少。这个差值才是你做部署决策的真实依据。
  6. CI/CD 集成从 GitHub Actions 或 GitLab CI 开始,这两个是 OSS 版就有的,且只输出元数据不输出证据,风险最低。别一上来就用 n8n / Grafana,那是 Pro。
  7. 如果需要 AD / K8s / 云的覆盖,准备好显式授权。 那几个平面不会在推理时自动派发,你要么找到具体凭证/可达 metadata 端点,要么显式授权,否则它们只会在报告里被标出来。

九、一句话结论

如果你的约束是「渗透可以自动化,但资产信息一步都不能出门」,Dark-Moon 是目前开源里唯一把本地可逆脱敏做进主流程的选择;但请记住它的 57 漏洞战绩属于云端 Claude,而那些漂亮的 dashboard 和自动修 PR 属于付费的 Pro。

给企业安全团队的第一动作:用 ./install.sh 起一套,先跑 Juice Shop 单点,全程开着 --log 验证脱敏是否真的生效。 确认了这一点,再谈要不要把它接进 CI。

评论Comments