当前位置: 首页 > news >正文

oss-fuzz-gen:一款基于LLM的模糊测试对象生成与评估框架

关于oss-fuzz-gen

oss-fuzz-gen是一款基于LLM的模糊测试对象生成与评估框架,该工具可以帮助广大研究人员使用多种大语言模型(LLM)生成真实场景中的C/C++项目以执行模糊测试。

该工具基于Google的OSS-Fuzz平台实现其功能,并对生成的目标执行基准测试。

工具架构

工具运行流程如下:

工具会根据生产环境中的最新数据,使用四个指标来评估生成的模糊测试目标:

1、可操作性;

2、运行时崩溃;

3、运行时覆盖率;

4、与OSS-Fuzz中现有的人工编写的模糊目标相比,运行时行覆盖率存在的差异;

下图显示的是该工具与297个开源项目进行的1300+基准测试结果:

支持的模型

Vertex AI code-bison

Vertex AI code-bison-32k

Gemini Pro

OpenAI GPT-3.5-turbo

OpenAI GPT-4

工具要求

Python 3.11

pip

python3.11-venv

Git

Docker

Google Cloud SDK

c++filt

clang-format

工具下载

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/google/oss-fuzz-gen.git

然后使用下列命令创建一个虚拟环境,激活环境后使用pip命令和项目提供的requirements.txt安装该工具所需的其他依赖组件:

cd oss-fuzz-genpython3 -m venv .venvsource .venv/bin/activatepip install -r requirements.txt

LLM访问

Vertex AI

访问Vertex AI模型需要一个启用了Vertex AI的Google云项目(GCP)。

然后完成GCP身份认证:

gcloud auth logingcloud auth application-default logingcloud auth application-default set-quota-project <your-project>

你还需要指定GCP项目和Vertex AI配额:

export CLOUD_ML_PROJECT_ID=<gcp-project-id>export VERTEX_AI_LOCATIONS=us-west1,us-west4,us-east4,us-central1,northamerica-northeast1

OpenAI

OpenAI的使用需要一个API密钥,获取到之后需要在一个环境变量中设置:

export OPENAI_API_KEY='<your-api-key>'

工具执行

下列命令可以生成并评估一个模糊测试对象,然后执行基准测试:

./run_all_experiments.py \--model=<model-name> \--benchmarks-directory='./benchmark-sets/comparison' \[--ai-binary=<llm-access-binary>] \[--template-directory=prompts/custom_template] \[--work-dir=results-dir][...]# E.g., generate fuzz targets for TinyXML-2 with default template and fuzz for 30 seconds.# ./run_all_experiments.py -y ./benchmark-sets/comparison/tinyxml2.yaml

其中的<model-name>可以是下列参数:

1、Vertex AI中Code Bison模型的vertex_ai_code-bison或vertex_ai_code-bison-32k;

2、Vertex AI中Gemini Pro的vertex_ai_gemini-pro;

3、OpenAI的gpt-3.5-turbo或gtp-4;

可视化结果

================================================================================*<project-name>, <function-name>*build success rate: <build-rate>, crash rate: <crash-rate>, max coverage: <max-coverage>, max line coverage diff: <max-coverage-diff>max coverage sample: <results-dir>/<benchmark-dir>/fixed_targets/<LLM-generated-fuzz-target>max coverage diff sample: <results-dir>/<benchmark-dir>/fixed_targets/<LLM-generated-fuzz-target>

生成报告

该工具还支持通过一个Web UI来查看结果:

python -m report.web <results-dir> <port>

<results-dir>为--work-dir的目录路径,默认值为./results。执行完成后,直接访问http://localhost:<port> 即可查看。

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可证协议。

项目地址

oss-fuzz-gen:【GitHub传送门】

参考资料

GitHub - google/oss-fuzz: OSS-Fuzz - continuous fuzzing for open source software.

https://github.com/google/oss-fuzz-gen/blob/main/benchmark-sets/all

https://cloud.google.com/vertex-ai/docs/start/cloud-environment

https://cloud.google.com/resource-manager/docs/creating-managing-projects#console

http://www.lryc.cn/news/312799.html

相关文章:

  • 深度神经网络 基本知识 记录
  • 基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)
  • RK3568 Android12 适配抖音 各大APP
  • [渗透教程]-022-内网穿透的高性能的反向代理应用
  • 【计算机网络】深度学习HTTPS协议
  • C盘新建的文件夹内需要管理员权限才能新建和删除解决问题记录
  • 2024年【道路运输企业安全生产管理人员】考试报名及道路运输企业安全生产管理人员免费试题
  • 四面体单元悬臂梁的Matlab有限元编程 | 实体单元 | Matlab源码 | 理论文本
  • BurpSuite2024.2.1
  • 【投稿优惠|火热征稿】2024年计算机技术与自动化发展国际会议 (ICCTAD 2024)
  • LeetCode.232. 用栈实现队列
  • SpringBoot集成ElasticSearch(ES)
  • 基于STC12C5A60S2系列1T 8051单片机的TM1638键盘数码管模块的数码管显示应用
  • Qt插件之输入法插件的构建和使用(一)
  • 慢SQL调优-索引详解
  • 知乎语音下载(mediadown)
  • 2023 最新 IntelliJ IDEA 2023.3 详细配置步骤演示:新入职如何快速配置 IntelliJ IDEA?
  • Linux 下安装 Git
  • Manomotion 实现AR手势互动-解决手势无效的问题
  • 第十五届蓝桥杯第三期模拟赛(Java)
  • vscode中eslint插件不生效问题
  • Go程序是如何编译并运行起来的(图文详解)
  • 程序员如何选择职业赛道
  • GOWIN软件使用
  • Ajax (1)
  • Python基础语法:基本数据类型(数字类型和布尔类型)
  • springboot 下载 Excel 文件的 Controller 层案例
  • RabbitMQ队列
  • Day12:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份
  • 使用正确的技术和项目管理工具来定义项目范围