关闭

一款基于LLM的模糊测试对象生成与评估框架

发表于:2024-3-12 09:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Alpha_h4ck    来源:FreeBuf

  关于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-gen
  python3 -m venv .venv
  source .venv/bin/activate
  pip install -r requirements.txt
  LLM访问
  Vertex AI
  访问Vertex AI模型需要一个启用了Vertex AI的Google云项目(GCP)。
  然后完成GCP身份认证:
  gcloud auth login
  gcloud auth application-default login
  gcloud 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开源许可证协议。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号