OSS-Fuzz支持全语言攻略:C/C++、Python、Java到Rust全覆盖

OSS-Fuzz支持全语言攻略:C/C++、Python、Java到Rust全覆盖

【免费下载链接】oss-fuzz OSS-Fuzz - continuous fuzzing for open source software. 【免费下载链接】oss-fuzz 项目地址: https://gitcode.com/gh_mirrors/os/oss-fuzz

OSS-Fuzz作为开源软件的持续模糊测试平台,支持多种编程语言的模糊测试。本文将详细介绍如何在OSS-Fuzz中为C/C++、Python、Java和Rust等主流编程语言配置模糊测试环境,帮助开发人员提升项目的安全性。

项目配置基础

在开始为特定语言配置模糊测试前,需要先了解OSS-Fuzz的基本项目结构和配置文件。每个OSS-Fuzz项目在projects/目录下都有一个独立的子目录,包含三个核心配置文件:project.yamlDockerfilebuild.sh。可以使用以下命令自动生成这些配置文件的模板:

$ cd /path/to/oss-fuzz
$ export PROJECT_NAME=<project_name>
$ export LANGUAGE=<project_language>
$ python3 infra/helper.py generate $PROJECT_NAME --language=$LANGUAGE

其中,project.yaml用于存储项目元数据,包括项目主页、编程语言、主要联系人等信息。Dockerfile定义构建项目所需的容器环境,build.sh则描述如何编译项目和模糊测试目标。

C/C++项目配置

C/C++是OSS-Fuzz支持最完善的语言之一。对于C/C++项目,project.yaml中的language字段应设置为c++。以下是一个典型的C/C++项目配置示例:

project.yaml示例

homepage: https://example.com
language: c++
primary_contact: developer@example.com
main_repo: https://gitcode.com/gh_mirrors/os/oss-fuzz
sanitizers:
  - address
  - undefined

Dockerfile示例

FROM gcr.io/oss-fuzz-base/base-builder
RUN apt-get update && apt-get install -y build-essential
RUN git clone https://gitcode.com/gh_mirrors/os/oss-fuzz.git $SRC/oss-fuzz
WORKDIR $SRC/oss-fuzz
COPY build.sh $SRC/

build.sh示例

#!/bin/bash -eu
./configure
make -j$(nproc)
$CXX $CXXFLAGS -std=c++11 $SRC/fuzzer.cc -o $OUT/fuzzer $LIB_FUZZING_ENGINE .libs/libexample.a

C/C++项目的模糊测试目标通常使用libFuzzer引擎,需要在编译时链接$LIB_FUZZING_ENGINE环境变量指定的库。更多详细信息可参考官方文档:docs/getting-started/new_project_guide.md

Python项目配置

Python项目在OSS-Fuzz中通过python语言类型进行配置。与C/C++不同,Python项目通常使用afllibfuzzer引擎,需要安装相应的依赖库。

project.yaml示例

homepage: https://example.com/python-project
language: python
primary_contact: python-dev@example.com
main_repo: https://gitcode.com/gh_mirrors/os/oss-fuzz

Dockerfile示例

FROM gcr.io/oss-fuzz-base/base-builder-python
RUN pip install --upgrade pip
RUN git clone https://gitcode.com/gh_mirrors/os/oss-fuzz.git $SRC/oss-fuzz
WORKDIR $SRC/oss-fuzz
COPY build.sh $SRC/

build.sh示例

#!/bin/bash -eu
pip install .
cp $SRC/fuzzer.py $OUT/
echo "#!/usr/bin/env python3" > $OUT/fuzzer
echo "import sys" >> $OUT/fuzzer
echo "from fuzzer import fuzz" >> $OUT/fuzzer
echo "fuzz(sys.stdin.read())" >> $OUT/fuzzer
chmod +x $OUT/fuzzer

Python模糊测试目标通常是一个接受标准输入的脚本,通过读取输入数据并传递给被测试函数来实现模糊测试。

Java项目配置

Java项目在OSS-Fuzz中使用jvm语言类型配置,支持对Java、Kotlin和Scala等JVM语言编写的项目进行模糊测试。

project.yaml示例

homepage: https://example.com/java-project
language: jvm
primary_contact: java-dev@example.com
main_repo: https://gitcode.com/gh_mirrors/os/oss-fuzz

Dockerfile示例

FROM gcr.io/oss-fuzz-base/base-builder-jvm
RUN apt-get update && apt-get install -y maven
RUN git clone https://gitcode.com/gh_mirrors/os/oss-fuzz.git $SRC/oss-fuzz
WORKDIR $SRC/oss-fuzz
COPY build.sh $SRC/

build.sh示例

#!/bin/bash -eu
mvn clean package
cp target/*.jar $OUT/
java -jar $OUT/fuzzer.jar

Java项目通常使用Maven或Gradle构建,模糊测试目标可以打包为JAR文件,通过命令行执行。

Rust项目配置

Rust项目在OSS-Fuzz中通过rust语言类型配置,利用Cargo构建系统和cargo-fuzz工具进行模糊测试。

project.yaml示例

homepage: https://example.com/rust-project
language: rust
primary_contact: rust-dev@example.com
main_repo: https://gitcode.com/gh_mirrors/os/oss-fuzz

Dockerfile示例

FROM gcr.io/oss-fuzz-base/base-builder-rust
RUN git clone https://gitcode.com/gh_mirrors/os/oss-fuzz.git $SRC/oss-fuzz
WORKDIR $SRC/oss-fuzz
COPY build.sh $SRC/

build.sh示例

#!/bin/bash -eu
cargo install cargo-fuzz
cargo fuzz build
cp fuzz/target/x86_64-unknown-linux-gnu/release/fuzzer $OUT/

Rust项目的模糊测试通常使用cargo-fuzz工具,该工具会自动生成模糊测试目标并链接必要的库。

本地测试与调试

配置完成后,可以使用OSS-Fuzz提供的helper.py脚本在本地测试模糊测试环境是否正常工作:

# 构建项目镜像
$ python3 infra/helper.py build_image $PROJECT_NAME

# 构建模糊测试目标
$ python3 infra/helper.py build_fuzzers --sanitizer address $PROJECT_NAME

# 运行模糊测试
$ python3 infra/helper.py run_fuzzer $PROJECT_NAME <fuzz_target>

通过这些命令,可以在本地验证模糊测试目标是否能够正确编译和执行,及时发现并解决配置问题。

总结

OSS-Fuzz为多种编程语言提供了灵活的模糊测试解决方案。无论是编译型语言如C/C++、Rust,还是解释型语言如Python、Java,都可以通过简单的配置在OSS-Fuzz上实现持续模糊测试。开发人员可以根据项目的具体需求,选择合适的配置方式,提升软件的安全性和可靠性。更多高级配置和最佳实践,请参考官方文档:docs/advanced-topics/

【免费下载链接】oss-fuzz OSS-Fuzz - continuous fuzzing for open source software. 【免费下载链接】oss-fuzz 项目地址: https://gitcode.com/gh_mirrors/os/oss-fuzz

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值