乐于分享
好东西不私藏

AI 漏洞猎手(四):AI + Fuzzing 如何把崩溃变成可修复漏洞

AI 漏洞猎手(四):AI + Fuzzing 如何把崩溃变成可修复漏洞

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/