zoomHass2-glitch/comet
GitHub: zoomHass2-glitch/comet
一款面向 Claude Code 的自主红队杀伤链插件,通过移除上游不安全组件并强化授权与加密机制,实现可控的自动化攻防演练。
Stars: 0 | Forks: 0
# Comet
[](https://github.com/zoomHass2-glitch/comet/actions/workflows/ci.yml)
[](./LICENSE)
[](https://www.python.org/downloads/)
**Comet** 是一个自主的红队杀伤链插件,专为 [Claude Code](https://claude.com/claude-code) 和 oh-my-claudecode (OMC) 设计。它是对 [PurpleAILAB/Decepticon](https://github.com/PurpleAILAB/Decepticon) (Apache-2.0) 的彻底重构,移除了上游的 LangGraph 编排器、LiteLLM 代理、PostgreSQL 花费数据库以及 `/var/run/docker.sock` 挂载,并将编排任务委托给 Claude Code 子代理和 OMC 技能。
## 状态
Comet 在其规划的七个构建阶段中功能已完备,并附带一个密闭的冒烟测试套件(**118 项检查**,在每次推送时由 CI 运行):
| 阶段 | 范围 | 测试 |
|------:|-------|:-----:|
| 1 | Schemas、沙箱运行器、DuckDB KG、提示注入净化器、核心代理和技能 | 10 |
| 2 | 完整的 17 个代理 MITRE ATT&CK 名单、HMAC 链式记录、影响网关 | 16 |
| 3 | 疫苗循环(攻击 → 防御 → 重新测试)、防御行动模板 | 21 |
| 4 | CVE 富化(NVD/EPSS/KEV/OSV)、Neo4j 后端、Dijkstra 攻击路径规划器 | 20 |
| 5 | Sliver C2 子系统(mTLS 绑定,RBAC + 审批 + 影响网关,**默认关闭**) | 17 |
| 6 | 只读 Next.js 仪表板(绑定回环地址,CSP 锁定) | 14 |
| 7 | 独立 CLI、MCP 服务器、无头 Claude 出站通道 | 21 |
C2 子系统(第 5 阶段)和疫苗循环的破坏性操作是可选择加入的,并受交战规则授权的限制——请参阅[安全模型](#security-model)。
## 为什么存在 Comet
| Decepticon(上游) | Comet(此 fork) |
|---|---|
| LangGraph + LangGraph dev :2024(无认证) | Claude Code 会话 = 编排器 |
| LiteLLM 代理 + PostgreSQL 花费数据库 | Claude Max 订阅,`$0` 边际成本 |
| 挂载 `/var/run/docker.sock:ro` | 沙箱是带有 `--cap-drop=ALL` 的普通 `docker run` |
| 默认 `neo4j/neo4j` 凭证,状态文件为明文 | 静态加密状态(`age` / `openssl`),无默认凭证 |
| 未认证的终端服务器 :3003 | 无状态沙箱运行 + 记录文件 |
| 工具输出上无提示注入净化器 | `PostToolUse` 钩子从 `Bash` / `WebFetch` 中剥离 PI 标记 |
| 无正式授权网关 | 强制要求 `RoE.authorization_block`;若无则设置拒绝运行 |
## 使用 Comet 的四种方式
Comet 在同一个核心 Python 包上公开了四个独立的访问层。
选择与您驱动它的方式相匹配的通道:
| 通道 | 入口点 | 能做 | 不能做 |
|--------------------------|------------------------------------|---------------------------------------------------------------------------------|---------------------------------------------------------------------------|
| **1. Claude Code 插件**| `/comet:*` 技能 + 子代理 | 完整的杀伤链:交战、规划、批准、生成植入物、执行、分类 | — |
| **2. CLI (`comet ...`)** | PATH 上的 `comet` (pip install -e .) | 只读 / 安全操作:列出交战、显示 RoE+OPPLAN、列出发现、验证记录、KG 统计 + 攻击路径、CVE 富化、UI 启动器、`sliver kill` | 生成植入物、创建交战、批准计划、运行破坏性 C2 |
| **3. MCP server** | `python -m comet.mcp.server` (stdio) | 与 CLI 相同的只读 + 安全计算接口,作为 MCP 工具暴露给 Claude Desktop / Cursor | 任何写入 / 破坏性 / 批准操作 — 由处理程序强制执行 |
| **4. 无头出站** | `comet.llm.claude_headless.ask(...)` | Python 代码生成 `claude -p` 用于 LLM 任务(发现分类、摘要) | 绕过净化器;将提示文本泄露到记录;设置 `COMET_HEADLESS_DISABLE=1` 运行 |
CLI 和 MCP 层**被特意设计为只读或安全计算**。任何更改交战状态、生成工件或触及实时 C2 的操作,只能通过插件(通道 1)访问,该插件在代理循环内强制执行 RoE + 审批网关。
### CLI — 快速开始
```
pip install -e ~/.claude/plugins/local-plugins/comet
comet --version
comet engagements list
comet engagements show ENG-2026-04-22-abcdef01
comet findings list ENG-2026-04-22-abcdef01
comet transcript verify ENG-2026-04-22-abcdef01
comet kg stats ENG-2026-04-22-abcdef01
comet kg path ENG-2026-04-22-abcdef01 host-a host-z
comet cve enrich CVE-2024-12345 # needs the `enrich` extra
comet ui # spawns `npm run dev` in ui/
comet sliver kill # stop the Sliver teamserver (safe op)
```
退出代码:`0` 正常,`2` 用法错误,`3` 权限拒绝,`4` 未找到。
### MCP 服务器 — 在 Claude Desktop / Cursor 中注册
将插件根目录下 `mcp.json` 中的代码片段复制到您的客户端配置中:
```
{
"mcpServers": {
"comet": {
"command": "python",
"args": ["-m", "comet.mcp.server"],
"env": { "COMET_STATE_ROOT": "${HOME}/.omc/state/comet" }
}
}
}
```
暴露的工具:`comet_list_engagements`, `comet_get_engagement`,
`comet_list_findings`, `comet_verify_transcript`, `comet_kg_stats`,
`comet_kg_attack_path`, `comet_cve_enrich`。每个工具都会验证交战 ID 正则表达式,并在返回前通过 `_redact_secrets()` 处理输出。
### 无头 Claude 出站
```
from comet.llm import ask
summary = ask("Summarise this finding: ...", timeout=30, max_chars=4096)
```
紧急关闭开关:`export COMET_HEADLESS_DISABLE=1`。
## 架构
```
plugin root
├── plugin.json # OMC manifest (agents, skills, hooks)
├── comet/ # Python package (importable as `comet.*`)
│ ├── schemas/ # Pydantic v2 models (RoE, OPPLAN, PTT, Finding, CVE, Defense, ...)
│ ├── state/ # encrypted state I/O + HMAC-chained transcript + migrations
│ ├── sandbox/ # run.sh (docker, cap-drop ALL) + roe_check.py
│ ├── safety/ # impact technique gate (fail-closed)
│ ├── sanitize/ # regex prompt-injection sanitizer + optional LLM guard
│ ├── mitre/ # ATT&CK technique → agent map + validation
│ ├── kg/ # DuckDB (default) + Neo4j backends, attack-path planner, CVE enrichment
│ ├── defense/ # vaccine loop: brief → action templates → executor → reattack
│ ├── c2/ # Sliver client (mTLS-pinned, RBAC + audit) — off by default
│ ├── llm/ # headless `claude -p` outbound channel
│ ├── mcp/ # read-only MCP stdio server
│ └── cli/ # standalone `comet` CLI (read-only / safe-ops)
├── agents/ # 17 Claude Code subagents (Markdown + frontmatter)
├── skills/ # /comet:engage, /comet:opplan, /comet:sliver, /comet:vaccine
├── hooks/ # PostToolUse (sanitize) + UserPromptSubmit (keyword trigger)
├── config/ # default.yaml, impact.yaml, roe.example.yaml
├── ui/ # read-only Next.js dashboard (loopback-only)
└── tests/smoke/ # hermetic smoke tests, phases 1–7
```
每次交战的状态位于 `/.omc/state/comet//`,包含 `OPPLAN.json`, `PTT.json`, `findings/`, `transcript/.jsonl`, `vaccines/`, 和 `kg-snapshot.duckdb`。
## 安装
```
# 1. 将插件放置到指定位置
git clone https://github.com/zoomHass2-glitch/comet ~/.claude/plugins/local-plugins/comet
# 2. 安装 Python package(可编辑模式,以便自动获取更新)
pip install -e ~/.claude/plugins/local-plugins/comet
# 可选 extras:enrich(CVE HTTP 调用)、neo4j、mcp
# pip install -e "~/.claude/plugins/local-plugins/comet[enrich,mcp]"
# 3.(可选)安装 `age` 用于静态加密 —— 如果缺失则回退到 openssl
# Windows: scoop install age
# macOS: brew install age
# Linux: apt install age
# 4. 确保 Docker 已启动(sandbox runner 会使用它)
docker --version
# 5. 运行冒烟测试
bash ~/.claude/plugins/local-plugins/comet/tests/smoke/test_phase1.sh
```
### 启用钩子(手动,非自动安装)
Comet 提供了两个钩子,您必须通过编辑 `~/.claude/settings.json` 来选择加入。这些钩子**不会**自动注册:
```
{
"hooks": {
"PostToolUse": [
{ "matcher": "Bash|WebFetch", "hooks": [
{ "type": "command", "command": "node ~/.claude/plugins/local-plugins/comet/hooks/post-tool-use-sanitize.mjs" }
]}
],
"UserPromptSubmit": [
{ "hooks": [
{ "type": "command", "command": "node ~/.claude/plugins/local-plugins/comet/hooks/keyword-triggers.mjs" }
]}
]
}
}
```
## 用法
```
# 1. 编写一个 Rules of Engagement 文件(从示例开始)
cp ~/.claude/plugins/local-plugins/comet/config/roe.example.yaml ./roe.yaml
$EDITOR ./roe.yaml # fill in allowed_targets and the authorization_block
# 2. 启动一个 engagement
/comet:engage 192.168.56.0/24
# 3. 审查 Comet 生成的 OPPLAN
/comet:opplan show
# 4. 批准(会在 state dir 中写入一个 APPROVED 标志;没有此标志则不会运行任何内容)
/comet:opplan approve
# 5. Comet 现在通过 Task() 并行分发 PTT-ready 节点
```
## 安全模型
1. **强制要求书面授权。** 设置向导和 `/comet:engage` 都会拒绝启动,除非 `roe.yaml` 包含一个完整填写的 `authorization_block`(签名者、签名时间、范围哈希、签名)。范围外的目标会在沙箱运行器处被拒绝。
2. **您对合法性负责。** 在大多数司法管辖区(CFAA、计算机滥用法、西班牙的 LPI 等),对您不拥有或没有书面测试许可的系统运行 Comet 是非法的。
3. **Sliver C2 引入了真正的后渗透能力** — 植入物、信标、横向移动。它被特意由选择加入的配置标志(`sliver.enabled: true`)控制,并且**默认关闭**。每个 C2 操作都会通过 RBAC 范围检查、APPROVED 标志网关、针对破坏性技术的影响网关,以及 HMAC 链式审计记录。
4. **沙箱不是保险箱。** Docker 沙箱使用 `--cap-drop=ALL --security-opt=no-new-privileges --read-only` 和隔离网络,但意志坚定的攻击者利用内核漏洞仍可能逃脱。切勿在生产基础设施上运行 Comet。
5. **状态静态加密**(`age` 接收者/身份模式,或 `openssl enc -aes-256-cbc -pbkdf2`),但在轮次运行时会在内存中解密。请将交战目录视为敏感信息。任何地方都没有默认凭证。
6. **交战记录具有防篡改性。** 每个操作都会附加一条 HMAC-SHA256 链式 JSONL 行;`comet transcript verify` 会跨日期边界遍历链条并报告第一个中断。
7. **提示注入净化器基于正则表达式。** 它可以捕获明显的标记(``、`### NEW INSTRUCTIONS`、零宽字符、ANSI 转义、超大的 base64),但不能保证防范扫描输出中的新型注入向量。在根据工具输出采取行动之前,请先进行检查。可选的基于 LLM 的第二层(`comet.sanitize.llm_guard`)会安全失效(默认拒绝)。
## 测试
冒烟测试套件是密闭的 — 没有 Docker、没有网络、没有实时 C2(后端被注入/模拟)。运行单个阶段或整个集合:
```
# 单个阶段
bash tests/smoke/test_phase1.sh
# 所有阶段
for p in 1 2 3 4 5 6 7; do bash tests/smoke/test_phase$p.sh || break; done
```
Lint + 编译:
```
pip install -e ".[dev]"
ruff check comet
python -m py_compile $(git ls-files 'comet/*.py')
```
CI 在每次推送时运行上述所有内容(参见 [`.github/workflows/ci.yml`](./.github/workflows/ci.yml))。
## 定价
Comet 使用您的 **Claude Max 订阅**进行每次模型调用。没有 LiteLLM 代理,没有按 Token 计费的 API 费用,没有 PostgreSQL 支出跟踪。在您的订阅配额内,每次交战的边际成本 = **$0**。Sliver C2 子系统在本地 Docker 容器中运行 — 无 SaaS 成本。
## 版权归属
Comet 是 [PurpleAILAB/Decepticon](https://github.com/PurpleAILAB/Decepticon)(Apache License 2.0)的分支。有关完整的归属说明,请参阅 [`NOTICE`](./NOTICE);有关 Apache-2.0 许可证文本,请参阅 [`LICENSE`](./LICENSE)。重大的架构变更已列在此文件顶部的表格中。
## 许可证
Apache License 2.0 — 详见 [`LICENSE`](./LICENSE)。
标签:Claude插件, IP 地址批量处理, LLM代理, MCP服务, TGT, 插件系统, 攻防演练, 红队自动化, 请求拦截, 逆向工具