AI 漏洞猎手(四):AI + Fuzzing 如何把崩溃变成可修复漏洞
一句话核心观点:AI 不能替代 fuzzer 找到全部问题,但它能显著降低 harness 编写、crash 解释、根因归纳和回归测试的成本。
本文是“AI 漏洞猎手”系列第 4 篇,聚焦 fuzzing。它不是讲如何攻击系统,而是讲在授权代码和测试环境里,如何让 AI 帮安全团队把“跑出崩溃”推进到“修掉漏洞”。
重要说明:本文只讨论授权环境下的 fuzzing、崩溃分析、修复和回归。不提供真实目标攻击步骤、可复制 payload、绕过技巧或武器化利用链。
先给结论:Fuzzing 的难点不是跑,是闭环
很多团队以为 fuzzing 的核心是“生成很多输入”。实际上,工程难点通常在四个地方:harness 写不出来,覆盖率上不去,crash 太多分不清,修复后没有回归。
AI 适合参与这些环节。它能读 API 文档和测试,生成 harness 草案;能解释覆盖率报告,建议新的输入结构;能阅读 crash log 和调用栈,给根因假设;能把修复建议转成回归测试。

图 1:AI + Fuzzing 工作流
核心要点:AI + Fuzzing 的交付物不是“一个崩溃”,而是一套可重复证据和修复闭环。
Harness 生成:从 API 到可运行测试
Fuzzing 能不能跑起来,第一关是 harness。AI 在这里很有用,因为它能把 API 使用方式、初始化顺序、对象生命周期、错误处理和已有测试串起来。

图 2:生成 Harness 需要的上下文
上下文 | 作用 | AI 应输出什么 | 验收标准 |
API 文档 | 明确入口函数和参数含义 | harness 草案说明 | 能编译 |
初始化逻辑 | 构造依赖对象和环境 | 初始化步骤 | 不依赖生产服务 |
输入格式 | 约束结构化输入 | 输入解析策略 | 不越过授权边界 |
错误处理 | 区分预期失败和异常 | 失败分类 | 日志清晰 |
已有测试 | 学习正常调用方式 | 复用样例和断言 | 覆盖核心路径 |
构建脚本 | 接入编译和运行 | 构建说明 | CI 可重复 |
注意,AI 生成的 harness 常常不能一次通过。正确用法是让编译器和测试框架反馈错误,再让模型迭代修改。模型负责缩短试错时间,工具负责判断是否正确。
覆盖率提升:不要只追求跑得久
Fuzzing 的质量不只看运行时间,还要看是否进入关键分支。AI 可以读覆盖率报告,解释哪些分支没有走到,然后提出新的 seed 或结构约束。

图 3:覆盖率反馈循环
观察 | AI 分析方向 | 工具验证 | 合格结果 |
某分支未覆盖 | 输入缺少状态字段或格式头 | coverage report | 分支覆盖提升 |
错误路径过多 | harness 初始化不完整 | 编译和运行日志 | 无效输入比例下降 |
只覆盖浅层解析 | 结构生成太随机 | corpus 统计 | 深层函数被触达 |
运行速度过慢 | 依赖外部资源或状态过重 | 性能日志 | 单次执行成本下降 |
覆盖提升停滞 | 需要字典、seed 或状态引导 | 覆盖趋势 | 有可解释改进 |
核心要点:覆盖率不是装饰指标,而是判断 AI 生成 harness 是否真正有价值的证据。
Crash 分诊:从一堆崩溃到少数根因
Fuzzing 跑久了,最常见的问题不是没有 crash,而是 crash 太多。AI 适合做第一轮分诊:按栈、信号、函数、输入结构和最近变更聚类,再给出根因假设。

图 4:Crash 分诊漏斗
分诊层级 | 要做什么 | AI 可输出 | 必须由工具确认 |
去重 | 合并同一栈或同一根因 | 聚类说明 | crash signature |
稳定复现 | 判断是否稳定触发 | 复现条件描述 | 重跑结果 |
最小化 | 减少无关输入 | 最小用例思路 | reducer 输出 |
根因假设 | 关联代码路径 | 可能根因和证据 | 调用栈、源码、测试 |
影响判断 | 判断是否安全影响 | CWE 映射和范围 | 人工审计 |
修复回归 | 验证问题关闭 | 回归测试建议 | CI 和 fuzzer 重跑 |
AI 的根因假设不等于事实。它可能把表象崩溃当根因,也可能忽略上游状态污染。必须用重跑、最小化、sanitizer 和人工 review 约束。
实战用例:解析库 crash 的闭环
假设一个解析库处理嵌套消息。Fuzzer 发现崩溃后,AI 可以读取栈信息,定位崩溃点附近的长度检查、状态转换和错误处理。它可以提出三个候选根因:长度字段与缓冲区不一致、状态机缺失非法状态分支、递归深度没有上限。
下一步不是写攻击步骤,而是补证据。安全工程师让工具最小化用例,确认同一根因稳定复现;再补一个回归测试,描述“这个边界条件必须被拒绝或安全处理”;最后让 AI 辅助生成修复说明和影响范围。
交付物 | 内容 | 用途 |
Crash 摘要 | 触发模块、栈位置、重复性 | 快速分诊 |
根因假设 | 边界检查、状态机、资源限制 | 指导人工审计 |
最小用例说明 | 抽象输入结构和触发条件 | 回归测试 |
修复建议 | 增加校验、限制或错误处理 | 研发执行 |
回归结果 | 单测和 fuzzer 重跑结论 | 关闭漏洞 |
证据包:让 fuzzing 结果能进工单

