FUTAG es una herramienta de generación automatizada para fases-Concrete Libertines para bibliotecas de software. FUTAG proporciona la posibilidad de generar concentraciones de fases tanto en ausencia de contextos del uso de la biblioteca probada como si las hay. FUTAG usa, como interfaz externa, para analizar el código fuente de las herramientas de bibliotecas.
: Un analizador estático implementado en FUTAG durante el ensamblaje de la biblioteca probada es realizado por:
En presencia de contextos de uso, FUTAG busca llamadas de funciones, constituye las dependencias entre las persecuciones encontradas y elabora los contextos de llamadas.
FUTAG también implementa la posibilidad de obtener contextos del uso de la biblioteca probada de una herramienta para determinar la superficie del ataque Natch.
El trabajo de Futag se ilustra en la siguiente figura: 
Este proyecto se basa en LLVM con un análisis estático de Clang y se distribuye bajo la licencia "Licencia GPL V3"
Puede intentar ensamblar FUTAG con archivos de muelle listos para el sistema operativo Ubuntu.
~ /futag-llvm$ ./buildAFLplusplus.shEsta instrucción le permite recopilar una copia del proyecto y lanzarla en el sistema similar a UNIX.
La herramienta FUTAG se basa en LLVM-Project. Para la compilación del proyecto, es necesario que los siguientes paquetes estén instalados en su sistema:
Para obtener información más detallada sobre las dependencias necesarias para el ensamblaje de LLVM, puede familiarizarse con la documentación en el enlace especificado
Es posible que el sistema Ubuntu deba instalar paquetes:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.shEste script crea el directorio de Futag/Build y copia el script Futag/Custom-llvm/build.sh en él
~ /Futag/build$ ./build.shComo resultado, la herramienta se instalará en el directorio FUTAG/FUTAG-VOLVM
Para el ensamblaje AFLPLUSPLUS LANZAR EL SCRIPTO BULDAFLPLUSPLUS.SH EN 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", # значение по умолчанию: ""
)Al desertar, los conos de fases compilados con éxito para las funciones específicas están en el catálogo FUTAG-FUZZ-DRIVS, donde cada función objetivo crea su propia suscripción, que coincide con el nombre de la función objetivo.
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 se generaron varios y frases para la función, el directorio correspondiente se crea en el subcatal de la función objetivo, donde el número de serie se agrega al nombre de la función de destino. La documentación del paquete Python está en el enlace
Dicha información sobre el trabajo de FUTAG se puede leer en el enlace
Los scripts iniciales se pueden ver aquí
Se creó una prueba de FUTAG sobre las bibliotecas (JSON-C, PHP, Fremage, etc.), puede probar con un pre-contenedor.
CT Trans y S. KurmangaleEv, "FUTAG: Generador de destino de fuzz automatizado para bibliotecas de testware" 2021 Ivannikov Memorial Workem, 2021, pp. 80-85, doi: 10.1109/ivmem53963.2021.00021.
CT Trans, D. Ponomarev y A. Kuznheesov, "Investigación sobre la generación automática de fuzz-objetivo para la función de la biblioteca de software", 2022 Conferencia Abierta de Ivannikov Ispras (ISPRAS), Moscú, Russian Federal, 2022, pp. 95-99, doi: 10.1109/ispras57371.2022.10076871.
Estudios sobre generación automática de concentraciones de fase para bibliotecas, conferencia abierta de OSP Ras que lleva el nombre de V.P. Ivannikova 2022
| Biblioteca | Versión | Función | Tipo de error | Fecha del informe | Fecha de parche |
|---|---|---|---|---|---|
| Libpng | 1.6.37 | png_convert_from_time_t | Directsanitizer: Deadlysignal | 8 de febrero de 2021 | 13 de septiembre de 2022 |
| Tinyxml2 | 9.0.0 | ErrorIdtoname | Directsanitizer: global-buffer-uprflow | 2 de noviembre de 2022 | 12 de noviembre de 2022 |
| Pugixml | 1.13 | Default_allocate | Directsanitizer: asignación de tamaño demasiado | 11 de abril de 2023 | 15 de abril de 2023 |
| Biblioteca | Tiempo de generación | Estender en la cerveza | Tiempo de compilación | Strest of Sings of Code |
|---|---|---|---|---|
| Lib json-c | 180 | 3111 | 612 | 280.019 |
| Libpostgres | 105 | 749 | 29 | 84.387 |
| Rizo | 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 |