Futag는 소프트웨어 라이브러리를위한 위상 대상의 자유를위한 자동화 된 생성 도구입니다. Futag는 테스트 된 라이브러리 사용의 컨텍스트가 없을 때 위상 농도를 생성 할 가능성을 제공합니다. Futag는 외부 인터페이스로 사용하여 라이브러리의 소스 코드 도구 Clang을 분석합니다.
테스트 된 라이브러리의 조립 중에 Futag에서 구현 된 정적 분석기는 다음과 같이 수행됩니다.
사용 컨텍스트가있는 경우, Futag는 기능의 호출을 검색하고, 발견 된 체이스 간의 의존성을 구성하고 호출 컨텍스트를 그립니다.
Futag는 또한 도구에서 테스트 된 라이브러리를 사용하는 컨텍스트를 얻을 수있는 가능성을 구현하여 Natch 공격의 표면을 결정합니다.
Futag의 작품은 다음 그림에 설명되어 있습니다. 
이 프로젝트는 Clang의 정적 분석과 함께 LLVM을 기반으로하며 "GPL V3 라이센스"라이센스에 따라 배포됩니다.
Ubuntu OS 용 기성품 도크 파일로 Futag를 조립하려고 시도 할 수 있습니다.
~ /futag-llvm$ ./buildAFLplusplus.sh이 명령을 사용하면 프로젝트 사본을 수집하여 UNIX와 같은 시스템에서 시작할 수 있습니다.
Futag 도구는 LLVM-Project를 기반으로합니다. 프로젝트를 편집하려면 다음 패키지가 시스템에 설치되어야합니다.
LLVM 어셈블리에 필요한 종속성에 대한 자세한 정보를 얻으려면 지정된 링크에서 문서에 익숙해 질 수 있습니다.
우분투 시스템은 패키지를 설치해야 할 수도 있습니다.
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.sh이 스크립트는 Futag/Build 디렉토리를 생성하고 Futag/Custom-Llvm/build.sh 스크립트를 복사합니다.
~ /Futag/build$ ./build.sh결과적 으로이 도구는 Futag/Futag-Volvm 디렉토리에 설치됩니다.
어셈블리 AFLPLUSPLUS의 경우 Futag/Futag-LLVM에서 BuildAflPlusPlus.sh 스크립트를 시작하십시오
~ /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", # значение по умолчанию: ""
)결함을 통해 표적 함수에 대한 성공적으로 컴파일 된 단계적 페이징 원뿔은 각각의 대상 기능이 자체 구독을 생성하여 대상 기능의 이름과 일치하는 자체 구독을 생성합니다.
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 ,
)함수에 대해 여러 단계가 생성 된 경우, 해당 디렉토리는 대상 함수의 하위 캐롤에서 생성되며, 여기서 일련 번호는 대상 함수의 이름으로 추가됩니다. 파이썬 패키지의 문서화는 링크에 있습니다.
Futag의 작업에 대한 이러한 정보는 링크에서 읽을 수 있습니다.
시작 스크립트는 여기에서 볼 수 있습니다
라이브러리 (JSON-C, PHP, FREMAGE 등)를 통해 선불 테스트가 만들어졌으며 사전 컨테이너로 테스트 할 수 있습니다.
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, pp. 95-99, doi : 10.1109/ispras57371.2022.10076871.
도서관을위한 단계적 단계 농도의 자동 생성에 관한 연구, V.P.의 이름을 따서 명명 된 OSP RAS의 공개 회의 Ivannikova 2022
| 도서관 | 버전 | 기능 | 버그 유형 | 보고서 날짜 | 패치 날짜 |
|---|---|---|---|---|---|
| libpng | 1.6.37 | png_convert_from_time_t | 주소 사료 : 치명적 | 2021 년 2 월 8 일 | 2022 년 9 월 13 일 |
| tinyxml2 | 9.0.0 | ErrorIdtoname | 주소 사료 : Global-Buffer-Overflow | 2022 년 11 월 2 일 | 2022 년 11 월 12 일 |
| pugixml | 1.13 | default_allocate | 주소 사료 : 할당 크기가 많습니다 | 2023 년 4 월 11 일 | 2023 년 4 월 15 일 |
| 도서관 | 생성 시간 | 오래된 비어 | 컴파일 시간 | 코드 라인의 가장자리 |
|---|---|---|---|---|
| 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 |