FUTAG est un outil de génération automatisé pour les libertins de phasage-concrets pour les bibliothèques de logiciels. Futag offre la possibilité de générer des concentrations de phases à la fois en l'absence de contextes d'utilisation de la bibliothèque testée, et le cas échéant. FUTAG utilise, comme interface externe, pour analyser le code source des outils de bibliothèques Clang.
Un analyseur statique implémenté dans FUTAG lors de l'assemblage de la bibliothèque testée est effectué par:
En présence de contextes d'utilisation, les recherches FUTAG pour les appels des fonctions constituent les dépendances entre les poursuites trouvées et rédigent les contextes d'appel.
FUTAG met également en œuvre la possibilité d'obtenir des contextes d'utilisation de la bibliothèque testée à partir d'un outil pour déterminer la surface de l'attaque natch.
Le travail de Futag est illustré dans la figure suivante: 
Ce projet est basé sur LLVM avec une analyse statique de Clang et est distribué sous la licence "Licence GPL V3"
Vous pouvez essayer d'assembler FUTAG avec des fichiers de quai prêts à l'emploi pour Ubuntu OS.
~ /futag-llvm$ ./buildAFLplusplus.shCette instruction vous permet de collecter une copie du projet et de la lancer dans le système de type Unix.
L'outil FUTAG est basé sur LLVM-Project. Pour la compilation du projet, il est nécessaire que les packages suivants soient installés dans votre système:
Pour obtenir des informations plus détaillées sur les dépendances nécessaires à l'assemblage de LLVM, vous pouvez vous familiariser avec la documentation sous le lien spécifié
Le système Ubuntu peut avoir besoin d'installer des packages:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.shCe script crée le répertoire Futag / Build et copie le script Futag / personnalisé-llvm / build.sh
~ /Futag/build$ ./build.shEn conséquence, l'outil sera installé dans le répertoire Futag / Futag-volvm
Pour l'assemblage aflplusplus, lancez le script buildaflplusplus.sh dans futag / futag-llvm
~ /Futag/futag-llvm$ ./buildAFLplusplus.sh ~ $ pip install -r futag-llvm/python-package/requirements.txt
~ $ pip install futag-llvm/python-package/futag-2.1.0.tar.gz from futag . preprocessor import *
FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/"
lib_path = "path/to/library/source/code"
build_test = Builder (
FUTAG_PATH ,
lib_path ,
clean = True , # удалить все папки сгенерированные Futag-ом перед сборкой
# intercept=True, # запуск компиляции с инструментом "intercept" для анализа compile_command.json
# processes=4, # количество задач при сборке
# build_ex_params="--with-openssl --with-mhash" # дополнительные параметры при сборке библиотеки
)
build_test . auto_build ()
build_test . analyze () from futag . generator import *
FUTAG_PATH = "/home/futag/Futag-tests/futag-llvm/"
lib_path = "path/to/library/source/code"
generator = Generator (
FUTAG_PATH , # путь к директории "futag-llvm"
lib_path , # путь к директории содержащей исходные кода исследуемого ПО
# target_type=AFLPLUSPLUS,
)
# Генерация фаззинг-оберток
generator . gen_targets (
anonymous = False # опция для генерации фаззинг-обертки для функций, которые не имеют публичный доступ
max_wrappers = 10 # опция для органичения количества сгенерированных фаззинг-оберток для одной функции
)
# Compile fuzz drivers
generator . compile_targets (
4 , # количество задач при сборке
# keep_failed=True, # сохранить не скомпилированные цели
# extra_include="-DHAVE_CONFIG_H", # дополнительные параметры при сборке библиотеки,
# extra_dynamiclink="-lz", # системные библиотеки для линковки
# flags="-ferror-limit=1", # значение по умолчанию: ""
)En faisant défection, des cônes de phasage compilés avec succès pour les fonctions ciblés se trouvent dans le catalogue Futag-Fuzz-Drivers, où chaque fonction cible crée son propre abonnement, qui coïncide avec le nom de la fonction cible.
from futag . preprocessor import *
from futag . generator import *
from futag . fuzzer import *
FUTAG_PATH = "/home/futag/Futag/futag-llvm"
library_root = "json-c-json-c-0.16-20220414"
consumer_root = "libstorj-1.0.3"
consumber_builder = ConsumerBuilder (
FUTAG_PATH , # путь к директории "futag-llvm"
library_root , # путь к директории содержащей исходные кода тестируемой библиотеки
consumer_root , # путь к директории содержащей исходные кода потребительской программы
# clean=True,
# processes=16,
)
consumber_builder . auto_build ()
consumber_builder . analyze ()
context_generator = ContextGenerator (
FUTAG_PATH ,
library_root ,
)
context_generator . gen_context () # генерация фаззинг-оберток для контекстов
context_generator . compile_targets ( #компиляция сгенерированных фаззинг-оберток
keep_failed = True ,
)Si plusieurs caisons de phasage ont été générés pour la fonction, le répertoire correspondant est créé dans le sous-calcatal de la fonction cible, où le numéro de série est ajouté au nom de la fonction cible. La documentation du package Python est sur le lien
Ces informations sur le travail de Futag peuvent être lues au lien
Les scripts de démarrage peuvent être consultés ici
Un test FUTAG a été créé dans les bibliothèques (JSON-C, PHP, Fremage, etc.), vous pouvez tester avec un pré-container.
CT Trans et S. Kurmangaleev, "FUTAG: Générateur de cibles de fuzz automatisé pour les bibliothèques de tests de test" 2021 Ivannikov Memorial Workem, 2021, pp. 80-85, doi: 10.1109 / ivMem53963.2021.00021.
CT Trans, D. Ponomarev et A. Kuznheesov, "Research on Automatic Generation of Fuzz-Target for Software Library Fonction", 2022 Ivannikov ISPRA Open Conference (ISPRA), Moscou, Russian Federal, 2022, pp. 95-99, doi: 10.1109 / ispras57371.2022.10076871.
Études sur la génération automatique de concentrations de phasage pour les bibliothèques, conférence ouverte des ROSP Ras nommé d'après V.P. Ivannikova 2022
| Bibliothèque | Version | Fonction | Type de bug | Date de rapport | Date de patch |
|---|---|---|---|---|---|
| Libpng | 1.6.37 | png_convert_from_time_t | AdresseSanitizer: DeadlySignal | 8 février 2021 | 13 sept. 2022 |
| Tinyxml2 | 9.0.0 | ErrorIdtoname | AdresseSanitizer: Global-Buffer-Overflow | 2 novembre 2022 | 12 novembre 2022 |
| Pugixml | 1.13 | Default_allocat | AdresseSanitizer: allocation-Size-too-big | 11 avril 2023 | 15 avril 2023 |
| Bibliothèque | Temps de génération | Beer-out-out-out | Temps de compilation | Les lignes de code les plus difficiles |
|---|---|---|---|---|
| Lib json-c | 180 | 3111 | 612 | 280.019 |
| Libpostgres | 105 | 749 | 29 | 84.387 |
| Boucle | 4.210 | 152 | 21 | 9.617 |
| Opensl | 2.172 | 269 | 255 | 19.458 |
| Pugixml | 55 | 61 | 58 | 2.815 |
| Libopus | 75 | 422 | 7 | 12.606 |