
Fuzzer guidato dalla copertura che utilizza il tracciamento del taint e l'ottimizzazione scalare per risolvere i vincoli di percorso senza esecuzione simbolica, migliorando la copertura dei rami per la scoperta di vulnerabilità.
Angora è un fuzzer guidato dalla copertura basato su mutazioni. L'obiettivo principale di Angora è aumentare la copertura dei rami risolvendo i vincoli di percorso senza esecuzione simbolica.
Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh.Aggiungi le seguenti voci al file di configurazione della shell (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
Lo script di compilazione risolverà la maggior parte delle dipendenze e configurerà l'ambiente di esecuzione.
./build/build.sh
Come per AFL, i core dump di sistema devono essere disabilitati.
echo core | sudo tee /proc/sys/kernel/core_pattern
Verifica che Angora sia stato compilato correttamente.
cd /path-to-angora/tests
./test.sh mini
Angora compila il programma in due binari separati, ciascuno con la rispettiva strumentazione. Usando i programmi autoconf come esempio, ecco i passaggi richiesti.
# 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 non riesci a compilare con questo approccio, prova wllvm e gllvm descritti in Compilazione di un programma target.
Inoltre, abbiamo implementato l'analisi del taint con libdft64 invece di DFSan (Uso di libdft64 per il tracciamento del taint).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Per maggiori informazioni, fare riferimento alla documentazione nella directory docs/.