Futag是用于用于软件库的相结合自由林的自动生成工具。 FUTAG提供了在没有使用测试库的上下文(如果有的话)的情况下产生相位浓度的可能性。 Futag用作外部接口,分析库工具的源代码。
在经过测试库的组装过程中,在Futag实施的静态分析仪由以下方式执行:
在使用上下文的情况下,FUTAG搜索功能的调用,构成了发现和绘制呼叫上下文之间的追逐之间的依赖。
FUTAG还实现了从工具中使用经过测试库的上下文来确定Natch攻击表面的可能性。
下图说明了Futag的工作: 
该项目基于LLVM,对Clang进行静态分析,并根据“ GPL V3许可证”许可证分发。
您可以尝试使用用于Ubuntu OS的现成的码头文件组装Futag。
~ /futag-llvm$ ./buildAFLplusplus.sh该指令使您可以收集项目的副本,并在类似Unix的系统中启动它。
FUTAG工具基于LLVM项目。对于项目的汇编,有必要在系统中安装下一个软件包:
为了获得有关LLVM组装所需依赖关系的更多详细信息,您可以熟悉指定链接下的文档
Ubuntu系统可能需要安装软件包:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.sh此脚本创建FUTAG/build Directory并在其中复制Futag/custom-llvm/build.sh脚本
~ /Futag/build$ ./build.sh结果,该工具将安装在FUTAG/FUTAG-VOLVM目录中
用于汇编aflplusplus启动buildaflplus.sh脚本,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", # значение по умолчанию: ""
)通过叛逃,在Futag-Fuzz-Drovers目录中成功编译了针对目标函数的相位锥,每个目标函数都会创建自己的订阅,这与目标函数的名称相吻合。
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 ,
)如果为该函数生成了几个相位键,则在目标函数的亚载体中创建相应的目录,其中序列号被添加到目标函数的名称中。 Python软件包的文档在链接上
有关Futag工作的此类信息可以在链接上阅读
启动脚本可以在这里查看
在库(JSON-C,PHP,FREMAGE等)上创建了FUTAG测试,您可以使用前载体进行测试。
CT Trans和S. Kurmangaleev,“ Futag:用于测试软件库的自动化模糊目标生成器” 2021 Ivannikov Memorial Workem,2021,pp。 80-85,doi:10.1109/ivmem53963.2021.00021。
CT Trans,D。Ponomarev和A. Kuznheesov,“针对软件库功能自动生成绒毛目标的研究”,2022年Ivannikov Ispras Open Conference(ISPRAS),莫斯科,俄罗斯联邦,2022年,2022年,pp。 95-99,doi:10.1109/ispras57371.2022.10076871。
关于图书馆自动产生的分阶段浓度的研究,以V.P.命名的OSP RAS开放会议Ivannikova 2022
| 图书馆 | 版本 | 功能 | 错误类型 | 报告日期 | 补丁的日期 |
|---|---|---|---|---|---|
| libpng | 1.6.37 | png_convert_from_time_t | adversySanitizer:致命信号 | 2021年2月8日 | 2022年9月13日 |
| tinyxml2 | 9.0.0 | ErrorIdtoname | adverseSanitizer:全局空班 - 跨流 | 2022年11月2日 | 2022年11月12日 |
| pugixml | 1.13 | Default_Allocate | addressAnitizer:分配大小 - 少数 | 2023年4月11日 | 2023年4月15日 |
| 图书馆 | 发电时间 | Stend-in-Old-Out-Beer | 汇编时间 | 代码线的弹性 |
|---|---|---|---|---|
| lib json-c | 180 | 3111 | 612 | 280.019 |
| libpostgres | 105 | 749 | 29 | 84.387 |
| 卷曲 | 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 |