
Fuzzer guidé par la couverture de code qui utilise le suivi de teinte et l'optimisation scalaire pour résoudre les contraintes de chemin sans exécution symbolique, améliorant ainsi la couverture de branches pour la découverte de vulnérabilités.
Angora est un fuzzer guidé par couverture et basé sur des mutations. L'objectif principal d'Angora est d'augmenter la couverture de branches en résolvant les contraintes de chemin sans exécution symbolique.
Arxiv : Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh.Ajoutez les entrées suivantes dans le fichier de configuration du shell (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
Le script de compilation résoudra la plupart des dépendances et configurera l'environnement d'exécution.
./build/build.sh
Comme avec AFL, les core dumps système doivent être désactivés.
echo core | sudo tee /proc/sys/kernel/core_pattern
Vérifiez qu'Angora a été compilé avec succès.
cd /path-to-angora/tests
./test.sh mini
Angora compile le programme en deux binaires distincts, chacun avec son instrumentation respective. En prenant les programmes autoconf comme exemple, voici les étapes requises.
# Utilisez les compilateurs d'instrumentation
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
# Compilez avec le support du suivi de teinte (taint)
USE_TRACK=1 make -j
make install
# Enregistrez le binaire cible compilé dans un nouveau répertoire
# et renommez-le avec le suffixe .taint, par exemple uniq.taint
# Compilez avec une instrumentation légère
make clean
USE_FAST=1 make -j
make install
# Enregistrez le binaire compilé dans le répertoire précédemment
# créé et renommez-le avec le suffixe .fast, par exemple uniq.fast
Si cette approche échoue, essayez wllvm et gllvm décrits dans Build a target program.
Nous avons également implémenté l'analyse de teinte avec libdft64 au lieu de DFSan (Use libdft64 for taint tracking).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Pour plus d'informations, veuillez consulter la documentation dans le répertoire docs/.