Futag ist ein Tool für automatisierte Generation für Phasen-konkrete Libertinen für Software-Bibliotheken. Futag bietet die Möglichkeit, Konzentrationen sowohl ohne Kontexte der Verwendung der getesteten Bibliothek als auch gegebenenfalls zu erzeugen. Futag verwendet als externe Schnittstelle den Quellcode der Bibliotheken -Tools Clang.
Ein statischer Analysator, der während der Montage der getesteten Bibliothek in Futag implementiert wird, wird durchgeführt:
In Gegenwart von Nutzungskontexten sucht Futag nach Funktionsanrufen, macht die Abhängigkeiten zwischen den gefundenen Verfolgungen aus und zeichnet die Anrufkontexte auf.
Futag implementiert auch die Möglichkeit, Kontexte über die Verwendung der getesteten Bibliothek aus einem Tool zu erhalten, um die Oberfläche des NATCH -Angriffs zu bestimmen.
Futags Arbeiten sind in der folgenden Abbildung dargestellt: 
Dieses Projekt basiert auf LLVM mit einer statischen Analyse von Clang und wird unter der Lizenz "GPL V3 Lizenz" verteilt
Sie können versuchen, Futag mit fertigen Dock-Dateien für Ubuntu OS zusammenzustellen.
~ /futag-llvm$ ./buildAFLplusplus.shMit dieser Anweisung können Sie eine Kopie des Projekts sammeln und im UNIX-ähnlichen System starten.
Das Futag-Tool basiert auf LLVM-Project. Für die Zusammenstellung des Projekts ist es erforderlich, dass die nächsten Pakete in Ihrem System installiert sind:
Um detailliertere Informationen zu den für die Montage von LLVM erforderlichen Abhängigkeiten zu erhalten, können Sie sich mit der Dokumentation unter dem angegebenen Link vertraut machen
Das Ubuntu -System muss möglicherweise Pakete installieren:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.shDieses Skript erstellt das FUTAG/Build-Verzeichnis und kopiert das Drehbuch Futag/Custom-Llvm/Build.sh in IT
~ /Futag/build$ ./build.shInfolgedessen wird das Tool im Futag/Futag-Volvm-Verzeichnis installiert
Für die Montage AFLPLUSPLUS starten Sie das Skript für BuildAflPlusplus.sh in 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", # значение по умолчанию: ""
)Durch Defekt sind erfolgreich zusammengestellte Phasenkegel für gezielte Funktionen im Katalog für Futag-Fuzz-Fahrer statt, in dem jede Zielfunktion ein eigenes Abonnement erstellt, das mit dem Namen der Zielfunktion zusammenfällt.
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 ,
)Wenn für die Funktion mehrere Phasing-Cones generiert wurde, wird das entsprechende Verzeichnis in der Subkatal der Zielfunktion erstellt, wobei die Seriennummer zum Namen der Zielfunktion hinzugefügt wird. Die Dokumentation des Python -Pakets befindet sich auf dem Link
Solche Informationen über die Arbeit von Futag können unter dem Link gelesen werden
Starten von Skripten können hier angezeigt werden
Ein Futag-Test wurde über Bibliotheken (JSON-C, PHP, Fremage usw.) erstellt. Sie können mit einem Vorkontainer testen.
CT Trans und S. Kurmangaleev, "Futag: Automatisierter Fuzz -Zielgenerator für Testwarebibliotheken" 2021 Ivannikov Memorial Workem, 2021, S. 80-85, doi: 10.1109/ivmem53963.2021.00021.
CT Trans, D. Ponomarev und A. Kuznheesov, "Forschung zur automatischen Erzeugung von Fuzz-Target for Software Library Function", 2022 Ivannikov ISPRAS Open Conference (ISPRAS), Moskau, Russian Federal, 2022, S. 95-99, doi: 10.1109/iSpras57371.2022.10076871.
Studien zur automatischen Erzeugung von Phasenkonzentrationen für Bibliotheken, offene Konferenz von OSP RAS, benannt nach V.P. Ivannikova 2022
| Bibliothek | Version | Funktion | Fehlertyp | Datum des Berichts | Datum des Patchs |
|---|---|---|---|---|---|
| Libpng | 1.6.37 | png_convert_from_time_t | Adressstrafen: DeadlySignal | 8. Februar 2021 | 13. September 2022 |
| Tinyxml2 | 9.0.0 | ERROIDTONAME | Addressanitierer: Global-Buffer-Overflow | 2. November 2022 | 12. November 2022 |
| Pugixml | 1.13 | Default_allocation | Addressanitierer: Allokationsgröße-Too-Big | 11. April 2023 | 15. April 2023 |
| Bibliothek | Generationszeit | STEND-IN ALTS-OUT-BEER | Kompilierungszeit | Codestrahl |
|---|---|---|---|---|
| Lib JSON-C | 180 | 3111 | 612 | 280.019 |
| Libpostgres | 105 | 749 | 29 | 84.387 |
| Locken | 4.210 | 152 | 21 | 9.617 |
| Öffnen | 2.172 | 269 | 255 | 19.458 |
| Pugixml | 55 | 61 | 58 | 2.815 |
| Libopus | 75 | 422 | 7 | 12.606 |