위키득계정 ↗
기술

Cargo-fuzz

Cargo-fuzz기술
분야
Rust 퍼징 실행
탐색 기반
libFuzzer
도구 조건
nightly Rust와 지원 컴파일 환경
주요 작업
목표 실행과 입력 및 코퍼스 축소
Cargo-fuzz는 Rust 프로젝트에서 libFuzzer 기반 퍼징을 구성하고 실행하는 Cargo 하위 명령이다. 검사 목표를 만들고 실패 입력을 탐색하거나 발견한 입력과 코퍼스를 줄이는 기능을 제공한다.

검사 목표를 만드는 이유

프로젝트를 초기화한 뒤 퍼저가 호출할 목표 함수를 구성한다. 입력을 대상 로직에 전달하고 잘못된 상태나 패닉을 드러내도록 작성한다. 라이브러리 전체가 자동으로 빠짐없이 검사되는 것은 아니므로 진입점과 입력 해석 및 확인 조건을 선택하는 과정이 중요하다. 워크스페이스의 구성도 대상 프로젝트에 맞춘다.

실패 입력과 코퍼스 축소

실패를 일으키는 입력 하나를 줄이는 작업과 전체 입력 모음에서 중복적인 사례를 줄이는 작업을 구분한다. 전자는 원인 파악을 돕고 후자는 탐색에 사용할 자료의 크기를 관리한다. 구조화된 입력은 디버그 표현으로 확인할 수 있다. 축소 후에도 같은 문제를 재현하는지 대상 소스와 실행 조건을 맞춰 확인한다.

실행 환경과 결과 해석

공식 안내는 LLVM sanitizer 지원과 nightly 플래그 및 C++ 컴파일러 같은 실행 조건을 설명한다. 지원되는 아키텍처와 운영체제를 확인해야 하며 일반 Rust 프로젝트가 빌드된다는 사실만으로 퍼징 환경이 준비되지는 않는다. 커버리지 자료도 생성할 수 있지만 제한된 실행에서 실패를 찾지 못했다고 모든 입력의 안전성이 입증되는 것은 아니다.

관련 문서

libFuzzer / Arbitrary Rust / Bolero Rust 검사 도구 / Proptest