
Coverage-gesteuerter Fuzzer, der Taint-Tracking und skalare Optimierung nutzt, um Pfadbeschränkungen ohne symbolische Ausführung zu lösen und so die Zweigabdeckung für die Erkennung von Schwachstellen zu verbessern.
Angora ist ein mutationsbasierter, coverage-gesteuerter Fuzzer. Das Hauptziel von Angora ist es, die Branch-Abdeckung zu erhöhen, indem Pfadbeschränkungen ohne symbolische Ausführung gelöst werden.
Arxiv: Angora: Effizientes Fuzzing durch prinzipielle Suche, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh ausführen.Fügen Sie die folgenden Einträge in die Shell-Konfigurationsdatei ein (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
Das Build-Skript löst die meisten Abhängigkeiten auf und richtet die Laufzeitumgebung ein.
./build/build.sh
Wie bei AFL müssen System-Core-Dumps deaktiviert werden.
echo core | sudo tee /proc/sys/kernel/core_pattern
Testen Sie, ob Angora erfolgreich erstellt wurde.
cd /path-to-angora/tests
./test.sh mini
Angora kompiliert das Programm in zwei separate Binärdateien, jeweils mit der entsprechenden
Instrumentierung. Am Beispiel von autoconf-Programmen sind hier die erforderlichen Schritte.
# 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
Wenn Sie mit diesem Ansatz keinen Build erstellen können, versuchen Sie es mit wllvm und gllvm, wie in Ein Zielprogramm erstellen beschrieben.
Außerdem haben wir die Taint-Analyse mit libdft64 anstelle von DFSan implementiert (libdft64 für Taint-Tracking verwenden).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Weitere Informationen finden Sie in der Dokumentation im
Verzeichnis docs/.