RAPTOR — 自主攻防安全研究框架
概述
RAPTOR(Research Autonomous Penetration Testing and Offensive Research)是一个全功能的自主安全研究框架,集成扫描、模糊测试、智能体分析、漏洞可利用性验证、崩溃根因分析和开源取证等能力。
安全操作原则:安全操作(安装、扫描、读取、生成)直接执行;危险操作(应用补丁、删除、git push)先询问。
适用场景
- 对目标代码库进行自动化安全审计
- 执行 Web/API/二进制漏洞扫描与模糊测试
- 验证漏洞发现的可利用性
- 进行崩溃根因分析和崩溃复现
- 开源项目取证调查(GitHub 取证)
- 构建跨运行的项目级安全分析工作区
使用方法
基础命令
| 命令 | 用途 |
|---|---|
/scan |
安全扫描 |
/fuzz |
模糊测试 |
/agentic |
智能体全流程分析(扫描→去重→准备→分析) |
/validate |
漏洞可利用性验证管线 |
/understand |
深度代码理解:攻击面映射、数据流追踪、变体搜索 |
/crash-analysis |
自主崩溃根因分析 |
/oss-forensics |
GitHub 取证调查 |
/project |
项目管理:创建、列表、状态、覆盖度、报告 |
项目工作区
/project create myapp --target /path/to/code -d "描述"
/project use myapp
/scan # 输出到项目目录
/project status # 显示所有运行记录
/project findings # 显示跨运行合并发现
/project report # 合并视图
运行生命周期
所有分析命令使用生命周期桩来创建输出目录并跟踪状态:
# 开始工作
libexec/raptor-run-lifecycle start <command> --target <resolved_target> [--out <dir>]
# 成功完成
libexec/raptor-run-lifecycle complete "$OUTPUT_DIR"
# 失败
libexec/raptor-run-lifecycle fail "$OUTPUT_DIR" "错误描述"
默认目标目录解析顺序
- 活跃项目目标:自动读取
.active符号链接 - 调用者目录:
$RAPTOR_CALLER_DIR环境变量 - 询问用户获取目标路径
> 不要使用当前工作目录作为后备方案——它总是 RAPTOR 仓库目录。
核心能力详解
智能体分析(/agentic)
全流程分析管线:扫描 → 去重 → 准备 → 分析(含验证方法论)。
--sequential:绕过并行编排,顺序执行--understand:扫描前先映射代码库--validate:对可利用发现运行完整验证管线--model:可重复指定,多模型独立分析后关联结果--consensus/--judge/--aggregate:可选的审查/综合模型
漏洞可利用性验证(/validate)
验证漏洞发现是否真实、可达、可利用。
阶段:0 → A → B → C → D → E → F → 1
输出:out/exploitability-validation-<timestamp>/validation-report.md
代码理解(/understand)
提供深度、对抗性的代码理解。
--map:构建上下文——入口点、信任边界、汇聚点--trace <entry>:追踪单条数据流(源→汇聚,完整调用链)--hunt <pattern>:在整个代码库中搜索模式变体--teach <subject>:深度解释框架/库/模式
崩溃分析(/crash-analysis)
自主 C/C++ 崩溃根因分析,使用 rr 确定性重放调试。
用法:/crash-analysis <bug-tracker-url> <git-repo-url>
依赖:rr、gcc/clang(含 ASAN)、gdb、gcov
开源取证(/oss-forensics)
基于证据的公开 GitHub 仓库取证调查。
用法:/oss-forensics <prompt> [--max-followups 3]
依赖:GOOGLE_APPLICATION_CREDENTIALS(用于 BigQuery 查询 GH Archive)
二进制可达性分析
自动检测构建产物中的调试二进制,通过 DWARF + nm 标注函数级别可达性:
symbol_present/inlined/folded:函数在编译后存活absent:编译器/链接器移除了该函数
安全注意事项
- 环境净化:
RaptorConfig.get_safe_env()剥离可能被 shell 求值的环境变量 - 文件路径注入:永远不要将扫描仓库的文件路径插值到 shell 命令字符串中
- 不受信任的仓库:使用基于列表的
subprocess参数 - Python 路径安全:除了
os.environ["RAPTOR_DIR"]外,永远不要添加任何内容到sys.path
常见问题与陷阱
| 问题 | 解决方案 |
|---|---|
/start 失败(非零退出) |
立即停止,向用户报告错误 |
| 输出路径未正确生成 | 使用生命周期桩自动解析,不要手动构造 |
| 管道输出被截断 | 不要添加 tail/head/grep/2>&1 等过滤器 |
| 二进制分析误报 | 使用 --no-binary-oracle 禁用,或通过 --binary 提供显式二进制 |
| 远程 OLLAMA 位置泄露 | 永远不要在代码、注释、日志中暴露 |
验证清单
- [ ] 目标路径解析正确(项目目录 > 调用者目录 > 询问用户)
- [ ] 运行生命周期已正确启动(
start成功返回OUTPUT_DIR) - [ ] 输出文件保存在正确的输出目录中
- [ ] 未对命令输出添加任何管道/过滤器/包装器
- [ ] 危险操作(补丁、删除、推送)已先征求用户确认