
Фаззер, управляемый покрытием, который использует отслеживание потока данных и скалярную оптимизацию для решения ограничений пути без символьного выполнения, улучшая покрытие ветвей для обнаружения уязвимостей.
Angora — это фаззер, основанный на мутациях и управляемый покрытием. Основная цель Angora — увеличить покрытие ветвей, решая ограничения пути без символьного выполнения.
Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh.Добавьте следующие записи в файл конфигурации оболочки (~/.bashrc, ~/.zshrc).
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
Скрипт сборки установит большинство зависимостей и настроит среду выполнения.
./build/build.sh
Как и в AFL, необходимо отключить системные аварийные дампы (core dumps).
echo core | sudo tee /proc/sys/kernel/core_pattern
Проверьте, что Angora собрался успешно.
cd /path-to-angora/tests
./test.sh mini
Angora компилирует программу в два отдельных бинарных файла, каждый со своей
инструментацией. На примере программ autoconf ниже приведены необходимые шаги.
# 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
Если не удалось собрать таким способом, попробуйте wllvm и gllvm, описанные в разделе Сборка целевой программы.
Кроме того, мы реализовали taint-анализ с помощью libdft64 вместо DFSan (Использование libdft64 для taint-отслеживания).
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
Для получения дополнительной информации обратитесь к документации в каталоге
docs/.