
기호 실행 없이 테인트 추적과 스칼라 최적화를 통해 경로 제약 조건을 해결하여 분기 커버리지를 향상시키고 취약점 발견을 돕는 커버리지 가이드 퍼저입니다.
Angora는 변이(mutation) 기반 커버리지 가이드 퍼저입니다. Angora의 주요 목표는 기호 실행(symbolic execution) 없이 경로 제약 조건을 해결하여 브랜치 커버리지를 높이는 것입니다.
Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh를 실행하세요.셸 구성 파일(~/.bashrc, ~/.zshrc)에 다음 항목을 추가하세요.
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
빌드 스크립트는 대부분의 의존성을 해결하고 런타임 환경을 설정합니다.
./build/build.sh
AFL과 마찬가지로 시스템 코어 덤프를 비활성화해야 합니다.
echo core | sudo tee /proc/sys/kernel/core_pattern
Angora가 성공적으로 빌드되었는지 테스트합니다.
cd /path-to-angora/tests
./test.sh mini
Angora는 프로그램을 각각의 계측(instrumentation)이 적용된 두 개의 개별 바이너리로 컴파일합니다. autoconf 프로그램을 예로 들면 다음과 같은 단계가 필요합니다.
# Use the instrumenting compilers
CC=/path/to/angora/bin/angora-clang \
CXX=/path/to/angora/bin/angora-clang++ \
LD=/path/to/angora/bin/angora-clang \
PREFIX=/path/to/target/directory \
./configure --disable-shared
# Build with taint tracking support
USE_TRACK=1 make -j
make install
# Save the compiled target binary into a new directory
# and rename it with .taint postfix, such as uniq.taint
# Build with light instrumentation support
make clean
USE_FAST=1 make -j
make install
# Save the compiled binary into the directory previously
# created and rename it with .fast postfix, such as uniq.fast
이 방법으로 빌드하지 못한 경우 대상 프로그램 빌드에 설명된 wllvm과 gllvm을 시도해 보세요.
또한 DFSan 대신 libdft64를 사용하여 오염(taint) 분석을 구현했습니다 (libdft64를 사용한 오염 추적).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
자세한 내용은 docs/ 디렉터리의 문서를 참조하세요.