「MCP安全审计工具」Blitz Strike拆解:AI Agent扫源码+负对照验洞一键出报告
原创
句芒安全实验室
句芒安全实验室
句芒安全实验室
2026年10月12日 10:00
上海
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
为什么\"让 AI Agent 去审代码\"总是翻车
这两年,用 AI Agent 做代码安全审计几乎成了标配。挂一个 MCP 工具,让 Agent 扫一遍仓库,然后它给你吐出一份漏洞报告。真跑起来你会发现两个通病。
第一个是误报:Agent 把每一个 eval(、unserialize(、exec( 都标成漏洞,根本不确认这个危险函数到底有没有被那个未认证的入口调用过。第二个更麻烦——没验证就报洞:它写出一段\"PoC\"、一个\"exploit\",讲得有鼻子有眼,但从来没真跑过。因为\"给一个自信的答案\"比\"去验证一遍\"省事太多。
句芒这次拆的项目 shinthink/blitzstrike,就是冲着这两个通病来的。我核实了一下(2026-10-11),这个仓库有 504 个 star、6 个 fork、0 个未关 issue,MIT 协议,TypeScript / Bun 写的,2026-09-12 建仓,最近一次推送在 2026-10-10,最新版本 2.4.147,正好在 GitHub 趋势里。
它的口号很直接:\"Reconnaissance at speed. Analysis in depth. Validation before report.\"(侦察要快、分析要深、报告之前先验证),翻成一句话——扫描命中只是假设,真跑一遍才算结论。
它到底是个什么东西
一句话:Blitz%20Strike%20是一个%20Model%20Context%20Protocol(MCP)服务器,把一套三层安全审计方法论打包成可调用的工具,而且整个流程跑在服务端。 你只要在%20Claude%20Code、Cursor、Hermes、OpenCode、Codex%20这类任何%20MCP%20客户端里发一次 run_engagement,它就完成——范围门%20→%20攻击面枚举%20→%20溯源%20→%20攻击链富化%20→%20产出%20finding。
它跟\"给某个%20Agent%20写个插件\"最大的区别在这里:它不绑任何一家客户端。MCP%20是它的宿主,一套服务器所有客户端都能用,没有%20per-client%20代码,也没有锁定。而且因为流程跑在服务端,不管你的客户端模型多聪明,拿到的分析深度都是一样的。
它最值得抄的一句话写在%20manifesto%20里:\"A%20scan%20hit%20is%20a%20hypothesis.%20A%20live%20test%20is%20the%20verdict.\"(一次扫描命中是假设,一次实测才是结论。)
三层方法论:BLITZ、EAGLE-EYE、STRIKE
这是它最核心的设计,把渗透测试方法论拆成三层,一层比一层深:
- BLITZ(攻击面测绘)——大规模枚举暴露的攻击面:未认证入口点、危险%20sink、认证边界,全都带
文件:行号; - EAGLE-EYE(静态分析与数据流溯源)——追踪%20source→sink%20的可达性,再拿升级链图谱去富化,确认一个%20sink 可达、未认证、可利用,而不只是\"存在\";
- STRIKE(实测验证与利用)——做%20live%20验证(marker%20反射%20+%20负对照%20negative%20control%20+%20baseline),先过范围门,确认了才报告。
一句话记住:侦察%20→%20分析%20→%20验证,STRIKE%20没确认之前,什么都不报。
为什么\"负对照\"是它跟别人最不一样的地方
绝大多数%20AI%20安全工具停在\"我扫到了\"。Blitz%20Strike%20的每一步都逼你回答\\\"我怎么证伪它\"\\。
它的每条升级链(chains.json 里一共 58%20条)都带四个字段:tool_hint(该用哪个工具)、success_criteria(可观测的二元判据)、invariant_check(利用必须成立的前提)、negative_control(怎么反驳这条%20finding)。原文那句话很关键:\"一条没有 negative_control 的链,是误报生成器,不是链。\"
它给的实测判据也很硬:marker%20反射了、且负对照保持\"没反应\",才判 confirmed;marker%20和负对照都反射了,判 false_positive;marker%20没反射,停在 validating;请求被拦,判 blocked。
证据优先的%20finding%20生命周期
它把\"发现\"做成一个严格的状态机(transition() 会拒绝非法跳转):
detected%20→%20triaged%20→%20hypothesis%20→%20validating%20→%20confirmed
%20 %20 %20 %20 %20 %20 %20 %20 ↘%20rejected%20 %20 %20 ↘%20false_positive
%20 %20 %20 %20 %20 %20 %20 %20 ↘%20out_of_scope%20 %20↘%20blocked
confirmed、false_positive、rejected、blocked、out_of_scope 都是终态。
这里有个很值得学的细节:严重性(severity)和置信度(confidence)是两个东西,永远不合并。 严重性说的是影响(critical%20/%20high%20/%20medium%20/%20low),置信度说的是把握(0.0–1.0%20的确定性打分)。它的置信度引擎是加权的、确定性的——静态分析%200.20、数据流%200.25、可达性%200.15、前提%200.10、运行时验证%200.20、负对照%200.10。于是会出现这样的组合:\"严重性%20CRITICAL%20+%20置信度%200.41\"%20=%20可能很严重,但证据不够;\"严重性%20MEDIUM%20+%20置信度%200.98\"%20=%20影响中等,但很可靠。 而高置信度本身永远不等于证明——要确认,必须真验证过、带证据。
它还有一套硬性不变量(invariants.ts):CONFIRMED%20必须有证据、必须有干净的负对照、必须目标在范围内、证据里不能有明文密钥、证据哈希必须稳定——任意一条不满足,确认动作直接抛异常。
知识层:一百多个工具目录%20+%20三百多份手册
这是它\"知识\"那一面。README%20说它自带 130%20个安全工具目录(自写的,每个带命令行、关键参数、各平台安装命令、检测探针)、317%20份工具手册%20+%2017%20份作战%20playbook(覆盖%20130%20个工具目录的%20100%)、32%20份技能%20playbook、66%20类%20payload、58%20条升级链,还有 11.9k%20个%20nuclei%20检测模板、139%20条%20WAF%20签名、89%20个技术、53%20个%20CVE、103%20个端口的关联数据。
这些手册不是摆设——tool_lookup 会自动把工具的完整手册附上;run_engagement 会在每条命中的链后面附上相关手册。
它很诚实的一点是:知识层的数据来源写清楚了——WAF%20签名、技术/CVE/端口关联、fuzzer%20数据、payload、nuclei%20模板来自%20airecon、PayloadsAllTheThings、nuclei-templates(都是%20MIT),只有攻击向量分类法(34%20类、588%20个向量)是它自己的。
还顺手补了%20Web3%20和逻辑漏洞
除了通用%20web,它还塞了两块很多安全工具不管的东西:
- Web3%20智能合约审计——
web3_audit做确定性的%20Solidity%20审计,覆盖%2013%20类%20bug(重入含%20ERC721/ERC1155%20回调、未检查返回值/算术、tx.origin%20鉴权、签名重放、selfdestruct、delegatecall、缺访问控制、时间戳依赖、现货价预言机、无界循环、encodePacked%20碰撞、缺%20address(0)%20检查),带%20CWE%20+%20严重性%20+%20行号;然后foundry_poc生成一个可执行的%20Foundry%20测试,foundry_run真的用forge%20test跑一遍——测试通过%20=%20漏洞复现(判据是%20forge%20自己的,不是它编的)。 - 逻辑漏洞%20prober——
sibling_scan做确定性的%20live%20逻辑漏洞探测:兄弟端点枚举%20+%20差分%20IDOR%20+%20auth%20矩阵%20+%20批量赋值%20+%20限流,专门补静态分析在%20IDOR%20/%20鉴权逻辑上的缺口; - 带外证明——
oob_start/oob_poll起一个%20interactsh%20监听器,盲%20SSRF%20/%20XXE%20/%20SQLi%20/%20命令注入的%20canary 必须真的回来才算数。
上手:一条命令装进所有客户端
它装起来很简单,Bun%201.4+%20或%20Node%2020+%20就行:
npx%20-y%20blitzstrike%20doctor%20 %20 #%20自检:运行时%20+%20工具目录%20+%20凭据%20+%20数据层
npx%20-y%20blitzstrike%20install%20 #%20自动探测本机所有%20Agent%20CLI,写入各自的%20MCP%20配置
install 会探测你装了哪些%20Agent%20CLI(Claude%20Code、Cursor、OpenCode、Codex、Hermes、Gemini、Windsurf、Copilot、Cline),把%20Blitz%20Strike%20合并进各自的配置,绝不覆盖你已有的%20MCP%20服务器。 一个客户端都没探到时,它把配置片段打印出来让你手动粘。然后重启%20Agent,调 run_engagement 就行。
一次完整审计就是一个调用(run_engagement),也可以走更细的手动路径:blitz_scan → eagle_eye → read_tool_manual → strike_verify。
它有三种模式:bug-bounty(严格范围:禁%20DoS、排除项感知、授权研究护栏)、red-team(完整主动测试,范围门照旧)、ctf(按题目目标)。每个模式在主动测试之前都会先跑 scope_check,只测授权目标。
几条我觉得最该抄的设计
- sink%20≠%20漏洞——同一个文件里有个危险函数、旁边有个未认证处理器,不代表那个处理器调了它;得先确认作用域;
- 能写文件%20≠%20RCE——一个可写文件必须被运行时加载才算执行;
- 默认配置只测默认——Apache%20默认的
FilesMatch%20.+\\.ph(ar|p|tml)$带$锚点,.php.jpg根本不执行; - 每条 finding 都是假设——直到
strike_verify反射了你的 marker、且那条链的负对照保持\"没反应\"; - 记忆只认 verified=true——长期记忆是 append-only 的 JSONL(
~/.blitzstrike/memory.jsonl),只有标了verified=true的条目才算权威;run_engagement会把命中的升级链自动收成pattern记忆(按链 id 去重),知识库越用越大,但不刷屏; - 质量是可重跑的,不是嘴上说的——它带一套基准(
run_enterprise_benchmark):在 PHP / JS / Python / Java 的漏洞 + 安全样本上,检测率 1.0、误报率 0、精确率 1.0;覆盖矩阵(coverage_matrix)5 种语言 × sink 类 = 84%(没覆盖的组合是语言里本来就没有的 sink);bun run test跑 453 项检查,CI 每次 push 都跑。
得提前知道的边界
- 确定性 ≠ 判断对了——确定性说的是\"同一份输入同一个结论\",不是\"这个结论正确\";一条写得太松的链,照样每次都给你一个\"放行\"的确定答案;
- 它不替你判断目标能不能测——范围门只保证不越界,不保证目标本身可信;
- AI 推理不算证据——每条 finding 都要有确定性证据(marker 反射、负对照、source→sink 溯源、SHA-256 打标);
- 要 LLM 驱动——它的定位是\"LLM 是大脑,Blitz Strike 是确定性的双手 + 知识 + 护栏\",得有一个 Agent 去驱动它;
- 数据来源要看清——payload、nuclei 模板这些是 MIT 的第三方数据,攻击向量分类法才是它自己的;
- 只测你有授权的目标——这是它自己的定位,也是用它的前提。
它跟 AI 安全的大方向什么关系
过去两年,AI Agent 安全大致分两派:一派在输入输出上挂模型(分类器、PII 检测、越狱检测),一派在运行时上做沙箱(限制 Agent 能碰什么)。Blitz Strike 补的是第三条:\"这个 Agent 手上有一套工具和知识,它会不会把'扫到'直接说成'挖到'\"——它管的不是\"这句话安不安全\",也不是\"这个进程能碰什么\",而是\\\"从扫描命中到报告之间,到底有没有一次真验证\"\\。
对做 AI 安全的人来说,它至少给了三个可抄的习惯:把\"证伪路径\"写进每条发现、把严重性和置信度拆开、把\"证据\"做成机器可校验的不变量。 当 Agent 越来越能干、手里握的权限越来越大,\"怎么让它的结论站得住脚\",比\"怎么让它多扫几条规则\"更值钱。
适合谁
- 做 AI Agent 安全审计/红队的人:它的\"扫描=假设、实测=结论\"正好是当前 AI 安全最缺的一环;
- 要可审计、可复现结论的团队:确定性置信度、append-only 证据链、带 SHA-256 的报告,是能跟审计交代的前提;
- 做 bug bounty 的人:
bug-bounty模式的范围门 + 负对照,正好压误报; - 做智能合约审计的人:
web3_audit+foundry_poc把\"能证明\"这件事做进了流程。
不适合谁:想要\"装上就自动出洞、不用管\"的人——它的定位是 \"LLM 是大脑\",得有一个 Agent 去驱动、还得你自己把范围给清楚;而且它明确不替你判断目标能不能测。
最后
回到开头那句话:用 AI Agent 做安全审计,难点从来不是\"多挂几条规则\",而是\"扫到之后,它到底有没有真的验证过\"。
Blitz Strike 真正的价值,不是\"多扫几个 sink\",而是它把\\\"验证\"这件事,做成了确定性的、带负对照的、还在 Agent 循环之外的一层。当 Agent 手里的权限越来越大,\"怎么让它的结论站得住脚\",才是要花工程时间去做的地方。\\
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论