Futagは、ソフトウェアライブラリ向けのコンクリートリバティンをフェイシングするための自動生成ツールです。 Futagは、テストされたライブラリを使用するコンテキストがない場合、および存在する場合の両方で、フェーズ濃度を生成する可能性を提供します。 Futagは、外部インターフェイスとして、ライブラリのソースコードツールClangを分析します。
テストされたライブラリのアセンブリ中にFutagに実装された静的分析器は、次のように実行されます。
使用コンテキストが存在する場合、Futagは機能の呼び出しを検索し、発見された追跡とコールコンテキストの依存性を構成します。
また、Futagは、ツールからテストされたライブラリを使用してNACT攻撃の表面を決定するコンテキストを取得する可能性を実装しています。
Futagの作品は、次の図に示されています。 
このプロジェクトは、Clangの静的分析を備えたLLVMに基づいており、「GPL V3ライセンス」ライセンスの下で配布されています
Ubuntu OS用の既製のドックファイルでFutagを組み立てることができます。
~ /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ディレクトリにインストールされます
アセンブリ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", # значение по умолчанию: ""
)欠陥によって、ターゲット機能の正常にコンパイルされたフェージングコーンは、ターゲット関数の名前と一致する、各ターゲット関数が独自のサブスクリプションを作成する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 ,
)関数に対していくつかのフェージングコーンが生成された場合、対応するディレクトリはターゲット関数のサブタタルで作成され、シリアル番号がターゲット関数の名前に追加されます。 Pythonパッケージのドキュメントはリンクにあります
Futagの作品に関するそのような情報は、リンクで読むことができます
スクリプトの開始はここで見ることができます
ライブラリ(JSON-C、PHP、FREMAGEなど)を介して作成されたFutagテストは、事前のコンテナでテストできます。
CT TransおよびS. Kurmangaleev、「Futag:Testwareライブラリ用の自動ファズターゲットジェネレーター」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 RAの公開会議Ivannikova 2022
| 図書館 | バージョン | 関数 | バグタイプ | 報告日 | パッチの日付 |
|---|---|---|---|---|---|
| libpng | 1.6.37 | png_convert_from_time_t | アドレスサンイタイザー:DeadlySignal | 2021年2月8日 | 2022年9月13日 |
| tinyxml2 | 9.0.0 | erroridtoname | アドレスサンイタイザー:グローバルバッファオーバーフロー | 2022年11月2日 | 2022年11月12日 |
| pugixml | 1.13 | default_allocate | アドレスサナイタイザー:割り当てサイズのビッグ | 2023年4月11日 | 2023年4月15日 |
| 図書館 | 生成時間 | スチンドイン古いビール | 編集時間 | コード行の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 |