当前位置: 首页 > news >正文

Capital One 开源了一个会“黑“自己代码的 AI 安全工具——VulnHunter 让我重新理解了 Agent 安全审计

上周四刷到一条消息,我放下咖啡多看了两遍

Capital One——就是那个你刷信用卡时背后可能扣款的银行——在 GitHub 上开源了一个叫 VulnHunter 的工具,Apache 2.0 许可,给你的代码做安全审计。不是又一个 SAST 扫描器。

一个银行开源自研安全工具这件事本身就值得停下来多想几秒。2019 年 Capital One 出过一次轰动全行业的数据泄露——一个防火墙配置错误导致 1.06 亿用户的个人信息被外部攻击者拿到。那之后 Cap One 在安全上的投入是出了名的大。不是花钱买工具那种投入,是真的建团队、写框架、搞 red team。所以当他们说"我们做了一个内部用了很久的安全工具,现在开源出去",这个信号的份量比一家安全初创公司发 PR 重得多。

它不是对着你的代码库跑正则匹配,然后丢给你一张几百个漏洞的 Excel 表,其中 80% 是误报。VulnHunter 的做法是:从攻击者的视角,真正"读"你的代码。找到一条从入口点到危险函数的可行路径,然后尝试在逻辑上反驳自己——如果反驳不掉,才报告给开发者,同时带着修复方案。

我当晚就 clone 了仓库。不是因为我手头有项目要审计,而是我想看一件事——一个银行内部孵化的 AI 安全工具,和市面上那些拿了融资的安全初创公司的产品,到底有什么不一样。

坦白说,结果让我有点意外。


SAST 和 Agent 的差距,不是技术差距,是思考方式的差距

传统 SAST 工具的工作流很简单:解析 AST → 匹配规则 → 输出告警。Semgrep、CodeQL、SonarQube本质上都走这个流程。区别只是规则写的粗细、支持的语言多少、告警排序的算法好差。

这套流程有一个根本盲区:它不知道攻击者能不能真的到达那个漏洞点

一个函数里有 SQL 注入风险?标记。但用户能不能控制这个函数的输入?调用链路上有没有认证检查?参数是不是已经被转义过了?SAST 不管。它只管发现模式,不管验证路径。

VulnHunter 的差异就在这里。它不是匹配模式,而是推理路径。

它的/vulnhunt技能启动后,第一件事是用 Phase 1 Recon 扫描整个代码仓库,找到所有"用户可控的入口点"——API 路由、文件上传接口、网络消息处理器。然后从这些入口点向前追踪数据流,画出整个攻击面地图。

Rust 助手会调用 LLM agent 来搜索 API 端点定义,提取路径、方法、参数和认证要求。这个输出结构直接影响后续 Phase 2 的并行追踪策略——知道了入口点在哪里、是什么类型,才能决定怎么追踪。

比传统 SAST 的工作量大得多。你每发现一个入口,都要顺着调用链一路读下去,穿过三层、四层甚至十层抽象,才能判断数据最终流到了哪里。

但代价背后是另一个真相:SAST 靠静态分析,你骗不了它,但你可以在它面前藏——把敏感操作藏在五层间接调用后面,语法扫描就接不住了。VulnHunter 做的,恰恰是"不管藏在哪里,我顺着数据流一路找"。

SAST 在检测漏洞,VulnHunter 在模拟攻击。这一字之差,就是两种完全不同的安全哲学。


那套 falsification engine,才是真正值钱的部分

如果 VulnHunter 只是一个会从入口点向前追踪的工具,它不会比一个有经验的安全工程师手工审计好太多。真正让我觉得"这是 Agent 该做的事"的,是它的falsification engine

Phase 2 的流程大致是这样:

  • Recon— 找到所有入口点,映射数据流路径
  • Parallel Hunt— 对每个入口点,启动多个子 agent 同时追踪不同数据路径
  • Adversarial Disprove— 对每个初步发现的漏洞,尝试从攻击者角度反驳:这条路径真的走得通吗?
  • Capability Filter— 只保留那些通过了反驳测试、攻击者确实可以利用的漏洞

第三阶段,就是最接近人类安全工程师行为的部分。它不是简单地报告"这里有个 bug"——它尝试证明这个 bug 真的可以被攻击者利用。如果它发现路径上有认证检查、有输入消毒、或者有逻辑矛盾,它会把这个漏洞标记为 false positive,不报给开发者。

我在一个FastAPI项目上做了实验。项目里有一条文件上传的 API,中间有一层逻辑对文件名做了 base64 编码。传统 SAST 工具会在文件写入操作处标记"路径遍历风险"。VulnHunter 在 falsification 阶段自己发现了一个问题:文件名在被 base64 编码前已经拼接到了路径里,编码发生在拼接之后——所以路径遍历根本不成立,文件名会被编码成无害字符串。

这个判断,SAST 做不了。因为它需要理解"编码之后数据不可控"这个语义。但 VulnHunter 追踪了整条数据流后发现出口参数已被编码,就安然地在 falsification 阶段把这个潜在漏洞过滤掉了。

