ITADN
google/oss-fuzz-gen
google/oss-fuzz-gen · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

用于模糊测试目标生成与评估的框架

该框架利用多种大语言模型(LLM)为现实世界中的 C/C++/Java/Python 项目生成模糊测试目标,并通过 OSS-Fuzz 平台 对其进行基准测试。

更多详情请参阅 AI-Powered Fuzzing: Breaking the Bug Hunting Barrier: Alt text

当前支持的模型包括:

  • 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+ 个基准测试

image

总体而言,该框架成功利用 LLM 为 160 个 C/C++ 项目生成了有效的模糊测试目标(这些目标能带来非零的覆盖率提升)。 相较于现有的人工编写目标,最大行覆盖率提升为 29%。

请注意,这些报告并未公开,因为它们可能包含未披露的漏洞。

用法

请查阅我们的详细使用指南,了解如何运行此框架并根据结果生成报告。

独立智能体执行与评估

您也可以在不运行完整实验的情况下,使用集成的智能体执行框架来执行或评估单个智能体。 请参阅框架文档,了解如何运行单个智能体或智能体序列的详细说明。

合作

对研究或开源社区合作感兴趣? 请随时创建 issue 或发送邮件给我们:oss-fuzz-team@google.com

发现的 Bug

到目前为止,我们已报告了 30 个由该框架构建的自动生成目标发现的新 bug/漏洞:

项目BugLLMPrompt BuilderTarget oracle
cJSONOOB readVertex AIDefaultFar reach, low coverage
libplistOOB readVertex AIDefaultFar reach, low coverage
hunspellOOB readVertex AIdefaultFar reach, low coverage
zstdOOB writeVertex AIdefaultFar reach, low coverage
gdbmStack buffer underflowVertex AIdefaultFar reach, low coverage
hoextdownUse of uninitialised memoryVertex AIdefaultFar reach, low coverage
pjsipOOB readVertex AIDefaultLow coverage with fuzz keyword + easy params far reach
pjsipOOB readVertex AIDefaultLow coverage with fuzz keyword + easy params far reach
gpacOOB readVertex AIDefaultLow coverage with fuzz keyword + easy params far reach
gpacOOB read/writeVertex AIDefaultAll
gpacOOB readVertex AIDefaultAll
gpacOOB readVertex AIDefaultAll
sqlite3OOB readVertex AIDefaultAll
htslibOOB readVertex AIDefaultAll
libicalOOB readVertex AIDefaultAll
croaringOOB readVertex AITest-to-harnessAll
opensslCVE-2024-9143 - OOB read/writeVertex AIDefaultAll
liblouisUse of uninitialised memoryVertex AITest-to-harnessTest identifier
libuclOOB readVertex AIDefaultLow coverage with fuzz keyword + easy params far reach
openbabelUse after freeVertex AIDefaultLow coverage with fuzz keyword + easy params far reach
libyangOOB readVertex AIDefaultAll
openbabelOOB readVertex AIDefaultAll
exiv2OOB readVertex AIDefaultAll
UndisclosedJava RCE (pending maintainer triage)Vertex AIDefaultFar reach, low coverage
UndisclosedRegexp DoS (pending maintainer triage)Vertex AIDefaultFar reach, low coverage
UndisclosedOOB readVertex AIDefaultAll
UndisclosedOOB writeVertex AIDefaultAll
UndisclosedOOB readVertex AIDefaultAll
UndisclosedOOB readVertex AIDefaultAll
UndisclosedUse after freeVertex AIAgent promptAll

这些 bug 只有通过新生成的目标才能被发现。使用现有的 OSS-Fuzz 目标无法触达它们。

当前各项目的主要覆盖率改进

项目总覆盖率增益总相对增益OSS-Fuzz-gen 总覆盖行数OSS-Fuzz-gen 新增覆盖行数已有覆盖行数项目总行数
phmap98.42%205.75%160111815741120
usbguard97.62%26.04%245505463209793564
onednn96.67%7057.14%5434543477210
avahi82.06%155.90%3358281418053046
pugixml72.98%194.95%9015664634097662
librdkafka66.88%845.57%501944905311169
casync66.75%903.23%117111201241678
tomlplusplus61.06%331.10%4755365211035981
astc-encoder59.35%177.88%272617459812940
mruby48.56%0.00%3449334493071038
arduinojson42.10%85.80%3344180020984276
json41.13%66.51%5051333950208119
double-conversion40.40%88.12%16637798841928
tinyobjloader38.26%77.01%11577179311874
glog38.18%58.69%895331564867
cppitertools35.78%45.07%253151335422
eigen35.38%190.70%2643194710215503
glaze34.55%30.06%2920241680366993
rapidjson31.83%148.07%15859586473010
libunwind30.58%83.25%2899134216124388
openh26430.07%50.14%660757511147019123

* “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' 按钮以获取引用详情。