AI说它挖到了漏洞,凭什么信?

admin 2026-11-13 02:51:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

AI说它挖到了漏洞,凭什么信?

原创

大白
大白

知白守黑1024

2026年11月12日 06:36
北京

去阅读

先说一个很多人都遇到过的场景。让 AI 帮你测一个站,它跑得挺欢,最后交来一份报告:SQL 注入、SSRF、越权,一条条写得头头是道。你挑了一条想复现,打不出来。再挑一条,还是打不出来。

这不是 AI 不行,是它分不清“看起来像漏洞”和“真的是漏洞”。GitHub 上有个叫 Pentest-AI 的开源项目(命令行工具叫ptai,1821 Star,MIT 协议),就是冲这个问题来的:它给每个发现设了两道门槛,机器预言机验证过的才叫 verified,验证不了的永远叫 candidate。模型自己说了不算。

01先说一个尴尬的现实

用大模型跑渗透,最贵的不是 token,是人肉复现的时间。模型的推理是概率性的,它会把“像”当成“是”,幻觉结论混在真实漏洞里,一笔一笔全靠安全工程师自己验。放到赏金场景更现实:交一份复现不了的报告,赔的是你在平台上的信誉分。

Pentest-AI 的思路是把结论权从模型手里拿走。你自己的 AI 客户端(Claude Code、Codex、Cursor 都行)负责驱动调查、提假设、调工具,但“这个发现算不算实锤”,由独立的预言机说了算。README 里那句原话挺妙:

模型的猜测,永远不能穿着结果的外衣交货。(the model's guesses never arrive dressed as results)

02它的办法很朴素:重打一遍,再打个对照

预言机做的事不难理解,难的是多数工具根本不做。发现可疑行为之后,预言机会把漏洞利用重放一遍,同时跑一个对照组,也就是一个本不该触发弱点的请求。两边行为有差异,才算数。

拿可信头绕过举例:带攻击头时必须返回特权内容,不带时必须被拒绝。如果一个服务器对什么都回 200,这不叫证据。

candidate 到 verified 的判定流程(图源项目 README)

真实画面长这样。Juice Shop 靶场上,JWT alg:none 伪造被预言机重放验证,接受了 8 次,绿色那个 VERIFIED 就是机器盖的章:

预言机实战画面,截取自项目官方演示

证据链也是齐的。一条 verified 记录会带上预言机是谁、发了哪些请求、判读了哪些响应。想复核随时可以:ptai retest重跑检查,ptai diff看变化,ptai replay重放证明胶囊。有个细节我挺喜欢,作者特意写明胶囊没有签名。信任机制不是签名,是你随时可以重跑复验。

03家底有多少,CI 每天替它数着

官方维护着一张能力清单,数字全部由 CI 从代码里自动统计核对,文档想吹牛都难:

能力面 数量 说明
库内探针 65 注入、访问控制、请求处理等 Web 弱点探查,其中 64 个是 HTTP 探针
预言机种类 28 独立验证判定逻辑,决定 candidate 能不能升为 verified
工具封装 203 其中 20 个已能把工具输出解析成结构化 findings
MCP 工具 52 供 Claude Code、Codex、Cursor 等 AI 客户端调用
领域代理 18 recon、web、cloud、exploit\_chain、llm\_redteam、privesc 等

18 个领域代理覆盖的面相当广:侦察、Web、API 安全、云、移动、无线、域渗透、提权、漏洞链编排,甚至有 LLM 红队和社工模拟。

不过作者把丑话说在前面:不是每个探针都有配套的验证配方,没有配方的发现只能停在 candidate。所以这张表是库存清单,不是战绩。

04成绩单,连作假的空间都留得很小

基准成绩全部公开原始工件。任何人把蜜罐 clone 下来重跑一遍,就能对出这些数字:

目标 结果 要点
TaskFlow 自建蜜罐 20/20 漏洞 + 3/3 攻击链 Claude 经 MCP 工具协调驱动,逐层给出判定轨迹
OWASP Juice Shop 19.2.1 58 findings / 10 critical 默认强度;特意选了“训练数据之外”的新版本,验证泛化能力
Juice Shop safe 强度 54 findings 13 个破坏性探针被正确拦截,安全开关按设计工作

官方成绩图(ptai 1.4.0):90 个范围内的 HTTP 端点命中 81,12 项预言机实锤,0 误报

当然口径也要说清楚:一次扫描没有 verified,不代表这个应用安全。认证后的页面、有状态的流程、不支持的漏洞类型,都在覆盖之外。

05我最喜欢的是赏金模式:把规矩写进代码

1.6.0 加的赏金模式,是我在同类工具里没见过的克制。每个项目一份 TOML 画像,范围、排除、官方声明速率、你的研究者署名,全是硬约束:

~/.pentest-ai/programs/acme.toml

platform =\"hackerone\"

researcher =\"your-h1-username\"# 每个请求都带 X-Bug-Bounty

rps =5.0# 项目方声明的速率

scope = [\"\*.acme.com\",\"api.acme.com\"]

excluded = [\"status.acme.com\"]# 排除优先于通配

细到什么程度?每个请求都被压在声明速率内,外部工具发的也一样,压不住的工具直接跳过并如实说明。范围外请求一律拒绝。gobuster、ffuf 这种字典轰炸工具不给跑,内置发现探针只打五百来个高概率路径。目标回 429,扫描就跟着降速;持续降级就停下,把原因记下来。项目方声明禁止扫描器的,要你手敲一个 yes 才继续,因为那可能作废安全港协议。

还有一组实测数字挺实用:3 rps 全量大概 8700 个请求、51 分钟,找出的 critical 和 high 跟 10 rps 一样多,那边是 6600 个请求、11 分钟。慢,但不漏。对要按速率合规的赏金猎人来说,这就是能抄的作业。报告草稿只从 verified findings 里出,复现步骤直接取预言机的请求记录。

06想试试的话,有三条路

最省事的先跑 demo。不用 API Key,也不打外部目标,测一个自带漏洞的应用,顺便看看证据胶囊长什么样:

$pipx install ptai

$ptai demo

无需 API Key,测自带靶场并演示证据胶囊

接入实拍:注册之后一句自然语言就能驱动完整渗透会话(截取自项目官方演示)

要在自己的 AI 客户端里用,ptai setup --mcp会自动注册到检测到的客户端,已有配置不会动,不放心可以先加--dry-run看一眼。模型由客户端出,MCP 服务器不需要单独的 Key。

想完全本地化就配 Ollama,拉一个支持工具调用的模型,数据不出本机,findings 存在本地 SQLite。进 CI 就一句--ci --fail-on verified,再用 engagement ID 导出 SARIF 交给工程侧。

07最后说点扫兴的

三条,都是作者自己写在文档里的。

一,verified 只对测试条件负责。一次扫描没发现东西,不代表这个应用安全。

二,盲洞验证可能出网。盲测会用到带外协作服务器,回调元数据对方看得见。敏感环境换自建--oast-server,或者--no-oast直接关掉。

三,报告要自己复现了再交。作者原话是:你要亲手复现每一个,自己提交。工具把证据链铺好,最后一公里的判断还是你的。

点击下方卡片,回复关键词20261112获取项目地址。觉得有用的话,点个赞或者转给同事,下篇见。

仅供安全学习与研究。测试仅限自有或已获明确授权的系统,遵守目标项目方规则与当地法律法规;未经授权的测试属违法行为。

评论:0   参与:  0