OSS-Fuzz 全解析为开源软件构建持续模糊测试Fuzzing体系【免费下载链接】oss-fuzzOSS-Fuzz - continuous fuzzing for open source software.项目地址: https://gitcode.com/gh_mirrors/os/oss-fuzz导读本文以 OSS-Fuzz 项目主文档为核心系统讲解 Google 面向开源软件推出的持续模糊测试服务包括 libFuzzer、AFL、Honggfuzz 三大引擎与 Sanitizer 的结合方式、支持的语言与架构、从编写 fuzz target 到漏洞修复闭环的完整工作流程以及基于仓库真实配置以 curl 项目为例的集成实战方法。读完本文你将理解 OSS-Fuzz 的架构原理掌握将一个开源项目接入持续模糊测试的关键配置要素并能在仓库中对照源码与示例快速上手。什么是 OSS-FuzzFuzz testing模糊测试是发现软件编程错误的一项成熟技术。许多可被检测的错误——例如缓冲区溢出——都可能带来严重的安全后果。Google 通过将**引导式进程内模糊测试guided in-process fuzzing**部署到 Chrome 组件中发现了数以千计的安全漏洞与稳定性缺陷OSS-Fuzz 的目标就是把这项服务开放给整个开源社区。OSS-Fuzz 与 Core Infrastructure Initiative 和 OpenSSF 合作通过将现代模糊测试技术与**可扩展的分布式执行scalable, distributed execution**相结合让常见的开源软件变得更加安全和稳定。需要注意的是不符合 OSS-Fuzz 接入条件的项目例如闭源软件可以自行部署 ClusterFuzz 或 ClusterFuzzLite 的实例来获得类似能力。从技术栈来看OSS-Fuzz 支持 libFuzzer、AFL 和 Honggfuzz 三种模糊测试引擎配合 Sanitizers 使用并由 ClusterFuzz 承担分布式模糊测试执行环境与缺陷报告工具的角色。核心技术栈引擎 Sanitizer 分布式执行三种模糊测试引擎引擎特点适用场景libFuzzer与 LLVM 深度集成的进程内in-process覆盖率引导模糊器编译时通过 sanitizer coverage 收集代码覆盖率反馈C/C/Rust 等 LLVM 生态OSS-Fuzz 中最常用的引擎AFL经典的 fork-server 式覆盖率引导模糊器无需修改被测代码支持持久化模式难以改造为进程内模型的传统 C/C 项目Honggfuzz轻量级、硬件反馈Intel PT 等驱动的模糊器支持软件与硬件两种反馈路径需要低开销、高吞吐的模糊场景Sanitizer 组合引擎负责生成与变异输入而 Sanitizer 负责在运行时捕获内存错误、未定义行为等缺陷。在 OSS-Fuzz 中address、undefined、memory 是最常见的组合可通过项目配置文件的sanitizers字段逐一声明见下文 curl 示例。分布式执行ClusterFuzzClusterFuzz 是 OSS-Fuzz 的执行后端它从构建产物存储中拉取 fuzz target在分布式集群中调度执行、自动复现并最小化崩溃用例、做回归验证最后把缺陷自动上报到 issue tracker。它也是闭源项目可自行部署的独立组件。支持的语言与架构目前OSS-Fuzz 支持C/C、Rust、Go、Python、Java/JVM、JavaScript 和 Lua代码其他由 LLVM 支持的语言也可能正常工作。架构方面OSS-Fuzz 支持 fuzzingx86_64 和 i386构建。仓库的 infra/base-images 目录印证了这套多语言支持除了通用的base-builder、base-clang、base-image、base-runner以及调试用base-runner-debug之外还提供了面向各语言的专用基础镜像包括base-builder-go、base-builder-javascript、base-builder-jvm、base-builder-python、base-builder-ruby、base-builder-rust、base-builder-swift等。不同语言的接入方式详见 docs/getting-started/new-project-guide 下的语言专项指南go_lang.md、jvm_lang.md、python_lang.md、rust_lang.md、javascript_lang.md、lua_lang.md、swift_lang.md、bazel.md。工作原理从 fuzz target 到漏洞修复的完整闭环OSS-Fuzz 的整体工作流程详见 docs/oss-fuzz/architecture.md可以概括为以下步骤编写 fuzz target开源项目维护者或外部志愿者编写一个或多个 fuzz target。项目接入与提交配置项目被接纳到 OSS-Fuzz 后开发者把构建配置project.yaml、Dockerfile、build.sh等提交到仓库。构建 fuzz targetOSS-Fuzz 的 builder 根据提交的配置构建项目与 fuzz target仓库中infra/build_fuzzers.Dockerfile、infra/build_fuzzers.ubuntu-24-04.Dockerfile定义了构建环境。上传产物builder 将构建好的 fuzz target 上传到 OSS-Fuzz 的 GCS bucket。分布式模糊测试ClusterFuzz 下载 fuzz target 并开始对项目进行持续模糊测试。自动上报缺陷ClusterFuzz 发现 bug 后自动将问题上报到 OSS-Fuzz 的 issue tracker使用独立 tracker 的原因可参考 faq 中的说明。通知维护者项目所有者会被加入到 bug 报告的 CC 列表。修复与致谢项目开发者在上游修复 bug并在提交信息中包含字符串Credit to OSS-Fuzz以注明发现来源。修复完成后ClusterFuzz 会自动验证修复、添加评论并关闭 issue在修复被验证或上报 90 天之后取两者中较早者该 issue 会转为公开。集成实战以 curl 项目为例把一个开源项目接入 OSS-Fuzz核心是在 projects 目录下为项目创建一个子目录并提交三类关键文件project.yaml元数据与配置、Dockerfile构建环境、build.sh构建脚本。这里以仓库中真实的 projects/curl 为例进行拆解。1. project.yaml项目元数据与引擎选择base_os_version: ubuntu-24-04 homepage: https://curl.haxx.se/ language: c primary_contact: danielhaxx.se auto_ccs: - daniel.haxxgmail.com - cmeister2gmail.com - stefan.eissinggmail.com sanitizers: - address - undefined - memory fuzzing_engines: - afl - honggfuzz - libfuzzer architectures: - x86_64 - i386 coverage_extra_args: -ignore-filename-regex.*curl_fuzzer/build/.* main_repo: https://github.com/curl/curl.git各字段的作用base_os_version构建基础镜像的操作系统版本例如ubuntu-24-04。language项目主语言决定使用哪套语言专用构建链。primary_contact/auto_ccs缺陷报告的接收人主要联系人与自动抄送列表。sanitizers启用的 Sanitizer 列表address、undefined、memory 等。fuzzing_engines启用的模糊测试引擎列表afl、honggfuzz、libfuzzer对应前文所述的三大引擎。architectures需要 fuzz 的架构x86_64、i386。coverage_extra_args额外传给覆盖率收集过程的参数此处用于忽略 curl_fuzzer 构建目录中的文件名匹配项。main_repo项目主仓库地址。仓库还提供了模板化示例 projects/example/project.yaml通过disabled: true与vendor_ccs: []演示了可选字段的写法供新项目参照。2. Dockerfile搭建构建环境FROM gcr.io/oss-fuzz-base/base-builder:ubuntu-24-04 RUN git clone --depth 1 https://github.com/curl/curl.git /src/curl RUN git clone --depth 1 https://github.com/curl/curl-fuzzer.git /src/curl_fuzzer # Use curl-fuzzers scripts to get latest dependencies. RUN $SRC/curl_fuzzer/scripts/ossfuzzdeps.sh WORKDIR $SRC/curl_fuzzer COPY build.sh run_tests.sh $SRC/要点基础镜像选用gcr.io/oss-fuzz-base/base-builder在/src下克隆项目源码与 fuzz target 代码最后把build.sh以及可选的run_tests.sh拷贝进镜像。更简化的骨架可参考 projects/example/Dockerfile它演示了安装系统依赖如make、克隆源码并COPY build.sh $SRC/的最小流程。3. build.sh 与 run_tests.sh构建与回归测试build.sh是真正的构建入口通常需要完成三件事用$CC/$CXX编译器编译被测库、编译 fuzz target、把可执行文件安装到$OUT目录构建时通过$CFLAGS/$LIB_FUZZING_ENGINE等环境变量接入覆盖率引导与对应引擎的驱动。回归测试则可由可选的run_tests.sh承担例如 curl 项目的 projects/curl/run_tests.sh#!/bin/bash -eu cd $SRC/curl make test更多语言专项接入Bazel、Go、JVM、Python、Rust、JavaScript、Lua、Swift的构建写法见 docs/getting-started/new-project-guide 下的分语言指南完整的新项目接入流程含 fuzz target 编写与集成建议见 docs/getting-started/new_project_guide.md 与 docs/new_project_guide.md。4. 本地复现与高级主题接入后如需在本地验证构建与复现崩溃可参考 docs/reproducing.md涵盖本地构建 fuzz target 与复现报告与 docs/advanced-topics/reproducing.md调试技巧见 docs/advanced-topics/debugging.md。此外docs/advanced-topics 还覆盖了语料库管理corpora.md、代码覆盖率code_coverage.md、fuzz introspectorfuzz_introspector.md等进阶主题。成效与影响力截至 2025 年 5 月OSS-Fuzz 已帮助发现并修复了超过 13,000 个安全漏洞和 50,000 个缺陷覆盖了1,000 多个项目可在本仓库 projects 目录下逐一查看已接入项目及其配置。这些数字来自项目主文档的事实性陈述反映的是持续模糊测试在真实开源生态中可量化的安全价值。深入学习的路径术语速查docs/glossary.md语言专项指南docs/getting-started/new-project-guide架构细节docs/oss-fuzz/architecture.mdClusterFuzz 详解docs/further-reading/clusterfuzz.mdfuzz target 编写与集成建议docs/ideal_integration.md、docs/advanced-topics/ideal_integration.md实践建议如果你维护的开源项目尚未接入持续模糊测试可以从本仓库 projects/example 的模板起步先编写一个最小的 fuzz target再对照 curl 等成熟项目的project.yaml与Dockerfile完善配置最后按 docs/getting-started/accepting_new_projects.md 的接纳标准提交接入申请。接入后issue 中请遵守 docs/getting-started/bug_disclosure_guidelines.md 的披露规范。【免费下载链接】oss-fuzzOSS-Fuzz - continuous fuzzing for open source software.项目地址: https://gitcode.com/gh_mirrors/os/oss-fuzz创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
搞定非法程序检测:从源码解析到实战避坑指南 搞定非法程序检测:从源码解析到实战避坑指南 刚接触嵌入式开发或者负责项目现场运维的朋友,是不是经常遇到这种糟心时刻?明明代码逻辑跑通了,一上真机或者在特定环境下,系统突然弹窗提示“检测到非法程序”或者“权限不足”,甚至直接闪退。配置环境就卡… · 2026/9/23 2:03:09
q宠大乐斗挂性能调优避坑指南:告别卡顿与封号 q宠大乐斗挂性能调优避坑指南:告别卡顿与封号 刚学会 Python 或 Java 基础语法,看着网上那些关于《q宠大乐斗挂》的源码,心里是不是特别痒?想自己跑起来,结果一运行就卡死,或者刚上线没两分钟就被系统判定异常。这种“学会语法却不知怎… · 2026/9/23 2:03:03
Apache Druid 数据摄入排障实战指南:从事件丢失到 Segment 交接的完整排查手册 Apache Druid 数据摄入排障实战指南:从事件丢失到 Segment 交接的完整排查手册 【免费下载链接】druid Apache Druid: a high performance real-time analytics database. 项目地址: https://gitcode.com/gh_mirrors/druid7/druid 本指南基于 Apache Druid 仓… · 2026/9/23 2:57:24
Agent五层架构:从执行层到接入层的工程故障定位指南 1. 这张图谱不是“未来预测”,而是当下正在发生的产业切片你点开任何一篇讲Agent的公众号文章,十有八九开头就是:“2026年,AI Agent将彻底重构人机交互范式……”——这种话术我听了三年,也写了两年。直到去年底&#… · 2026/9/23 2:57:18
基于Flask和Vue的电子书阅读器系统开发实践 1. 项目概述这个基于Python Flask框架开发的电子书阅读器系统,是一个典型的Web应用开发项目。它采用前后端分离架构,后端使用Flask提供RESTful API接口,前端采用Vue.js构建用户界面,实现了电子书的管理和阅读功能。系统特别强调了… · 2026/9/23 2:57:12
专科生必看!8个降AI率工具实测,论文稳过AIGC检测 专科生写毕业论文、课程报告、顶岗实习总结的时候,最头疼的往往不是没话写,而是写完之后学校会用AIGC检测系统扫一遍,给你一个刺眼的"AI率"。我见过太多人明明是自己熬夜写的,就因为用了AI辅助查资料、列提纲࿰… · 2026/9/23 2:57:12
麦芒5华为开发避坑:3个致命错误与完整示例 麦芒5华为开发避坑:3个致命错误与完整示例 华为麦芒5的官方文档堆成山,翻半天抓不住重点?别急,直接看这套 完整示例 ,专治各种“看文档头大”。… · 2026/9/23 2:57:12
基于PyTorch的红枣缺陷检测:从数据到产线部署全流程解析 简介:一套面向红枣表面缺陷检测的Matlab程序包,适合图像处理初学者和农产品质检方向的开发者参考。压缩包仅274KB,共5个文件,包含可直接运行的.m脚本、两种红枣示例图像,以及两份Word说明文档,分别讲解红枣… · 2026/9/23 2:57:12
3招搞定手机怎么下载微信面试难题实战项目解析 3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29