关于 fp-check
用于核实具体疑似缺陷和漏洞报告的安全审查技能。它引导分析人员厘清问题、选择验证深度、收集证据,并汇总误报与真实问题。
主要功能
- 01厘清漏洞主张
- 02选择标准或深度验证
- 03追踪数据流和执行上下文
- 04审查多个发现及漏洞链
- 05汇总真实问题与误报
适用场景
- 01验证已报告的漏洞
- 02检查疑似缺陷是否可利用
- 03分诊多个安全发现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ trailofbits/ skills --skill fp-check安装后在 Claude Code 中输入/fp-check确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/trail-of-bits-mark.svgreferences/bug-class-verification.mddeep-verification.mdevidence-templates.mdfalse-positive-patterns.mdgate-reviews.mdstandard-verification.md详细介绍
误报检查
适用场景
- “这个错误是真的吗?”或“这是真阳性吗?”
- “这是误报吗?”或“验证这个发现”
- “检查这个漏洞是否可利用”
- 任何要求验证或确认某个具体疑似错误的请求
不适用场景
- 查找或搜寻错误(“找出错误”“安全分析”“审计代码”)
- 针对风格、性能或可维护性的一般代码审查
- 功能开发、重构或非安全任务
- 用户明确要求快速扫描,不需要验证
应当拒绝的自我辩解
如果你发现自己在想以下任何一种理由,请立即停止。
| 自我辩解 | 错误之处 | 必须采取的行动 |
|---|---|---|
| “快速分析剩余的错误” | 每个错误都必须经过完整验证 | 返回任务列表,通过所有阶段验证下一个错误 |
| “这个模式看起来很危险,所以它就是漏洞” | 识别模式不等于分析 | 在得出任何结论前,完成数据流追踪 |
| “为了提高效率,跳过完整验证” | 不允许只做部分分析 | 按选定的验证路径执行所有步骤 |
| “代码看起来不安全,不追踪数据流就报告” | 看起来不安全的代码可能经过上游验证 | 从源头到汇点追踪完整路径 |
| “类似代码在其他地方存在漏洞” | 每种上下文的验证、调用方和防护措施都不同 | 独立验证此处的具体实例 |
| “这显然是严重问题” | LLM 容易倾向于发现错误并高估严重性 | 完成反方审查,并用证据证明 |
步骤 0:理解问题主张和上下文
开始分析前,用自己的话重述这个错误。如果无法清晰重述,请向用户澄清。有一半的误报会在这一步被排除——准确重述后,问题主张可能会显得自相矛盾。
记录:
- 具体声称存在什么漏洞?(例如:“当
content_length超过 4096 时,parse_header()中发生堆缓冲区溢出”) - 声称的根本原因是什么?(例如:“第 142 行的
memcpy前缺少边界检查”) - 声称的触发条件是什么?(例如:“攻击者发送带有超大 Content-Length 标头的 HTTP 请求”)
- 声称的影响是什么?(例如:“通过可控堆损坏实现远程代码执行”)
- **威胁模型是什么?**这段代码以何种权限级别运行?是否经过沙箱隔离?触发此错误前,攻击者已经能做什么?(例如:“未认证的远程攻击者与拥有特权的本地用户”;“在 Chrome 渲染器沙箱中运行”与“以 root 身份运行且未经过沙箱隔离”)
- **错误类别是什么?**对错误进行分类,并查阅 bug-class-verification.md,了解该类别特有的验证要求,以及对以下通用阶段的补充要求。
- 执行上下文:正常执行期间,何时以及如何进入此代码路径?
- 调用方分析:哪些函数会调用此代码?它们对输入施加了哪些约束?
- 架构上下文:这是否属于一个具有多层防护措施的大型安全系统?
- 历史上下文:此代码区域近期是否有变更、已知问题或过往安全审查?
路径选择:标准验证与深度验证
完成步骤 0 后,选择验证路径。
标准验证
以下条件全部满足时使用:
- 漏洞主张清晰、具体(不含糊或有歧义)
- 涉及单个组件——错误路径中不存在跨组件交互
- 错误类别明确且广为人知(缓冲区溢出、SQL 注入、XSS、整数溢出等)
- 触发过程中不涉及并发或异步操作
- 从源头到汇点的数据流直接明了
遵循 standard-verification.md。无需追踪任务;按顺序逐项完成线性检查清单,并在检查过程中记录发现。
深度验证
满足以下任一条件时使用:
- 存在可能被多种方式解读的模糊声明
- 跨组件漏洞路径(数据流经 3 个或更多模块或服务)
- 触发机制中存在竞态条件、TOCTOU 或并发问题
- 没有明确规范可供核验的逻辑漏洞
- 标准验证未得出结论或已升级处理
- 用户明确要求全面验证
遵循 deep-verification.md。将每个阶段作为一项任务进行跟踪,并明确标注依赖关系;使用插件的分析 Agent 执行各阶段。
默认方式
从标准验证开始。标准验证内置了两个升级检查点,若复杂度超出线性检查清单,则会转入深度验证。
批量分类
同时验证多个漏洞时:
- 先对所有漏洞执行步骤 0——重新表述每项声明通常能立即排除明显的误报
- 独立为每个漏洞选择验证路径(部分漏洞可采用标准验证,其他漏洞则采用深度验证)
- 先处理所有分配到标准验证的漏洞,再处理深度验证的漏洞
- 验证完所有漏洞后,检查是否存在漏洞利用链——单独未能通过关卡审查的发现可能组合成可行攻击
最终摘要
处理完所有疑似漏洞后,提供:
- 数量:X 个真阳性,Y 个假阳性
- 真阳性列表:每项简要说明漏洞
- 假阳性列表:每项简要说明排除原因
参考资料
评论
支持 Markdown