
raptor v3.1.0
自动化安全研究框架,集成静态分析、二进制分析、模糊测试、基于大语言模型的漏洞验证、漏洞利用生成及补丁编写,支持攻击与防御操作。
╔═══════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ██████╗ ████████╗ ██████╗ ██████╗ ║
║ ██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔═══██╗██╔══██╗ ║
║ ██████╔╝███████║██████╔╝ ██║ ██║ ██║██████╔╝ ║
║ ██╔══██╗██╔══██║██╔═══╝ ██║ ██║ ██║██╔══██╗ ║
║ ██║ ██║██║ ██║██║ ██║ ╚██████╔╝██║ ██║ ║
║ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ║
║ ║
║ Autonomous Offensive/Defensive Research Framework ║
║ Based on Claude Code (v3.1.0) ║
║ ║
║ Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake) ║
║ Michael Bargury, John Cartwright ║
║ ║
╚═══════════════════════════════════════════════════════════════════════════╝
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣤⣤⣀⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⣿⣿⠿⠿⠟
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣀⣀⣀⣤⣴⣶⣶⣶⣤⣿⡿⠁⠀⠀⠀
⣀⠤⠴⠒⠒⠛⠛⠛⠛⠛⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⣿⣿⣿⡟⠻⢿⡀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⢿⣿⠟⠀⠸⣊⡽⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⣿⡁⠀⠀⠀⠉⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⠿⣿⣧⠀ Get them bugs.....⠀⠀⠀⠀⠀
作者: Gadi Evron、Daniel Cuthbert、Thomas Dullien (Halvar Flake)、Michael Bargury、John Cartwright (@gadievron、@danielcuthbert、@thomasdullien、@mbrg、@grokjc)
许可证: MIT,参见 LICENSE。请注意 CodeQL 有其自己的许可证,不允许商业使用。
仓库: https://github.com/gadievron/raptor
什么是 RAPTOR?
RAPTOR 是一个自主安全研究框架,构建在 Claude Code 之上(但并不绑定于它——你也可以接入自己的分析层)。它将静态分析、二进制分析、LLM 驱动的漏洞验证、漏洞利用生成和补丁编写串联成一个单一工作流,你可以针对代码库或二进制文件运行它。
它不是打磨完善的软件。它是在空闲时间构建的,靠热情和胶带拼凑在一起,但它运行得足够好,以至于我们无法停止使用它。如果你想让它变得更好,请提交 PR。
RAPTOR 代表 Recursive Autonomous Penetration Testing and Observation Robot(递归自主渗透测试与观察机器人)。我们真的很想叫它 RAPTOR。
它是如何构建的
RAPTOR 主要是 AI 生成的代码。人类设定方向、审查 输出并做出设计决策;AI 编写实现。 机械验证(测试、静态分析、语料库校准)将 质量门槛保持在所需水平,无论代码是谁——或者是什么——编写的。
先决条件
- Claude Code,需要有效订阅(Max、Pro、Team 或 Enterprise)或 Anthropic API 密钥。这是交互式
raptorshell 的编排层——如果你只需要独立 CLI,则它是可选的,请参见下方的完全独立运行。 - Python 3.10+ 和 Node.js 18+。
- Semgrep(
pip install semgrep)用于静态分析。CodeQL 是可选的,但推荐使用。
对于分析调度层(分析单个发现结果的 LLM),Claude Code 本身默认处理一切——不需要额外的 API 密钥。如果你想要多模型分析(例如 Claude + GPT + Gemini)或完全本地化的设置,则需要配置其他提供商。请参见下方的使用不同的 LLM。
快速开始
选项 1:手动安装```bash
Clone the repo
git clone https://github.com/gadievron/raptor.git cd raptor
Install Python dependencies
uv sync --locked
Compatibility path during the uv migration
pip install -r requirements.txt
Install Claude Code (if you don't already have it)
npm install -g @anthropic-ai/claude-code
Install Semgrep (required for scanning)
pip install semgrep
Add the launcher to your PATH -- put this in your shell profile to make it
permanent. Append rather than prepend, so system directories stay ahead of
the repo. (Alternatively, symlink bin/raptor into a directory already on PATH.)
export PATH="$PATH:$PWD/bin"
Launch RAPTOR
raptor
`raptor` 启动器是启动会话的推荐方式,它可以在任何目录下工作——它会解析 RAPTOR 安装位置,记住你启动时所在的目录(因此像 `/scan` 这样的命令会默认使用该目录),运行预检信任和项目检查,加载覆盖率跟踪插件,并在移交给 Claude Code 之前清理环境。它还接受一个可选的目标路径以及 `--project`、`--continue` 和 `--model` 等标志——参见 `raptor --help`。
在仓库目录内直接运行 `claude` 也可以——Claude Code 会从检出目录中读取 RAPTOR 的配置——但你会跳过启动器所做的上述所有事情:没有预检检查,没有覆盖率跟踪,并且那些默认使用“你运行此命令时所在的目录”的命令无法看到它。
**重要:** RAPTOR 从仓库目录加载其配置。如果你从任何其他目录运行 `claude`,你得到的是普通的 Claude Code,而不是 RAPTOR。`raptor` 启动器完全避免了这种失败模式。
### 选项 2:在容器中运行(推荐)
使用容器是一种常见的安全实践,可以限制代理访问你不想让它们访问的文件系统区域,同时限制可能执行的任何恶意代码(例如通过供应链攻击)的影响范围。该镜像很大(约 6 GB)。它基于 Microsoft Python 3.12 devcontainer 构建,并添加了静态分析、模糊测试和浏览器自动化工具。
你可以拉取预构建的镜像:```bash
docker pull danielcuthbert/raptor:latest
或使用附带的 Dockerfile 在本地构建:```bash
docker build -f .devcontainer/Dockerfile -t raptor:latest .
该镜像期望在启动时将 RAPTOR 框架(本仓库)挂载到 `/workspaces/raptor`。你可以选择性地挂载一个目标文件夹以进行本地分析。
要启动容器:```bash
docker run -it \
-v "$(pwd):/workspaces/raptor" \
raptor:latest
要同时挂载目标文件夹:```bash
docker run -it
-v "$(pwd):/workspaces/raptor"
-v "/path/to/target-folder:/workspaces/target"
raptor:latest
如果需要 `rr` 确定性调试器,请添加 `--privileged`。
VS Code devcontainers 也受支持。要挂载目标文件夹,请将其添加到 `.devcontainer/devcontainer.json` 的 `mounts` 部分:```jsonc
"mounts": [
// ...existing entries...
"source=/path/to/target-folder,target=/workspaces/target,type=bind,consistency=cached"
]
然后在 VS Code 中打开该仓库——它会提示你在容器中重新打开:```bash cd /path/to/raptor code .
无论哪种方式,进入容器后,运行 `raptor` 即可开始。
---
## 首次运行的预期
你可以做的最简单的事情:```
/scan /path/to/code
这会针对目标运行 Semgrep(当安装了 spatch 时还会运行 Coccinelle;添加 --codeql 可启用 CodeQL),对发现结果去重,并生成 SARIF 报告。不使用 LLM 分析,除 Claude Code 外无需任何 API 密钥。在典型代码仓库上运行需要几分钟。
要添加 LLM 驱动的验证:``` /agentic /path/to/code
这会运行完整流水线:扫描、去重,然后将每个发现送入验证阶段(A-F)。在约 50 个发现的中型代码库上,预计需要 10-30 分钟,分析层 LLM 成本为 $2-8(取决于模型)。默认成本上限为每次运行 $10;可通过 `--max-cost-usd` 调整。
**成本说明:** Claude Code 编排层使用你的 Claude 订阅。分析调度层会发起单独的 LLM API 调用,按 token 计费。如果你仅使用 Claude Code 作为分析模型(默认),则除订阅外没有额外成本。如果你配置了外部模型(OpenAI、Gemini 等),这些 API 调用将按相应提供商计费。
---
## 安全模型
RAPTOR 会运行 LLM 生成的代码并分析不受信任的仓库。处理不受信任内容的子进程使用 Linux namespaces、Landlock 和 seccomp 进行沙箱隔离。沙箱会阻止网络访问、限制文件系统可见性并限制资源消耗。完整威胁模型和配置请参见 `docs/sandbox.md`。
可能在启动器链中注入代码的环境变量会在启动时被剥离(`core/security/_dangerous_env_strip.sh`)。来自被扫描仓库的文件路径绝不会被插值到 shell 字符串中——所有子进程调用都使用基于列表的参数。
---
## RAPTOR 能做什么
| 命令 | 功能 | 状态 |
|---------|-------------|--------|
| `/agentic` | 完整自主工作流:扫描、验证、利用、修补 | 稳定 |
| `/scan` | 使用 Semgrep 和 CodeQL 进行静态分析 | 稳定 |
| `/understand` | 映射攻击面、追踪数据流、寻找漏洞变体 | 稳定 |
| `/binary` | 黑盒二进制调查、运行时证据、图查询与交接 | Beta |
| `/ghidra` | Ghidra RE 桥接:附加/导入 `.gpr` 项目、跨版本 diff、发现导出 | Beta |
| `/audit` | 假设驱动、基于工具的 systematic 代码审查 | Beta |
| `/review` | 查询审计状态:发现、缺口、覆盖率、操作员备注 | 稳定 |
| `/annotate` | 附加自由形式的逐函数文字注释(操作员审查备注) | 稳定 |
| `/validate` | 多阶段可利用性验证流水线(阶段 0-F) | 稳定 |
| `/diagram` | 从 `/understand` 和 `/validate` JSON 输出生成 Mermaid 可视化图 | Beta |
| `/codeql` | 仅使用 CodeQL 的深度分析,带 SMT 数据流预筛选 | 稳定 |
| `/analyze` | 使用 LLM 分析现有 SARIF 发现,无需重新扫描 | 稳定 |
| `/openant` | OpenAnt LLM 源代码扫描:AST 分析加逐函数 LLM 推理 | Beta |
| `/sca` | 软件成分分析:依赖、公告、供应链信号、SBOM 和修复 | Beta |
| `/cve-diff` | 跨 OSV、NVD、GitHub 和 GitLab 发现并 diff 某个 CVE 的修复提交 | Beta |
| `/cve-env` | 构建并验证运行某个 CVE 受影响应用补丁前版本的 Docker 环境 | 实验性 |
| `/exploit` | 生成概念验证漏洞利用代码 | Beta |
| `/patch` | 为已确认漏洞生成安全补丁 | Beta |
| `/fuzz` | 使用 AFL++ 进行二进制模糊测试和崩溃分析 | 稳定 |
| `/crash-analysis` | 针对 C/C++ 崩溃的自主根因分析 | 稳定 |
| `/oss-forensics` | 针对 GitHub 仓库的、有证据支持的取证调查 | 稳定 |
| `/project` | 命名工作区,用于组织运行并随时间跟踪发现 | 稳定 |
| `/describe` | 描述目标:语言构成、构建系统、工具缺口、成本估算(只读) | 稳定 |
| `/threat-model` | 创建、检查并维护每个项目的威胁模型 | 稳定 |
| `/sage` | 持久记忆层(存储、回忆、链接、佐证) | 稳定 |
| `/ask` | 向任何已配置的 LLM 模型发送自由形式提示 | 稳定 |
| `/scorecard` | 检查各模型在决策类别上的可靠性 | 稳定 |
| `/frida` | 通过 Frida 进行动态插桩 | Alpha |
| `/web` | Web 应用扫描:爬取、ffuf/nuclei 集成、oracle 验证注入、盲 SSRF 回调 | Beta |
---
## 流水线如何工作
首先创建一个项目,以便所有运行都归集到同一处:```
/project create myapp --target /path/to/code # create a project first
/project use myapp # set it as active
/understand --map # map the attack surface
/agentic --threat-model --validate # map, model, scan, validate
/project findings # review everything in one place
对于编译后的产物,等效的起点是:```text /binary investigate /path/to/binary # build the evidence-backed binary map /binary graph --edges --json # query the persisted graph /binary trace-parser # collect runtime parser evidence /binary harness # draft a harness only when the boundary is explicit
`/understand` 在开始任何扫描之前,先构建入口点、信任边界和汇聚点的上下文映射。随后 `/agentic` 运行 Semgrep 和 CodeQL,对发现结果去重,并使用 exploitation-validator 方法将每个发现分派进行验证:
使用 `--threat-model` 时,RAPTOR 先运行映射,如果项目尚未有 `threat-model.json` 和 `THREAT_MODEL.md`,则创建它们,然后将精简版本馈入 `/understand`、自主分析和 `/validate`。除非传入 `--threat-model-refresh`,否则保留现有项目威胁模型;除非显式传入 `--threat-model-use-stale`,否则拒绝过时的回退映射。它还将映射出的未检查流程转换为候选 SARIF,这样扫描器的遗漏不会终止运行。这是操作者拥有的上下文,而非魔法证明:发现结果仍然需要代码证据或预言机支持的确认。参见 `docs/threat-model.md`。
- 阶段 A:该模式实际上是漏洞,还是工具的模式匹配噪声?
- 阶段 B:攻击者需要什么才能触达它,什么会阻碍?
- 阶段 C:代码路径是否实际存在?能否从外部触达?
- 阶段 D:最终判定——这是测试代码吗,是否需要不切实际的前置条件,模型是否在含糊其辞?
- 阶段 E:二进制漏洞利用可行性(当有编译产物可用时)
- 阶段 F:自审——之前的任何阶段是否含糊其辞或自相矛盾?
通过验证的发现结果会生成漏洞利用 PoC 和补丁。最后运行跨发现分析,以找出共享的根本原因和攻击链。
如果你已有来自先前扫描的发现结果,`/validate` 会将同一流水线作为独立步骤运行。
对于编译产物,`/binary <path>` 现在运行证据优先的调查,而不是向操作者倾倒一堆原始逆向工程产物。在底层,它仍然从文件元数据、导入和 radare2 交叉引用构建 SHA-256 绑定的清单、证据账本、上下文映射、检查清单和 SQLite 图。Mach-O 应用还会获得切片清单、bundle 元数据和 Objective-C / Swift 类选择器;高价值伪代码会被持久化,而不是在运行中消失。PE DLL 导出、Windows 驱动分派器和 Linux 内核模块 ioctl 处理程序也被作为各自的入口候选处理,PE 架构从 COFF 头读取而非猜测。然后调查层查询该图,在通用汇聚点线索之前优先排序外部入口,发现声明的辅助/同级二进制文件,并写出分为事实、结构性推断和未证实假设的紧凑报告。Frida 观察、模糊测试崩溃见证、显式 Z3 检查和二进制差异随后可以添加更强的证据。RAPTOR 还保留恢复有界入口到解析器候选所需的内部调用图,因此应用回调可以被缩小到实际调用 `XML_Parse`、`d2i_X509`、`jpeg_read_header` 或其他真实解析器表面的内部函数,而不假装那是污点证明。`/binary trace-parser <run-dir>` 是显式的动态后续步骤:它运行窄范围 Frida 解析器跟踪,然后就地刷新相同的上下文映射、交接、图和调查报告。`/binary investigate --active` 先映射,仅当存在具体 harness 边界时才启动真实模糊测试活动;应用、DLL 和驱动目标则改为获得 harness 或快照步骤。`/binary harness` 为所选入口写出证据支持的 harness 规范,仅当 ABI 或 IOCTL 契约明确时才输出候选源码。它不会从“`memcpy` 存在”蒙混到“这可被利用”:导入、选择器和调用边保持为候选,直到有某种机械性证据证明更多。参见 `docs/binary-analysis.md`。
---
## 软件成分分析
`/sca` 分析项目的依赖和供应链方面。它不仅仅是 requirements 文件的 CVE 查找:RAPTOR 发现清单、锁文件、内联安装命令、工作流依赖和容器/基础镜像包源,然后将它们规范化为单一依赖视图。
扫描使用 OSV 公告、CISA KEV、EPSS、CISA Vulnrichment/SSVC、可达性、漏洞利用证据信号、卫生检查、供应链启发式、许可证策略发现以及可选的 LLM 审查/分类来丰富依赖。它输出 RAPTOR 原生发现结果以及 SBOM 和 CI 友好输出:
- `findings.json` - 规范的 RAPTOR 发现结果
- `report.md` - 人类可读摘要
- `sbom.cdx.json` - 带 VEX 数据的 CycloneDX SBOM
- `findings.sarif` - GitHub/GitLab 代码扫描输出
常用命令:```bash
python3 raptor.py sca --repo /path/to/project
python3 raptor.py sca --repo /path/to/project --no-llm
python3 raptor.py sca --repo /path/to/project --fail-on-severity high --fail-on-kev
python3 raptor.py sca --repo /path/to/project fix
python3 raptor.py sca check PyPI django 4.2.10
有用的子命令包括 fix、check、upgrade、diff、verify、health、render、suppress 和 clean-cache。完整参考请参见 docs/sca.md。
Z3 SMT 集成
RAPTOR 具有两层 Z3 集成(pip install z3-solver)。它是可选的。没有它一切都能正常工作,但有了它结果会更好。
数据流预筛选(CodeQL)
当 CodeQL 产生路径结果时,在进行任何 LLM 调用之前,会检查路径约束的可满足性。可证明不可达的路径会被立即丢弃。对于可达的路径,Z3 会生成具体的候选输入,这些输入会进入分析提示词,因此 LLM 有具体的内容可供推理,而不是抽象的模式。
one-gadget 约束分析(二进制可行性)
在二进制漏洞利用可行性评估期间,Z3 会检查 one-gadget 的寄存器和内存约束在具体崩溃状态下是否可满足。Gadget 按实际可达性而非启发式方法进行排序,因此你可以把时间花在真正可能起作用的 gadget 上。
Z3 已预装在 devcontainer 中。手动安装:pip install z3-solver。
离线运行和在气隙管道中运行
RAPTOR 在 engine/semgrep/rules/ 下的自定义规则完全本地化,无需网络访问即可运行。
对于注册表包(p/security-audit、p/owasp-top-ten 等),缓存目录初始为空。缓存工具(engine/semgrep/tools/cache-packs.py)负责填充:```bash
On a connected machine — update the local cache directly:
python3 engine/semgrep/tools/cache-packs.py update
Or fetch into a zip bundle for airgap transfer:
python3 engine/semgrep/tools/cache-packs.py fetch
→ produces semgrep-cache-YYYY-MM-DD.zip
On the airgapped machine — import the bundle:
python3 engine/semgrep/tools/cache-packs.py import semgrep-cache-2026-07-16.zip
Check what's cached:
python3 engine/semgrep/tools/cache-packs.py list
一旦填充完成,扫描器会将包 ID 解析为本地文件,不再进行网络调用。如果没有缓存,RAPTOR 会在扫描时尝试从 semgrep.dev 获取注册表包;如果处于离线状态,它会优雅地丢弃未缓存的包,仅使用自定义规则运行。
CodeQL 仅在初始设置时需要网络访问,用于下载 CLI 和查询包。安装完成后即可离线运行。
---
## 自定义规则
RAPTOR 附带超过 200 条自定义静态分析规则,经过对抗性测试以消除误报:
- **Semgrep(约 150 条规则)** — 针对 Python、Go、Java 和 JS/TS 的污点追踪和模式规则。涵盖 SQLi、XSS、SSRF、SSTI、命令注入、反序列化、XXE、LDAP/NoSQL 注入、路径遍历、开放重定向、日志/头部注入、eval 注入、ReDoS、原型污染、JWT 配置错误、弱加密、不安全 TLS 以及硬编码密钥。
- **Coccinelle(68 条规则)** — 针对 C/C++ 的结构化匹配。内存安全(双重释放、释放后使用、释放非基指针、释放栈数组、mmap 内存、关闭后使用)、整数缺陷(溢出、符号扩展、双重 sizeof)、资源泄漏(popen/fclose 不匹配、fdopendir 双重关闭)、缓冲区处理(strncpy 缺少 NUL、copy_user 大小不匹配、malloc/strlen 差一错误)、信号处理器安全、API 误用(fcntl 标志域、SIGKILL/SIGSTOP、双重字节交换、inet_ntoa 静态缓冲区)、编译器死存储消除、内核 IS_ERR/PTR_ERR 混淆、格式化字符串注入、TOCTOU 竞态等。
- **CodeQL(8 条查询)** — 针对 C++(格式化字符串注入、整数截断、移动后使用、迭代器失效)和 Java(XXE、不安全反序列化、日志注入、Spring SSRF)的过程间污点追踪。
直接浏览规则:`engine/semgrep/rules/`、`engine/coccinelle/rules/`、`engine/codeql/queries/`。这些规则与 RAPTOR 拉取的 Semgrep 注册表包(始终包含 `p/security-audit`、`p/owasp-top-ten`、`p/secrets`;额外还有按策略组的包如 `p/command-injection`、`p/jwt`、`p/xss`)互为补充——重叠极少。
---
## RAPTOR 如何检查自身
RAPTOR 大量使用自身的安全工具进行自检,但有必要坦诚说明哪些实际上会阻止 PR 合并,哪些只是在后台运行以保持诚实。其中一些是硬性门禁,一些是定时检查,还有一些只是我们保留的基准测试,以便在情况恶化时能够察觉。更详细的分解,包括实际参数和如何复现这些检查,见 `docs/ci-controls.md`。
| 控制项 | 检查内容 | 触发条件 | 配置 / 证据 |
|---|---|---|---|
| Ruff | Python 正确性检查(`F401`、`F811`、`F821`、`F841`) | PR 差异门禁,外加每周全树审计 | `pyproject.toml`、`.github/workflows/lint.yml` |
| Pytest | 快速单元/集成边界、子系统特定层级(通过导入图调度)、提示信封审计 | PR、推送到 `main`、合并队列、定时全量测试套件 | `pytest.ini`、`.github/workflows/tests.yml`、`.github/workflows/nightly.yml` |
| CodeQL Advanced | Python、C/C++ 和 GitHub Actions 代码扫描,带导入图范围收窄 | PR、推送到 `main`、合并队列、每周定时 | `.github/workflows/codeql.yml`、`.github/codeql/codeql-config.yml` |
| 工作流加固 | SHA 固定的第三方 Actions、最小权限、命令元数据检查 | 每次工作流变更和每次 lint 运行 | `.github/workflows/`、`.github/scripts/check_command_metadata.py` |
| 语料库标签检查 | 审计语料库标签模式验证和上游固定版本验证 | PR(变更的标签)、每周全量扫描 | `.github/workflows/corpus-labels.yml` |
| RAPTOR SCA PR 门禁 | PR 引入的依赖和供应链回归 | 清单 / 锁文件 / 工作流变更 | `.github/workflows/sca-pr-gate.yml` |
| RAPTOR SCA 自升级 | 机械式依赖加固和安全升级提案 | 每周定时、手动运行 | `.github/workflows/sca-self-bump.yml` |
| SCA 入侵语料库 | 已知依赖入侵是否仍触发预期信号 | 每周定时、相关 PR 变更 | `test/data/sca-e2e/compromise-corpus/`、`.github/workflows/sca-compromise-check.yml` |
| 仓库不变量检测器 | 死代码 / 错误调用检测、环境变量文档漂移、词汇表护栏、规范 JSON 字节形式、可选依赖导入检查 | PR 门禁(`lint.yml` 的 `repo-invariants` 任务),外加每日扫描 | `.github/workflows/lint.yml`、`.github/workflows/miswiring-scan.yml`、`.github/scripts/*_baseline.json` |
| SCA 校准 + 压力语料库 | 风险评分和解析器覆盖率是否随时间漂移 | 每周 / 每月定时任务 | `packages/sca/data/calibration/`、`.github/workflows/refresh-sca-calibration.yml`、`.github/workflows/sca-stress-sweep.yml` |
| 数据流语料库 | 验证器行为的精确率 / 召回率 / 误报类别追踪 | 开发者运行的基准测试和语料库测试 | `core/dataflow/corpus/`、`core/dataflow/scripts/corpus-metrics` |
| CI 控制文档守卫 | 文档中记录的路径存在、ruff 配置匹配、README 链接到该文档 | PR | `.github/tests/test_ci_controls_docs.py` |
当前未强制执行:`mypy` 已在 `pyproject.toml` 中固定,但不阻止任何操作;Ruff 格式化未强制执行;Semgrep 是 RAPTOR 扫描器表面的一部分,但我们尚未有专门的“用 RAPTOR 扫描 RAPTOR”的 Semgrep 工作流。
---
## 使用不同的 LLM
RAPTOR 有两个独立的模型层,在更改任何内容之前,了解两者的工作方式很有必要。
**编排层**是 Claude Code——但仅用于交互式 `raptor` shell(这个对话式、斜杠命令层)。CLAUDE.md、技能和命令都在那里作为 Claude Code 指令运行。要更改编排该层的 Claude 模型,请使用 Claude Code 的 `--model` 标志或会话内的 `/model` 命令。如果你完全不想要这一层,请参阅下方的[完全独立运行](#running-fully-standalone-no-claude-code)。
**分析调度层**是分析单个漏洞发现的 LLM。这与编排层是分开的,可以是任何受支持的提供商。在 `~/.config/raptor/models.json` 中配置它:```json
{
"models": [
{
"provider": "anthropic",
"model": "claude-opus-4-6",
"api_key": "sk-ant-...",
"role": "analysis"
},
{
"provider": "openai",
"model": "gpt-5.4",
"api_key": "sk-...",
"role": "analysis"
},
{
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"api_key": "sk-ant-...",
"role": "aggregate"
}
]
}
或者跳过配置文件,直接设置环境变量。RAPTOR 会自动检测它们:```bash export ANTHROPIC_API_KEY=sk-ant-... # Anthropic Claude export OPENAI_API_KEY=sk-... # OpenAI export GEMINI_API_KEY=... # Google Gemini export MISTRAL_API_KEY=... # Mistral export OLLAMA_HOST=http://localhost:11434 # Local Ollama
模型角色让你可以为不同任务分配不同的模型:
| 角色 | 作用 |
|------|-------------|
| `analysis` | 验证并分析每个发现(阶段 A-F) |
| `code` | 编写漏洞利用 PoC 和补丁代码 |
| `consensus` | 对真阳性进行第二意见投票 |
| `aggregate` | 可选。在确定性多模型关联之上由 LLM 编写的叙述性综合,写入 `aggregation.json` 和最终的 `agentic-report.md` |
| `fallback` | 当主模型失败或达到速率限制时使用 |
如果未设置任何角色,列表中的第一个模型将处理所有事务。对于多模型
源代码分析,配置两个或更多 `analysis` 模型——默认情况下你将获得
确定性关联。`aggregate` 角色是可选的,会在其上添加
LLM 编写的摘要:```bash
python3 raptor.py agentic --repo /code \
--model claude-opus-4-6 \
--model gpt-5.4 \
--aggregate claude-sonnet-4-6
预算控制:```bash
Cap analysis-layer LLM spend at $5 for this run (default: $10)
python3 raptor.py agentic --repo /code --max-cost-usd 5.00
Ollama 在分析方面表现良好;漏洞利用/补丁代码生成的可靠性取决于模型规模和量化程度,而非本地模型的固定属性——请参阅 LLM 指南中的 [质量权衡](https://github.com/gadievron/raptor/blob/main/llm.md#quality-tradeoffs),并查看 `/scorecard` 以了解你的具体模型实际测量的内容。
### 完全独立运行(无需 Claude Code)
`bin/raptor`——带有横幅和斜杠命令的交互式 shell,即这一对话层——会直接 exec 进入 Claude Code CLI,并且始终需要自己的登录。但其底层的实际机制并不需要:`python3 raptor.py <mode>` 是一个普通的 Python CLI,完全不依赖 Claude Code。```bash
# No `claude` process involved at any point
python3 raptor.py doctor # status check -- explicitly "no claude needed"
python3 raptor.py agentic --repo /path/to/code # scan -> dedup -> analysis
python3 raptor.py scan --repo /path/to/code
libexec/raptor-* 脚本(包括 raptor-project-manager —— raptor.py 没有 project 模式,项目管理仅存在于该脚本中)同样是纯 Python 脚本,但除非设置了 CLAUDECODE(在 Claude Code 会话中会自动为 true)或显式设置了 _RAPTOR_TRUSTED=1,否则它们会拒绝运行——这是一道防护措施,防止在启动器环境清理之外被调用。若需独立使用,请设置一次:```bash
export _RAPTOR_TRUSTED=1
libexec/raptor-project-manager create myapp --target /path/to/code libexec/raptor-project-manager use myapp python3 raptor.py agentic --repo /path/to/code # picks up the active project automatically libexec/raptor-project-manager status libexec/raptor-project-manager findings
将 `models.json` / `OLLAMA_HOST` 指向本地 Ollama 实例(见上文),整条路径就永远不会与 Anthropic 通信——适用于气隙机器或仅本地硬件。你会失去对话式斜杠命令层(即本聊天);扫描/分析/利用流水线本身不受影响。
### 快速层短路 + 模型记分卡
当你的分析层模型有同提供商的更便宜同级模型时(Anthropic Opus → Haiku、OpenAI 5.x → 4o-mini、Gemini Pro → Flash-Lite、Mistral Large → Small),RAPTOR 会将其用作接入基底的消费者上的预过滤器(目前是 codeql;SCA 及其他后续接入项)。便宜模型只会在**高置信度假阳性**上短路;模糊案例和高置信度真阳性始终运行完整分析。信任按 `(model, decision_class)` 单元累积——RAPTOR 记录便宜模型与完整分析的一致性,只有当该单元漏报率的 Wilson 95% 上界降至 5% 或以下时才会短路。
要查看你的模型擅长什么,使用 `/scorecard`(或直接:`libexec/raptor-llm-scorecard list`)。记分卡是全局的(经验教训跨项目保留),并持久化在 `out/llm_scorecard.json`。
---
## 项目
没有项目时,每次运行都会在 `out/` 下获得自己的带时间戳目录。有项目时,所有内容都归入一处,你会获得合并的发现、覆盖率跟踪以及运行之间的差异。```bash
/project create myapp --target /path/to/code -d "Short description"
/project use myapp
/scan
/understand --map
/validate
/project status # all runs, pass/fail, timestamps
/project findings # merged findings across all runs
/project findings --detailed # per-finding detail
/project coverage --detailed # which files were reviewed
/project diff myapp run1 run2 # compare two runs
/project report # full merged report
/project clean --keep 3 # remove old runs, keep the last 3
/project export myapp /tmp/myapp.zip
/project none # clear active project
架构
RAPTOR 分为两层。
Python 执行层(raptor.py、packages/、core/、engine/)负责繁重的工作:运行 Semgrep 和 CodeQL、管理子进程、解析 SARIF、对发现结果去重、调度 LLM API 调用、跟踪成本、写入输出文件。它不做决策,只负责执行。
Claude Code 决策层(.claude/、tiers/、CLAUDE.md)负责做出判断:优先处理哪些发现结果、如何解读结果、攻击场景是什么、漏洞利用是否现实可行。以 Claude Code 技能、命令和代理的形式实现,并逐步加载。```
CLAUDE.md always loaded -- bootstrap, routing, security rules
.claude/commands/ slash commands (/agentic, /scan, /validate, etc.)
.claude/skills/ methodology detail, loaded on demand
tiers/ adversarial thinking, recovery, expert personas
.claude/agents/ specialist sub-agents (offsec, crash analysis, forensics)
拆分意味着你可以从 CI 流水线中运行 Python 层(`python3 raptor.py scan --repo ...`),无需 Claude Code 即可获得结构化的 SARIF 输出,或者以完整的智能体工作流交互式运行它。
---
## OSS 取证
`/oss-forensics` 使用来自多个来源的证据调查公共 GitHub 仓库:GitHub API、GH Archive(通过 BigQuery 获取不可变的事件历史)、Wayback Machine 以及本地 git 历史。它运行一条结构化流水线,从证据收集到假设形成,最终生成取证报告。
需要 `GOOGLE_APPLICATION_CREDENTIALS` 以访问 BigQuery。详情请参见 `.claude/commands/oss-forensics.md`。
---
## 专家角色
八个专家角色可按需使用。当你希望对某个发现或特定技术获得不同视角时,加载其中一个:```
Exploit Developer (Mark Dowd) Exploit PoC generation
Crash Analyst (Charlie Miller / Halvar Flake) Crash analysis and exploitability assessment
Security Researcher General adversarial code review
Patch Engineer Secure fix generation
Penetration Tester Realistic attack scenario assessment
Web Researcher (James Kettle) Web endpoint research (smuggling, cache poisoning, SSRF)
Fuzzing Strategist Corpus design and triage
Binary Exploitation Specialist ROP, heap, and memory corruption
告诉 Claude 使用哪一个,例如“使用 Binary Exploitation Specialist”。
文档
完整索引见 docs/README.md。关键指南:
| 文件 | 内容 |
|---|---|
docs/commands.md | 完整的斜杠命令参考,包含每个标志 |
docs/architecture.md | 代码库结构和目录树 |
docs/llm.md | LLM 提供商配置、Bedrock、多模型工作流 |
docs/sandbox.md | 进程隔离:配置文件、Landlock、命名空间 |
docs/troubleshooting.md | 自检、沙箱设置错误(Ubuntu 24.04+ 上的 mount-ns/uidmap)、EDR 交互 |
docs/agent-security.md | 代理能力、工具边界、网络控制、人工审批 |
docs/audit.md | 系统性代码审查:假设、工具、策略、关卡 |
docs/validation.md | 可利用性验证流水线(阶段 0--1) |
docs/static-analysis.md | Semgrep 和 Coccinelle 规则 |
docs/codeql.md | CodeQL 集成与自主分析 |
docs/binary-analysis.md | 二进制 oracle、/binary、漏洞利用可行性 |
docs/fuzzing.md | AFL++ 和 libFuzzer |
docs/crash-analysis.md | 自主崩溃根因分析 |
docs/sca.md | 软件成分分析 |
docs/frida.md | 动态插桩 |
docs/security.md | RAPTOR 自身的安全模型 |
docs/ci-controls.md | CI 控制、工作流和基准证据 |
docs/threat-model.md | 按项目威胁模型功能 |
docs/python-cli.md | 用于脚本编写和 CI 的 Python CLI 参考 |
docs/concepts.md | 核心概念:双层模型、发现生命周期、选择命令 |
docs/agentic.md | 自主工作流:/agentic 流水线、增强标志、多模型 |
docs/sage.md | SAGE 持久内存:设置、HMAC 密钥、CPU/GPU、用例 |
docs/dependencies.md | 外部工具、版本和许可证 |
tiers/personas/README.md | 专家角色参考 |
贡献
RAPTOR 是开源的。如果你想贡献,以下是不错的起点:
- Web 扫描器的浏览器引擎爬取和 DOM XSS 覆盖(Playwright 已固定但未使用)
- 注解驱动框架的 SSRF 规则覆盖(Spring
@RequestParam、FastAPI 类型化参数)—— semgrep 无法匹配这些来源,因此欢迎替代方法 - YARA 签名生成
- 移植到其他 AI 编码工具(Cursor、Windsurf、Copilot、Cline)
- 更好的固件分析覆盖
- 任何你认为缺失的内容
发布版本标记为 vX.Y.Z,由 CI 自动构建。提交前缀决定变更日志的内容:feat: 表示新功能,fix: 表示错误修复,security: 表示安全变更,docs: 表示文档。任何没有前缀的内容都会归入“其他变更”。不要求严格约定,但这样有帮助。
提交拉取请求。在 Prompt||GTFO Slack 的 #raptor 频道与我们交流: https://join.slack.com/t/promptgtfo/shared_invite/zt-3v2b4sll3-SfyzFRw2lykx_XQX7F3uNQ
许可证
MIT -- Copyright (c) 2025-2026 Gadi Evron, Daniel Cuthbert, Thomas Dullien (Halvar Flake), Michael Bargury, John Cartwright.
完整文本见 LICENSE。商业使用前请审查所有依赖项的许可证——尤其是 CodeQL 不允许商业使用。
Issues: https://github.com/gadievron/raptor/issues
Python 依赖
RAPTOR 使用 pyproject.toml 和 uv.lock 作为 Python 依赖的
事实来源。已检入的 requirements.txt 保留作为
偏好 pip install 的用户的兼容性导出。
有用的安装:```bash uv sync --locked # core runtime uv sync --locked --group dev # tests + linting uv sync --locked --extra web # /web scanner support uv sync --locked --extra "web smt llm sage" # optional stacks
将 `/web`、Z3、SAGE 和云服务商 SDK 保留为可选附加项,可避免让默认的 RAPTOR 安装变得比实际所需更臃肿、更脆弱。