mcpField
F
fp-check

fp-check

github.com/trailofbits安全7.9k7.1k 次安装今天更新
代码仓库

关于 fp-check

用于核实具体疑似缺陷和漏洞报告的安全审查技能。它引导分析人员厘清问题、选择验证深度、收集证据,并汇总误报与真实问题。

主要功能

  1. 01厘清漏洞主张
  2. 02选择标准或深度验证
  3. 03追踪数据流和执行上下文
  4. 04审查多个发现及漏洞链
  5. 05汇总真实问题与误报

适用场景

  1. 01验证已报告的漏洞
  2. 02检查疑似缺陷是否可利用
  3. 03分诊多个安全发现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill fp-check

安装后在 Claude Code 中输入/fp-check确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
bug-class-verification.md
deep-verification.md
evidence-templates.md
false-positive-patterns.md
gate-reviews.md
standard-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 执行各阶段。

默认方式

从标准验证开始。标准验证内置了两个升级检查点,若复杂度超出线性检查清单,则会转入深度验证。

批量分类

同时验证多个漏洞时:

  1. 先对所有漏洞执行步骤 0——重新表述每项声明通常能立即排除明显的误报
  2. 独立为每个漏洞选择验证路径(部分漏洞可采用标准验证,其他漏洞则采用深度验证)
  3. 先处理所有分配到标准验证的漏洞,再处理深度验证的漏洞
  4. 验证完所有漏洞后,检查是否存在漏洞利用链——单独未能通过关卡审查的发现可能组合成可行攻击

最终摘要

处理完所有疑似漏洞后,提供:

  1. 数量:X 个真阳性,Y 个假阳性
  2. 真阳性列表:每项简要说明漏洞
  3. 假阳性列表:每项简要说明排除原因

参考资料

  • 标准验证 — 面向简单漏洞的线性单次检查清单
  • 深度验证 — 面向复杂漏洞的完整任务编排
  • 关卡审查 — 六个强制关卡及判定格式
  • 按漏洞类型验证 — 针对内存损坏、逻辑漏洞、竞态条件、整数问题、加密、注入、信息泄露、DoS 和反序列化的分类验证要求
  • 误报模式 — 常见误报模式的 13 项检查清单及警示信号
  • 证据模板 — 用于数据流、数学证明、攻击者控制和反方审查的文档模板

评论

支持 Markdown