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 |