图 5:Fuzzing 证据包
证据 | 说明 | 不合格表现 |
构建记录 | 使用的分支、编译选项、sanitizer | 无法复现环境 |
覆盖率 | 覆盖到哪些模块和分支 | 只跑到浅层解析 |
Crash Log | 栈、信号、重复性和聚类 | 只有截图或口头描述 |
最小用例 | 抽象触发条件和最小测试 | 沉淀可滥用细节 |
Patch | 修复约束和代码变更摘要 | 只改表象错误 |
回归结果 | 单测、fuzzer 重跑和 CI 结果 | 没有验证问题关闭 |
核心要点:Fuzzing 报告要能被研发复现、理解和修复,但不能沉淀可滥用攻击材料。
落地清单:AI + Fuzzing 至少检查 10 项
编号 | 检查项 | 合格标准 |
1 | 授权范围 | 只在授权仓库和隔离测试环境运行 |
2 | Harness 可编译 | 编译、运行和 CI 可重复 |
3 | 覆盖率指标 | 能看到覆盖率变化和未覆盖分支 |
4 | 输入边界 | 不使用真实敏感数据或外部目标 |
5 | Crash 去重 | 同类崩溃被聚类,不重复建单 |
6 | 稳定复现 | 关键问题能重跑验证 |
7 | 最小化 | 只保留修复所需的抽象证据 |
8 | 根因复核 | AI 假设必须由工具和人工确认 |
9 | 修复回归 | 修复后有单测和 fuzzer 重跑 |
10 | 经验沉淀 | harness、规则、测试进入基线 |
五个常见问题,直接给答案
1. AI 能不能自动生成高质量 harness?
能生成草案并快速迭代,但高质量 harness 仍需要编译、覆盖率和人工 review 验证。
2. Crash 是否等于漏洞?
不等于。Crash 需要经过稳定复现、根因确认、影响判断和修复回归,才可能进入漏洞管理。
3. 覆盖率越高越好吗?
覆盖率是重要指标,但不是唯一指标。关键是覆盖到安全敏感路径,而不是机械追求数字。
4. AI 分析 crash 最大风险是什么?
最大风险是把表象当根因。解决办法是用最小化、重跑、sanitizer 和源码证据约束模型。
5. 企业第一步应该做什么?
先选稳定库或内部解析模块做试点,目标是跑通 harness、覆盖率、crash 分诊和回归闭环,不要一开始追求全仓库自动化。
最后的判断
AI 让 fuzzing 从“少数专家能玩”变成“安全工程流水线的一部分”。但它真正改变的不是 fuzzer 的本质,而是让 harness、triage、报告和回归这些工程环节更快闭环。
值得收藏的一句话:AI + Fuzzing 的价值,不在于制造更多崩溃,而在于更快判断哪些崩溃值得修、怎么修、如何证明已经修好。
参考资料
·[1] Google Project Zero, Project Naptime: Evaluating Offensive Security Capabilities of Large Language Models https://projectzero.google/2024/06/project-naptime.html
·[2] Google Project Zero, From Naptime to Big Sleep https://projectzero.google/2024/10/from-naptime-to-big-sleep.html
·[3] Google Security Blog, AI-Powered Fuzzing: Breaking the Bug Hunting Barrier https://security.googleblog.com/2023/08/ai-powered-fuzzing-breaking-bug-hunting.html
·[4] OSS-Fuzz, LLM target generation https://google.github.io/oss-fuzz/research/llms/target_generation/
·[5] GitHub CodeQL Documentation https://codeql.github.com/docs/
·[6] GitHub CodeQL, Data flow and taint tracking https://codeql.github.com/docs/writing-codeql-queries/about-data-flow-analysis/
·[7] Semgrep Docs, Semgrep Code https://semgrep.dev/docs/semgrep-code/overview
·[8] DARPA, AI Cyber Challenge https://www.darpa.mil/research/programs/ai-cyber
·[9] MITRE CWE https://cwe.mitre.org/
·[10] NIST SP 800-218, Secure Software Development Framework https://csrc.nist.gov/pubs/sp/800/218/final
·[11] OWASP Top 10 for LLM Applications https://owasp.org/www-project-top-10-for-large-language-model-applications/
夜雨聆风