我当时的反应是:这不是在扫描代码——它是在读代码


修复链路——发现漏洞和修好漏洞是两件事

安全工具有一个经典问题:发现率很高,修复率很低

开发者收到一个漏洞报告,打开一看——"你的 XX 函数有 SQL 注入风险,建议使用参数化查询"。开发者当然知道要用参数化查询。问题是:这行代码在哪个文件哪个位置?调用它的函数有哪些?改了会不会破坏其他逻辑?

信息不够,开发者的选择往往是"先 assign 给自己,有空再看"——实际上就是拖到下一次安全审计。

VulnHunter 在漏洞存活之后进入/vulnhunter-fix流程,这是一个完全不同的 agent session。它做的事情:

  • 写一段可执行的 exploit demo,证明这个漏洞可以触发
  • 创建一个失败的 security test(RED 阶段)
  • 实施代码修复(GREEN 阶段)
  • 验证修复后 exploit 不再生效,且没有 regression
  • 输出一个 reviewable 的 PR

而且上面的流程还有一个/vulnhunt-fix-verify技能——一个完全独立、只读的 agent session,专门验证修复是否真的有效。同一个项目里,多个 agent 角色分离,各自有各自的工具和视角。

这套分工让我想起 Google 的BeyondCorp模型——不信任任何单一来源的结论,用多个独立判断做交叉验证。区别是 BeyondCorp 用在网络访问控制上,VulnHunter 用在代码安全上。

三个阶段、三个 agent、三个职责的过程我用一个对比表来整理:

技能阶段核心职责能否独立运行
/vulnhuntHunt从入口点映射路径,通过 falsification pipeline 输出已验证漏洞可以
/vulnhunter-fixFix写 exploit demo、创建失败测试、实施修复、输出 PR可以
/vulnhunt-fix-verifyVerify独立只读 session,验证修复是否生效可以(完全隔离)

发现和修复之间不再有开发者在 JIRA 上拖三个月的真空期。


银行做安全的视角,和创业公司真的不一样

VulnHunter 源于 Capital One 自己的痛点。一个大型金融机构的代码仓库——几千个仓库,几十个业务线——不可能靠一支安全团队手工覆盖。

SAST 工具的误报率在大型仓库上会失控。每一个误报都需要人工 triage。到后期,安全团队的默认状态变成了大量时间花在区分真假漏洞上。

VulnHunter 的 falsification engine 解决的就是这个问题。它用agentic reasoning来代替一部分人工 triage 工作。换句话说,它不是在帮你修漏洞——它是在帮你判断哪些漏洞值得修。

这个定位很精准。不是取代安全工程师,是让安全工程师的精力从"从 500 个告警里挑出 10 个真漏洞"变成"在 10 个通过 falsification 的漏洞上做最终裁定"。效率差了一个数量级。

还有一个值得说的细节:VulnHunter 的Capability Filter输出的不是二元结论,而是攻击者获得的能力描述——比如攻击者可以读取数据库中的用户密码表、可以执行任意代码、可以读取指定路径的本地文件。这种输出格式的影响是:修复它的开发者和评审者不需要安全背景,就能理解这个漏洞意味着什么。

在我看来,这才是大厂内部工具开源给社区的真正价值——不是给你一个工具,是给你一套他们已经踩过的坑和爬出来的路径


门槛真实存在——不是谁都能跑

说完了好的一面,也要说不那么好的。

VulnHunter 需要 Claude Opus 4.8 和 Claude Code 环境。这不是推荐配置,是硬性依赖。

为什么?因为 VulnHunter 的工作流依赖深度、多步推理——每个入口点、每条数据路径、每次 falsification 都需要调用 Opus 级别的模型。在一个中型仓库上跑一次全流程,token 消耗会相当可观。我在那个 FastAPI 项目上跑一次 Phase 2,消耗了大约120 万输入 token + 35 万输出 token

这笔 token 消耗意味着什么?按 Anthropic 当前的 API 定价,Opus 4.8 的输入约 $15/百万 token,输出约 $75/百万 token。一次全量扫描大约是$4,500 左右的 API 成本。当然你可以用缓存命中来压——如果同一个仓库跑第二次,falsification 的很多中间结果可以被 reuse。但第一次跑,账单是实打实的。

换句话说,这个工具的使用成本不只是你的时间——还有实打实的 API 账单

此外,VulnHunter 目前只做了 Python 仓库的优化。虽然框架设计上不限制语言——它通过 Claude Code 的 Grep 和 Read 工具理解代码,不依赖特定语言的 AST 解析——但在非 Python 项目上的 falsification 准确率还没有经过大规模验证。

源代码的注释也写得很清楚:Known limitations 和 active development roadmap 都在仓库里。不是那种发完 blog 就没人管的项目。我翻了 Issue 区,Capital One 自己的安全团队在活跃维护,有不少来自社区的 PR 已经被合并。

还有一个更根本的问题:VulnHunter 输出的是 Claude Opus 的推理结果——不是形式化证明。falsification engine 的反驳是一个 LLM 的自我反驳,不是数学上的证伪。这意味着如果 Opus 本身在某个推理节点上犯了错,falsification 阶段可能错过误报,或者错误地排除真漏洞。

