FUTAG هي أداة توليد تلقائية للتخلي عن الحبرات المسلحة لمكتبات البرمجيات. يوفر FUTAG إمكانية توليد تركيزات مراحل في كل من عدم وجود سياقات باستخدام المكتبة التي تم اختبارها ، وإذا يستخدم FUTAG ، كواجهة خارجية ، لتحليل الكود المصدر لأدوات المكتبات Clang.
يتم تنفيذ محلل ثابت تم تنفيذه في FUTAG أثناء تجميع المكتبة التي تم اختبارها بواسطة:
في وجود سياقات الاستخدام ، يبحث FUTAG عن مكالمات الوظائف ، ويشكل الاعتماد بين المطاردات الموجودة ويضع سياقات المكالمات.
تقوم FUTAG أيضًا بتنفيذ إمكانية الحصول على سياقات باستخدام المكتبة المختبرة من أداة لتحديد سطح هجوم natch.
تم توضيح عمل Futag في الشكل التالي: 
يعتمد هذا المشروع على LLVM مع تحليل ثابت لـ Clang ويتم توزيعه بموجب ترخيص "GPL V3"
يمكنك محاولة تجميع FUTAG مع ملفات قفص الاتهام الجاهزة لنظام التشغيل Ubuntu OS.
~ /futag-llvm$ ./buildAFLplusplus.shتتيح لك هذه التعليمات جمع نسخة من المشروع وإطلاقه في نظام UNIX.
تعتمد أداة FUTAG على LLVM-Project. لتجميع المشروع ، من الضروري تثبيت الحزم التالية في نظامك:
للحصول على مزيد من المعلومات التفصيلية حول التبعيات اللازمة لتجميع LLVM ، يمكنك التعرف على الوثائق بموجب الرابط المحدد
قد يحتاج نظام Ubuntu إلى تثبيت الحزم:
~ $ 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
لإطلاق 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 ، حيث تنشئ كل وظيفة مستهدفة اشتراكها الخاص ، والذي يتزامن مع اسم الوظيفة المستهدفة.
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 على الرابط
يمكن الاطلاع على البرامج النصية بدء هنا
تم إنشاء اختبار FUTAG على المكتبات (JSON-C ، PHP ، Fremage ، إلخ) ، يمكنك الاختبار باستخدام مسبق.
CT Trans and S. Kurmangaleev ، "FUTAG: Automated Fuzz Target Generator for Testware Libraries" 2021 Ivannikov Memorial Workem ، 2021 ، pp. 80-85 ، doi: 10.1109/IVMEM53963.2021.00021.
CT Trans ، D. Ponomarev و A. Kuznheesov ، "البحث عن توليد التوليد التلقائي من Fuzz-Target لوظيفة مكتبة البرمجيات" ، 2022 Ivannikov Ispras Open (ISPRAS) ، موسكو ، الفيدرالية الروسية ، 2022 ، ص. 95-99 ، doi: 10.1109/ISPRAS57371.2022.10076871.
دراسات حول التوليد التلقائي لتركيزات التدوير للمكتبات ، المؤتمر المفتوح لـ OSP RAS سميت باسم V.P. إيفانيكوفا 2022
| مكتبة | إصدار | وظيفة | نوع الخلل | تاريخ التقرير | تاريخ التصحيح |
|---|---|---|---|---|---|
| libpng | 1.6.37 | png_convert_from_time_t | المعاملة: Deadlysignal | 8 فبراير 2021 | 13 سبتمبر ، 2022 |
| tinyxml2 | 9.0.0 | erroridtoname | المعاملة: Global-Buffer-Overflow | نوفمبر 2 ، 2022 | 12 نوفمبر 2022 |
| pugixml | 1.13 | default_allocate | العنوان: المخصصة-الحجم--big-big | 11 أبريل 2023 | 15 أبريل 2023 |
| مكتبة | وقت التوليد | تربيات خارجية | وقت التجميع | Strest of Lines of Code |
|---|---|---|---|---|
| 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 |