O FutaG é uma ferramenta de geração automatizada para Libertines de Concreto para Phasing para Bibliotecas de Software. Futag fornece a possibilidade de gerar concentrações de fasesia, tanto na ausência de contextos de usar a biblioteca testada quanto, se houver. O FutaG usa, como interface externa, para analisar o código -fonte das ferramentas de bibliotecas.
Um analisador estático implementado em FUTAG durante a montagem da biblioteca testado é realizado por:
Na presença de contextos de uso, a Futag busca chamadas de funções, compõe as dependências entre as perseguições encontradas e elabora os contextos de chamada.
Futag também implementa a possibilidade de obter contextos de uso da biblioteca testada de uma ferramenta para determinar a superfície do ataque natch.
O trabalho de Futag é ilustrado na figura a seguir: 
Este projeto é baseado no LLVM com uma análise estática de Clang e é distribuído sob a licença "GPL V3"
Você pode tentar montar Futag com arquivos de dock prontos para o Ubuntu OS.
~ /futag-llvm$ ./buildAFLplusplus.shEsta instrução permite coletar uma cópia do projeto e iniciá-la no sistema semelhante ao Unix.
A ferramenta FUTAG é baseada no LLVM-Project. Para a compilação do projeto, é necessário que os próximos pacotes estejam instalados em seu sistema:
Para obter informações mais detalhadas sobre as dependências necessárias para a montagem do LLVM, você pode se familiarizar com a documentação no link especificado
O sistema Ubuntu pode precisar instalar pacotes:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.shEste script cria o diretório FUTAG/BUIRN e copia o script FUTAG/Custom-llvm/Built.sh
~ /Futag/build$ ./build.shComo resultado, a ferramenta será instalada no diretório FUTAG/FUTAG-VOLVM
Para a Assembly AflplusPlus Lance o script BuildAflplusplus.sh em 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", # значение по умолчанию: ""
)Ao desertar, os cones de fases compilados com sucesso para funções direcionadas estão no catálogo Futag-Fuzz-Drivers, onde cada função de destino cria sua própria assinatura, que coincide com o nome da função de destino.
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 ,
)Se vários cones de phasing foram gerados para a função, o diretório correspondente será criado no subcatal da função de destino, onde o número de série é adicionado ao nome da função de destino. A documentação do pacote Python está no link
Essas informações sobre o trabalho de FutaG podem ser lidas no link
Scripts iniciais podem ser vistos aqui
Um teste FUTAG foi criado sobre as bibliotecas (JSON-C, PHP, FreMage etc.), você pode testar com um pré-container.
CT Trans e S. Kurmangaleev, "FUTAG: gerador de destino de fuzz automático para bibliotecas de testes" 2021 Ivannikov Memorial Workem, 2021, pp. 80-85, doi: 10.1109/ivmem53963.2021.00021.
Ct Trans, D. Ponomarev e A. Kuznheesov, "Pesquisa sobre geração automática de fuzil para a função da biblioteca de software", 2022 Ivannikov ISPRAS Open Conference (ISPRAS), Moscou, Federal Russo, 2022, pp. 95-99, doi: 10.1109/isPras57371.2022.10076871.
Estudos sobre geração automática de concentrações de fase para bibliotecas, conferência aberta da OSP Ras com o nome de V.P. Ivannikova 2022
| Biblioteca | Versão | Função | Tipo de bug | Data do relatório | Data de patch |
|---|---|---|---|---|---|
| Libpng | 1.6.37 | png_convert_from_time_t | Endereço Sanitizador: DeadlySignal | 8 de fevereiro de 2021 | 13 de setembro de 2022 |
| Tinyxml2 | 9.0.0 | ErrorIdtoname | EndereçoSanitizer: Global-Buffer-overflow | 2 de novembro de 2022 | 12 de novembro de 2022 |
| Pugixml | 1.13 | Default_allocate | EndereçoSanitizer: alocação-size-big | 11 de abril de 2023 | 15 de abril de 2023 |
| Biblioteca | Tempo de geração | Speend-In-Out-Berer | Tempo de compilação | STREST of Lines of Code |
|---|---|---|---|---|
| Lib JSON-C | 180 | 3111 | 612 | 280.019 |
| Libpostgres | 105 | 749 | 29 | 84.387 |
| Curl | 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 |