ossfuzz은(는) 무엇을 하나요?
OSS-Fuzz는 오픈소스 프로젝트에 무료 지속적 퍼징을 제공합니다. 지속적 퍼징 인프라를 설정하거나 프로젝트를 등록할 때 사용하세요.
개요
OSS-Fuzz는 Google이 운영하는 서비스로, 중요한 오픈소스 소프트웨어에서 보안 취약점을 찾기 위해 지속적인 퍼징을 제공합니다. 이 스킬은 프로젝트를 OSS-Fuzz에 등록하고 퍼징 인프라를 구성하는 과정을 안내합니다.
지원 언어
- C/C++ (libFuzzer, AFL, Honggfuzz)
- Go (go-fuzz)
- Rust (cargo-fuzz)
- Python (Atheris)
- Java (Jazzer)
사전 요구 사항
- GitHub 또는 GitLab에 호스팅된 오픈소스 프로젝트
- OSI 승인 오픈소스 라이선스
- 프로젝트 관리자의 등록 동의
시작하기
1단계: 퍼징 타겟 추가
프로젝트 저장소에 퍼징 테스트를 추가합니다. 예를 들어, C++ 프로젝트의 경우:
#include <stdint.h>
#include <stddef.h>
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// 퍼징할 코드 호출
MyFunction(data, size);
return 0;
}
2단계: Dockerfile 생성
OSS-Fuzz는 Docker를 사용하여 빌드 환경을 격리합니다. 프로젝트 루트에 Dockerfile을 생성합니다:
FROM gcr.io/oss-fuzz-base/base-builder
RUN apt-get update && apt-get install -y make autoconf automake libtool
COPY . $SRC/project
WORKDIR $SRC/project
COPY build.sh $SRC/
3단계: build.sh 스크립트 작성
build.sh 파일을 생성하여 퍼저를 컴파일합니다:
#!/bin/bash -eu
cd $SRC/project
make
$CXX $CXXFLAGS -std=c++11 -I. \
$SRC/project/fuzz_target.cc \
-o $OUT/fuzz_target \
$LIB_FUZZING_ENGINE \
$SRC/project/lib/lib.a
4단계: 프로젝트 등록
projects/ 디렉토리에 project.yaml 파일을 추가합니다:
homepage: "https://project-website.example.com"
language: c++
primary_contact: "[email protected]"
auto_ccs:
- "[email protected]"
5단계: 테스트 및 제출
로컬에서 퍼징을 테스트합니다:
docker run -it --rm --privileged \
-v $(pwd):/workspace \
gcr.io/oss-fuzz-base/base-runner \
/workspace/fuzz_target
이상이 없으면 OSS-Fuzz 저장소에 풀 리퀘스트를 보냅니다.
추가 리소스
라이선스
Apache 2.0