
Fuzzer guiado por cobertura que usa rastreamento de taint e otimização escalar para resolver restrições de caminho sem execução simbólica, melhorando a cobertura de ramos para a descoberta de vulnerabilidades.
O Angora é um fuzzer guiado por cobertura baseado em mutação. O principal objetivo do Angora é aumentar a cobertura de ramos resolvendo restrições de caminho sem execução simbólica.
Arxiv: Angora: Fuzzing Eficiente por Busca Fundamentada, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh.Adicione as seguintes entradas no arquivo de configuração do shell (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
O script de compilação resolverá a maioria das dependências e configurará o ambiente de execução.
./build/build.sh
Como no AFL, os core dumps do sistema devem ser desabilitados.
echo core | sudo tee /proc/sys/kernel/core_pattern
Teste se o Angora foi compilado com sucesso.
cd /path-to-angora/tests
./test.sh mini
O Angora compila o programa em dois binários separados, cada um com sua respectiva
instrumentação. Usando programas autoconf como exemplo, estes são os passos necessários.
# 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
Se você não conseguir compilar com essa abordagem, tente wllvm e gllvm descritos em Compilando um programa alvo.
Além disso, implementamos análise de taint com libdft64 em vez de DFSan (Use libdft64 para rastreamento de taint).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Para mais informações, consulte a documentação no diretório
docs/.