Оглавление
1. Описание
FUTAG — это автоматизированный инструмент генерации фаззинг-целей для программных библиотек. В отличие от обычных программ, программная библиотека может не содержать точки входа и не принимать входные данные, поэтому создание вручную фаззинг-цели для анализа программных библиотек остается проблемой и требует ресурсов. Одним из решением данной проблемы является автоматизация процесса создания фаззинг-целей, что уменьшает количество затрачиваемых ресурсов. FUTAG во время работы использует статический анализ для поиска:
- Зависимостей сущностей (типы данных, функции, структуры и т.д.) в исходном коде целевой библиотеки.
- Контекста использования библиотеки.
Далее информация, полученная по результатам статического анализа, используется для генерации фаззинг-целей.
Данный проект основан на LLVM со статическим анализом Clang, а также LLVM lto и распространяется под лицензией "GPL v3 license"
2. Инструкция по сборке
Данная инструкция позволяет собрать копию проекта и запустить её в Unix-подобной системе. FUTAG использует инструменты Clang и Clang LLVM в качестве внешнего интерфейса для анализа библиотек и генерации фаззинг-целей.
2.1. Зависимости
Инструмент FUTAG основан на LLVM-project. Для компиляции проекта необходимо, чтобы следующие пакеты были установлены в вашей системе:
- CMake >=3.13.4 cmake-3.19.3-Linux-x86_64.sh - Makefile/workspace generator
- GCC>=5.1.0 C/C++ compiler1
- Python >=3.6 Automated test suite2
- Zlib >=1.2.3.4 Compression library3
- GNU Make 3.79, 3.79.1 Makefile/build processor
Для получения более детальной информации о зависимостях, необходимых для сборки LLVM, вы можете ознакомиться с документацией по указанной ссылке
2.2. Сборка и установка
-
Склонируйте проект с подмодулями LLVM:
~$ git clone --recurse-submodules https://github.com/ispras/Futag
-
Создайте директорию для сборки инструмента. Затем скопируйте в неё скрипт build.sh и запустите в ней скопированный скрипт:
~/futag$ mkdir build ~/futag$ cp build.sh build/ && cd build ~/futag/build$ ./build.sh
-
В результате инструмент будет установлен в директорию ../../futag-package
-
Для корректной работы инструмента необходимо также установить в python пакет "futag":
~$ pip install /path/to/python/futag-package/dist/futag-0.1.tar.gz
3. Примеры использования
Использование FUTAG на тестовом примере:
- Запуск сборки, проверки и анализа
# package futag must be already installed
from futag.preprocessor import *
json0_13 = Builder("../../futag-llvm-package", "json-c-json-c-0.13.1-20180305")
json0_13.auto_build()
json0_13.analyze()
- Генерация и компиляция драйверов
# package futag must be already installed
from futag.generator import *
g = Generator(
"/path/to/futag-analysis-result.json",
"/path/to/futag/package/", # path to the futag-package
"/path/to/json-c-root/" # library root
)
# Generate fuzz drivers
g.gen_targets()
# Compile fuzz drivers
g.compile_targets()
- Успешно скомпилированные цели находятся в каталоге futag-fuzz-drivers. Каждый драйвер находится внутри своей поддиректории.
4. Авторы
- Thien Tran ([email protected])
- Shamil Kurmangaleev ([email protected])
- Theodor Arsenij Larionov-Trichkin ([email protected])
5. Статьи
- C. T. Tran and S. Kurmangaleev, "Futag: Automated fuzz target generator for testing software libraries" 2021 Ivannikov Memorial Workshop (IVMEM), 2021, pp. 80-85, doi: 10.1109/IVMEM53963.2021.00021.