用于模糊测试目标生成与评估的框架
该框架利用多种大语言模型(LLM)为现实世界中的 C/C++/Java/Python 项目生成模糊测试目标,并通过
OSS-Fuzz 平台 对其进行基准测试。
更多详情请参阅 AI-Powered Fuzzing: Breaking the Bug Hunting Barrier:

当前支持的模型包括:
- Vertex AI code-bison
- Vertex AI code-bison-32k
- Gemini Pro
- Gemini Ultra
- Gemini Experimental
- Gemini 1.5
- OpenAI GPT-3.5-turbo
- OpenAI GPT-4
- OpenAI GPT-4o
- OpenAI GPT-4o-mini
- OpenAI GPT-4-turbo
- OpenAI GPT-3.5-turbo (Azure)
- OpenAI GPT-4 (Azure)
- OpenAI GPT-4o (Azure)
生成的模糊测试目标将基于生产环境中的最新数据,通过四项指标进行评估:
- 可编译性
- 运行时崩溃
- 运行时覆盖率
- 与
OSS-Fuzz中现有的人工编写的模糊测试目标相比的运行时行覆盖率差异。
以下是 2024 年 1 月 31 日的一次实验结果示例。 该实验包含了来自 297 个开源项目的 1300+ 个基准测试。
总体而言,该框架成功利用 LLM 为 160 个 C/C++ 项目生成了有效的模糊测试目标(这些目标能带来非零的覆盖率提升)。 相较于现有的人工编写目标,最大行覆盖率提升为 29%。
请注意,这些报告并未公开,因为它们可能包含未披露的漏洞。
用法
请查阅我们的详细使用指南,了解如何运行此框架并根据结果生成报告。
独立智能体执行与评估
您也可以在不运行完整实验的情况下,使用集成的智能体执行框架来执行或评估单个智能体。 请参阅框架文档,了解如何运行单个智能体或智能体序列的详细说明。
合作
对研究或开源社区合作感兴趣? 请随时创建 issue 或发送邮件给我们:oss-fuzz-team@google.com。
发现的 Bug
到目前为止,我们已报告了 30 个由该框架构建的自动生成目标发现的新 bug/漏洞:
| 项目 | Bug | LLM | Prompt Builder | Target oracle |
|---|---|---|---|---|
cJSON | OOB read | Vertex AI | Default | Far reach, low coverage |
libplist | OOB read | Vertex AI | Default | Far reach, low coverage |
hunspell | OOB read | Vertex AI | default | Far reach, low coverage |
zstd | OOB write | Vertex AI | default | Far reach, low coverage |
gdbm | Stack buffer underflow | Vertex AI | default | Far reach, low coverage |
hoextdown | Use of uninitialised memory | Vertex AI | default | Far reach, low coverage |
pjsip | OOB read | Vertex AI | Default | Low coverage with fuzz keyword + easy params far reach |
pjsip | OOB read | Vertex AI | Default | Low coverage with fuzz keyword + easy params far reach |
gpac | OOB read | Vertex AI | Default | Low coverage with fuzz keyword + easy params far reach |
gpac | OOB read/write | Vertex AI | Default | All |
gpac | OOB read | Vertex AI | Default | All |
gpac | OOB read | Vertex AI | Default | All |
sqlite3 | OOB read | Vertex AI | Default | All |
htslib | OOB read | Vertex AI | Default | All |
libical | OOB read | Vertex AI | Default | All |
croaring | OOB read | Vertex AI | Test-to-harness | All |
openssl | CVE-2024-9143 - OOB read/write | Vertex AI | Default | All |
liblouis | Use of uninitialised memory | Vertex AI | Test-to-harness | Test identifier |
libucl | OOB read | Vertex AI | Default | Low coverage with fuzz keyword + easy params far reach |
openbabel | Use after free | Vertex AI | Default | Low coverage with fuzz keyword + easy params far reach |
libyang | OOB read | Vertex AI | Default | All |
openbabel | OOB read | Vertex AI | Default | All |
exiv2 | OOB read | Vertex AI | Default | All |
| Undisclosed | Java RCE (pending maintainer triage) | Vertex AI | Default | Far reach, low coverage |
| Undisclosed | Regexp DoS (pending maintainer triage) | Vertex AI | Default | Far reach, low coverage |
| Undisclosed | OOB read | Vertex AI | Default | All |
| Undisclosed | OOB write | Vertex AI | Default | All |
| Undisclosed | OOB read | Vertex AI | Default | All |
| Undisclosed | OOB read | Vertex AI | Default | All |
| Undisclosed | Use after free | Vertex AI | Agent prompt | All |
这些 bug 只有通过新生成的目标才能被发现。使用现有的 OSS-Fuzz 目标无法触达它们。
当前各项目的主要覆盖率改进
| 项目 | 总覆盖率增益 | 总相对增益 | OSS-Fuzz-gen 总覆盖行数 | OSS-Fuzz-gen 新增覆盖行数 | 已有覆盖行数 | 项目总行数 |
|---|---|---|---|---|---|---|
| phmap | 98.42% | 205.75% | 1601 | 1181 | 574 | 1120 |
| usbguard | 97.62% | 26.04% | 24550 | 5463 | 20979 | 3564 |
| onednn | 96.67% | 7057.14% | 5434 | 5434 | 77 | 210 |
| avahi | 82.06% | 155.90% | 3358 | 2814 | 1805 | 3046 |
| pugixml | 72.98% | 194.95% | 9015 | 6646 | 3409 | 7662 |
| librdkafka | 66.88% | 845.57% | 5019 | 4490 | 531 | 1169 |
| casync | 66.75% | 903.23% | 1171 | 1120 | 124 | 1678 |
| tomlplusplus | 61.06% | 331.10% | 4755 | 3652 | 1103 | 5981 |
| astc-encoder | 59.35% | 177.88% | 2726 | 1745 | 981 | 2940 |
| mruby | 48.56% | 0.00% | 34493 | 34493 | 0 | 71038 |
| arduinojson | 42.10% | 85.80% | 3344 | 1800 | 2098 | 4276 |
| json | 41.13% | 66.51% | 5051 | 3339 | 5020 | 8119 |
| double-conversion | 40.40% | 88.12% | 1663 | 779 | 884 | 1928 |
| tinyobjloader | 38.26% | 77.01% | 1157 | 717 | 931 | 1874 |
| glog | 38.18% | 58.69% | 895 | 331 | 564 | 867 |
| cppitertools | 35.78% | 45.07% | 253 | 151 | 335 | 422 |
| eigen | 35.38% | 190.70% | 2643 | 1947 | 1021 | 5503 |
| glaze | 34.55% | 30.06% | 2920 | 2416 | 8036 | 6993 |
| rapidjson | 31.83% | 148.07% | 1585 | 958 | 647 | 3010 |
| libunwind | 30.58% | 83.25% | 2899 | 1342 | 1612 | 4388 |
| openh264 | 30.07% | 50.14% | 6607 | 5751 | 11470 | 19123 |
* “Total project lines” 衡量的是由 OSS-Fuzz 中现有人工编写的 fuzz targets 编译和链接的被测项目的源代码。
* “Total coverage gain” 以 “Total project lines” 作为分母进行计算。“Total relative gain” 是覆盖率相较于旧覆盖行数所增加的部分。
* 在编译新的 fuzz targets 时,可能会包含来自被测项目的额外代码,从而导致较高的百分比增益。
Citing This Work
请点击此 GitHub 页面右侧的 'Cite this repository' 按钮以获取引用详情。