Futag เป็นเครื่องมือสร้างแบบอัตโนมัติสำหรับการเพิกถอนคอนกรีต Libertines สำหรับห้องสมุดซอฟต์แวร์ Futag ให้ความเป็นไปได้ในการสร้างความเข้มข้นของเฟสทั้งในกรณีที่ไม่มีบริบทของการใช้ห้องสมุดที่ทดสอบและถ้ามี Futag ใช้เป็นอินเทอร์เฟซภายนอกเพื่อวิเคราะห์ซอร์สโค้ดของเครื่องมือไลบรารีเครื่องมือ
เครื่องวิเคราะห์แบบคงที่ที่ใช้ใน Futag ในระหว่างการประกอบไลบรารีที่ทดสอบจะดำเนินการโดย:
ในการปรากฏตัวของบริบทการใช้งานการค้นหาการเรียกใช้ฟังก์ชั่นทำให้การพึ่งพาระหว่างการไล่ล่าที่พบและดึงบริบทการโทรขึ้นมา
Futag ยังใช้ความเป็นไปได้ในการได้รับบริบทของการใช้ไลบรารีที่ทดสอบจากเครื่องมือเพื่อกำหนดพื้นผิวของการโจมตี Natch
งานของ Futag แสดงไว้ในรูปต่อไปนี้: 
โครงการนี้ใช้ LLVM ด้วยการวิเคราะห์แบบคงที่ของเสียงดังและมีการแจกจ่ายภายใต้ใบอนุญาต "GPL V3"
คุณสามารถลองประกอบ Futag ด้วยไฟล์ Dock สำเร็จรูปสำหรับ Ubuntu OS
~ /futag-llvm$ ./buildAFLplusplus.shคำสั่งนี้ช่วยให้คุณสามารถรวบรวมสำเนาของโครงการและเปิดใช้งานในระบบที่มีลักษณะคล้าย UNIX
เครื่องมือ Futag ขึ้นอยู่กับโครงการ LLVM สำหรับการรวบรวมโครงการจำเป็นต้องติดตั้งแพ็คเกจถัดไปในระบบของคุณ:
เพื่อให้ได้ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับการพึ่งพาที่จำเป็นสำหรับการประกอบ LLVM คุณสามารถทำความคุ้นเคยกับเอกสารภายใต้ลิงก์ที่ระบุ
ระบบ Ubuntu อาจจำเป็นต้องติดตั้งแพ็คเกจ:
~ $ git clone https://github.com/ispras/Futag ~ /Futag/custom-llvm$ ./prepare.shสคริปต์นี้สร้างไดเรกทอรี futag/build และคัดลอก script futag/custom-llvm/build.sh ในนั้น
~ /Futag/build$ ./build.shเป็นผลให้เครื่องมือจะถูกติดตั้งในไดเรกทอรี futag/futag-volvm
สำหรับ Assembly Aflplusplus เปิดตัวสคริปต์ buildaflplusplus.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-Drivers ซึ่งแต่ละฟังก์ชั่นเป้าหมายสร้างการสมัครสมาชิกของตัวเองซึ่งสอดคล้องกับชื่อของฟังก์ชันเป้าหมาย
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 ,
)หากมีการสร้าง phasing-cones หลายรายการสำหรับฟังก์ชั่นไดเรกทอรีที่เกี่ยวข้องจะถูกสร้างขึ้นใน subcatal ของฟังก์ชันเป้าหมายซึ่งหมายเลขซีเรียลจะถูกเพิ่มลงในชื่อของฟังก์ชันเป้าหมาย เอกสารของแพ็คเกจ Python อยู่บนลิงค์
ข้อมูลดังกล่าวเกี่ยวกับงานของ Futag สามารถอ่านได้ที่ลิงค์
สคริปต์เริ่มต้นสามารถดูได้ที่นี่
การทดสอบ futag ถูกสร้างขึ้นเหนือห้องสมุด (JSON-C, PHP, Fremage ฯลฯ ) คุณสามารถทดสอบกับ pre-container
CT Trans และ S. Kurmangaleev, "Futag: Automated Fuzz Target Generator สำหรับห้องสมุดทดสอบ" 2021 Ivannikov Memorial Workem, 2021, pp. 80-85, ดอย: 10.1109/IVMEM53963.2021.00021
CT Trans, D. Ponomarev และ A. Kuznheesov, "การวิจัยเกี่ยวกับการสร้างเป้าหมายการทำงานโดยอัตโนมัติสำหรับฟังก์ชั่นห้องสมุดซอฟต์แวร์", 2022 Ivannikov ISPRAS Open Conference (ISPRAS), มอสโก, รัสเซีย, 2022, pp 95-99, ดอย: 10.1109/ISPRAS57371.2022.10076871
การศึกษาเกี่ยวกับการสร้างความเข้มข้นของการวางขั้นตอนอัตโนมัติสำหรับห้องสมุดการประชุมแบบเปิดของ OSP RAS ตั้งชื่อตาม V.P. Ivannikova 2022
| ห้องสมุด | รุ่น | การทำงาน | ประเภทแมลง | วันที่รายงาน | วันที่แพทช์ |
|---|---|---|---|---|---|
| libpng | 1.6.37 | png_convert_from_time_t | addresssanitizer: Deadlysignal | 8 ก.พ. 2021 | 13 ก.ย. 2022 |
| tinyxml2 | 9.0.0 | ErrorIdtoname | ที่อยู่ | 2 พ.ย. 2022 | 12 พ.ย. 2022 |
| pugixml | 1.13 | default_allocate | addresssanitizer: การจัดสรรขนาดเกิน Big | 11 เม.ย. 2566 | 15 เม.ย. 2566 |
| ห้องสมุด | เวลารุ่น | Stend-in-all-out-beer | เวลารวบรวม | Strest ของบรรทัดของรหัส |
|---|---|---|---|---|
| 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 |