|
| 1 | +# Краткий обзор работы инструмент Futag |
| 2 | + |
| 3 | +## 1. Что Futag делает? |
| 4 | + |
| 5 | +- Futag пытается генерировать фаззинг-обертки для функций в бибиотеки. На данный момент генерируются 2 формата фаззинг-оберкток LibFuzzer и AFLPlusPlus. |
| 6 | + |
| 7 | +## 2. Что входит в инструмент Futag? |
| 8 | + |
| 9 | +- Futag включает в себя проекты clang и compiler-rt проекта LLVM (llvm-project). Futag добавил в clang чекеры (checkers), матчеры (matchers) для анализа исходного кода тестируемой библиотеки. |
| 10 | + |
| 11 | +- Кроме того Futag имеет Питон-пакет, который помогает: |
| 12 | + - запустить сборку; |
| 13 | + - установить (в пользовательском директории); |
| 14 | + - собрать результат анализа; |
| 15 | + - генерировать фаззинг-обертки; |
| 16 | + - фаззить и собрать результат фаззинга |
| 17 | + |
| 18 | +## 3. Скрипт запуска |
| 19 | + |
| 20 | +Ниже приведен пример сценария запуска Futag, комментарии объясняют, как работает Futag. |
| 21 | + |
| 22 | +```python |
| 23 | +from futag.preprocessor import * |
| 24 | +from futag.generator import * |
| 25 | +from futag.fuzzer import * |
| 26 | +from futag.sysmsg import * |
| 27 | + |
| 28 | +FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/" # Путь к директории инструмента Futag "futag-llvm" [*] |
| 29 | +lib_path = "curl-7.85.0" # путь к директории содержащей исходные кода исследуемого ПО [*] |
| 30 | + |
| 31 | +lib_test = Builder( # модуль для запуска сборки и анализа |
| 32 | + FUTAG_PATH, |
| 33 | + lib_path, |
| 34 | + clean=True, # перед запуска удаляются ли созданные папки инструментом Futag [1] |
| 35 | + processes=16, # количество потоков при сборке |
| 36 | + build_ex_params="--without-ssl --disable-ldap --disable-ldaps" # дополнительные параметры при сборке библиотеки - данные параметры запускаются на этапе конфигурации библиотеки curl [*] |
| 37 | +) |
| 38 | +lib_test.auto_build() # инструмент автоматически собирает, устанавливает библиотеку в папки из вышесказанного [1] |
| 39 | +lib_test.analyze() # запуск сборки результата анализа в файл futag-analysis-result.json |
| 40 | + |
| 41 | +lib_test = Generator( # модуль для генерации |
| 42 | + FUTAG_PATH, |
| 43 | + lib_path, |
| 44 | + target_type=LIBFUZZER, # формат фаззинг-оберток: LIBFUZZER или AFLPLUSPLUS |
| 45 | +) |
| 46 | +lib_test.gen_targets() # генерация оберток |
| 47 | +lib_test.compile_targets( # функция для компиляции оберток |
| 48 | + 16, |
| 49 | + keep_failed=True, # сохранить ли не скомпилированные обертки |
| 50 | + extra_include="-DHAVE_CONFIG_H", # дополнительные параметры включаются в строку компиляции. Данный параметр включается при сборке curl [*] |
| 51 | + extra_dynamiclink="-lgsasl -lpsl -lbrotlidec -lz -lidn2" # системые библиотеки включаются на этапе линковки. Данные библиотеки включаются при сборке curl [*] |
| 52 | +) |
| 53 | + |
| 54 | +fuzzer = Fuzzer( # модуль для фаззинга |
| 55 | + FUTAG_PATH, |
| 56 | + fuzz_driver_path="curl-7.85.0/futag-fuzz-drivers", # путь к папке, содержащей скомпилированные обертки |
| 57 | + totaltime=10, # время фаззинга одной обертки |
| 58 | + coverage=True # показывается ли покрытие |
| 59 | +) |
| 60 | +fuzzer.fuzz() # функция для запуска фаззинга |
| 61 | +``` |
| 62 | + |
0 commit comments