
Fuzzer guiado por cobertura que utiliza rastreo de taint y optimización escalar para resolver restricciones de ruta sin ejecución simbólica, mejorando la cobertura de ramas para el descubrimiento de vulnerabilidades.
Angora es un fuzzer guiado por cobertura basado en mutaciones. El objetivo principal de Angora es aumentar la cobertura de ramas resolviendo restricciones de rutas sin ejecución simbólica.
Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh.Añade las siguientes líneas en el archivo de configuración del shell (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
El script de compilación resolverá la mayoría de las dependencias y configurará el entorno de ejecución.
./build/build.sh
Al igual que con AFL, los volcados de núcleo del sistema deben estar deshabilitados.
echo core | sudo tee /proc/sys/kernel/core_pattern
Comprueba si Angora se compiló correctamente.
cd /path-to-angora/tests
./test.sh mini
Angora compila el programa en dos binarios separados, cada uno con su respectiva
instrumentación. Usando programas autoconf como ejemplo, estos son los pasos necesarios.
# 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
Si no logras compilar con este método, prueba con wllvm y gllvm descritos en Compilar un programa objetivo.
Además, hemos implementado el análisis de taint con libdft64 en lugar de DFSan (Usar libdft64 para el seguimiento de taint).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Para más información, consulta la documentación en el directorio docs/.