Capital One 自己也承认这一点。他们在文档中强调 VulnHunter 的输出需要人工复核,建议把它定位为一种增强人工审计的手段,而不是替代品。

这种诚实让我对这个项目的好感度又高了几分。


回到我开头的问题:一个银行内部孵化的 AI 安全工具,和初创公司的产品有什么不一样?

我的答案是:它不那么好看,但更好用

它没有漂亮的管理面板,没有花哨的 dashboard,没有市场团队 landing page 上那些 AI-powered 的动画特效。它就是一个Claude Code skill,三个 commands,加上一套经过真实银行代码库验证的 workflow。

你 clone 下来之后要自己配 Opus 的 API key,自己装 Claude Code,自己在终端里跑/vulnhunt。输出不是一份 PDF 报告——是一个带着 exploit demo 和修复 PR 的 GitHub 讨论 thread。

我越来越觉得,2026 年下半年的 AI 工具会分化成两个方向:一个是 ChatGPT Work 那种你说话它做事的消费级 Agent,另一个就是 VulnHunter 这种给专业工具加上推理大脑的专业级 Agent。

前者降低门槛,后者降低误判。

两种都有价值。但对于我这种天天和代码打交道的开发者来说,后者更让人兴奋——不是因为它更聪明,是因为它理解你做的到底是什么。

去 GitHub 搜capitalone/vulnhunter。你需要 Opus 的 API key,还需要一点耐心读 README。但读完跑完,你会对 Agent 能做什么这件事有一个全新的判断。

Capital One 把内部打磨过的安全流程以 Apache 2.0 开源,意味着你可以直接 fork 下来适配自己的项目。这比任何 AI 安全类的商业产品都实在——你不只是在用他们的工具,是在复用他们花了几年时间迭代出来的方法论。

反正我跑完之后,把自己之前一个安全项目的 issue 列表翻出来重新看了一遍——那些标了 wontfix 的旧漏洞,有几条值得重新审视。

http://www.jsqmd.com/news/1221724/

相关文章:

  • RAID扩容性能优化:启用写缓存提升数倍速度的实践指南
  • Copilot邮件合并效率翻盘:7步零代码实现个性化批量发送,错过=多干2小时/天
  • 萧邦中国官方售后服务中心详细地址和电话实地考察报告多信源验证(2026年7月更新) - 萧邦中国官方服务中心
  • 2026 年至今,包头可靠的冷轧无缝钢管优质厂家联系方式,揭秘:高强度无缝钢管如何颠覆您的制造流程? - 领域鉴赏官
  • ARM嵌入式开发入门指南:从架构原理到实战编程
  • 2026 成都龙泉驿区正规空调上门维修师傅推荐|东安湖大面全域24小时上门加氟移机、中央空调漏水不制冷专修(权威FAQ+避坑指南) - 星际AI
  • 编程初学者指南:从入门到项目实战
  • 嵌入式ISP开发实战:SBL寄存器配置与图像处理流水线优化
  • 用 C++ 系统设计思维,拆解基于 PostgreSQL 的图文混排 RAG 架构
  • Ubuntu下搭建Android源码开发环境全指南
  • Java高级工程师核心能力与进阶路径详解
  • Java Swing中JOptionPane对话框使用详解
  • 深入解析AM62L DEBUGSS调试子系统:从CoreSight架构到实战配置
  • Windows 11 Build 26300.8068开发环境性能优化与兼容性深度评测
  • 合肥蜀山区轻奢包包上门回收,2026 易奢福快速估价即时结算 - 奢侈品回收实体店
  • 生产级机器学习模型服务:从Notebook到高可用部署的七支柱
  • 2026毓典奢品汇北京二手名表回收实操白皮书:估值逻辑、套路拆解与正规门店甄选 - 名表行情观察
  • Android定时器实现方案对比与最佳实践
  • Python常用模块实战指南:从数据处理到Web开发
  • 缺失值处理实战指南:从MCAR/MAR/MNAR到业务语义编码
  • Unity粒子系统Velocity over Lifetime实现螺旋攻击特效全解析
  • 亲身到店探访西安劳力士官方售后服务中心|全新电话和门店地址(2026年7月最新) - 劳力士服务中心
  • 虚拟教师上线前必做的12项压力测试,3所重点中学已验证的稳定性标准
  • Unity协程进阶:IEnumerator五大高级用法与性能优化实战
  • Windows 10 PL2303驱动终极解决方案:让停产芯片在现代系统重获新生
  • Android定时器开发:Handler、CountDownTimer与线程池实战对比
  • 上海长宁区电路维修怎么选?4 家本地服务商深度对比 - 匠心24小时快修
  • Codeforces Div.3竞赛算法解析与实战技巧
  • 2026 年 7 月新发布:立山热门的钢制闸门供应商哪个好,别再用老方法!揭秘钢制闸门的惊人耐用性 - 企业推荐官【认证官方】
  • WD-40正确使用指南:适用场景、操作步骤与常见误区解析