コンテンツにスキップ

ターゲット サポート マトリクス

Mayhem は、ファズ テストやシンボリック実行などの複数の技術を組み合わせ、バイナリ実行ファイル (Mayhem ターゲット) のテスト時にコード カバレッジを最大化します。Mayhem は、幅広いアーキテクチャ、オペレーティング システム、言語にわたるインストゥルメンテーション付きのターゲットおよびインストゥルメンテーションなしのターゲットをサポートしています。

以下は、Mayhem がサポートするターゲットの技術的仕様に関する詳細および Mayhem を使用するためのシステム要件です。

概要

Mayhem の解析は以下をサポートします。

  • ベース実行ファイル ターゲット: 特別なコンパイル オプションや変更 (インストゥルメンテーション) なしでコンパイルされたバイナリ実行ファイルです。
  • インストゥルメンテーション付きターゲット: AFL、libFuzzer、honggfuzz などのファザーを使用してインストゥルメンテーション付きでコンパイルされたバイナリ実行ファイルです。
  • 選別と診断: テスト ケース入力を使用したファジングによって検出されたターゲット内の欠陥を識別するプロセスです。

ベース実行ファイル ターゲット

Mayhem は、ユーザースペースで実行可能で単一のファイル識別子または TCP/UDP ソケットから入力を受け取る、変更されていない Linux または Windows バイナリ ターゲット (マシン コード) を解析します。

ベース実行ファイル ターゲットのサポート
アーキテクチャ x86_64, x86, ARM (ARMv4t through ARMv8), MIPS, PowerPC
読み取り元 stdin, file, TCP, UDP, Unix domain sockets
欠陥 Mayhem はテスト ケースが以下の要因から欠陥を発生させた場合に検出します:
  1. アサート違反
  2. メモリ安全性違反
  3. キャッチされていない UNIX シグナル
Mayhem が発見する CWE (Common Weakness Enumeration) の一覧については
選別と診断 セクションを参照してください。
特別なサポート Mayhem は Golang および Rust で記述されたターゲットを自動検出し、未処理の panicを 発見します。

インストゥルメンテーション付きターゲット

Mayhem は、AFL/AFL++、honggfuzz、libFuzzer を使用して作成された既存のファジング ターゲットの実行をサポートしています。また、Mayhem は libFuzzer でインストゥルメントされた Windows ターゲットをサポートします。これらのファザーによってサポートされる言語には、clang 対応言語、Golang、Rust が含まれます。

Info

Mayhem は libFuzzer バージョン LLVM 5.0 以上をサポートします。

インストゥルメンテーション付きターゲットのサポート
アーキテクチャ x86_64, x86
ファザー ベース実行ファイル3 AFL/AFL++4 honggfuzz5 libFuzzer6
dictionary ✓ ✓7 ✓ ✓
max_length ✓ ✓ ✓ ✓
sanitizers ✓ ✓ ✓ ✓

選別と診断

Mayhem によって発見されたすべてのテスト ケースは選別を受けます。

基本的な選別

基本的な選別は常に実行されます。選別処理によって、レポートされた欠陥が再現可能であることが保証され、各欠陥にスタック トレース、逆アセンブリ、シグナル番号、クラッシュ タイプなどのメタデータが付加されます。また、Mayhem は多くの一般的なクラッシュ タイプを認識し、該当する CWE (Common Weakness Enumeration) 番号があれば付加します。

基本的な選別によって検出される CWE:

高度な選別

高度な選別を有効化すると、追加の解析が行われ、メモリ リークや未初期化変数の使用などの UNIX シグナルが送信されない欠陥が検出されます。

高度な選別をサポートするには、ターゲットは glibc にリンクされていなければなりません。他の libc バリアントにリンクされた (または libc にリンクされていない) ターゲットは、サポートされていません。さらに、高度な選別は、ターゲットがインストゥルメンテーション付きでなないことを必要とします。

高度な選別のサポート
アーキテクチャ サポート
x86_64, x86 ✓
ARM
MIPS
PowerPC

(基本的な選別に加えて) 高度な選別によって検出される CWE:

Important

Mayhemfile の advanced_triage オプションに true が設定されていることを確認します。

サニタイザー

コンパイル時に ASAN などのサニタイザーをプログラムに追加できます。サニタイザーは、ただちにはクラッシュにつながらない欠陥を含め、Mayhem がさらに多くの欠陥を追加で検出できるようなチェックを追加します。

Mayhem は ASAN、UBSAN、LSAN および MSAN サニタイザー フラグ付きでコンパイルされたターゲットと連携します。

Note

MSAN サニタイザー ターゲットは、Mayhem のメモリ サンドボックスでは許容されない範囲のメモリを割り当てる場合があります。この問題の影響があり、なおかつメモリ割り当ての削除が不可能な場合、support@forallsecure.com までお問い合わせください。

(基本的な選別に加えて) サニタイザーによって検出される CWE:

Windows のサポート

Windows のベース実行ファイル ターゲットでは、現時点でサニタイザーのインストゥルメンテーションはサポートされていません。以下の表は、一般的な Windows コンパイラ ツールチェーンに対する Mayhem の現在のサポート状況を示しています。

Windows ベース実行ファイルのサポート
コンパイラ アーキテクチャ バイナリ サニタイザー
MSVC 2022 (cl.exe v19) x86, x86_64 サポート対象 非対応
clang 10+ (MSVC) x86, x86_64 サポート対象 非対応
clang 10+ (libFuzzer) x86, x86_64 サポート対象 非対応
gcc 12.4 (Cygwin) x86, x86_64 非対応 非対応
gcc 15.1 (MinGW) x86, x86_64 サポート対象 非対応 (リンクに失敗)

Note

Cygwin には clang 8 がインストールされますが、これは libFuzzer や ASAN のインストゥルメンテーションをサポートしていません。Windows で libFuzzer や ASAN を使用するには、libclang_rt ライブラリを組み込んでビルドされた clang 10 以降を、MSVC 経由、または LLVM のリリース ページ からインストールしてください。

CWE 全体の階層

情報

次の CWE 階層リストは、以下に従って分類されています。

CWE 全体の階層

Web コンソール

Mayhem Webコンソールは Chrome、Firefox、Microsoft Edge ブラウザーをサポートしています。

CLI

mayhem CLI は、Mayhem とプログラム的にやりとりするための主要なツールです。以下は、mayhem コマンドを実行可能なすべてのサポート対象環境のリストです。

CLI サポート マトリクス
オペレーティング システム アーキテクチャ システム要件
Linux x86_64 なし (静的にリンクされたバイナリ)
macOS x86_64 macOS >= 10.13
Windows x86_64 Windows 10+

API

Mayhem のリリースは、同じメジャー リリースの API ユーザーに対して後方互換性があります (たとえば、Mayhem 1.x の API クライアントは Mayhem 1.x サーバーと共に使用した場合、問題なく動作するはずです)。Mayhem API は セマンティック バージョニング を使用します。

新しいメジャー リリース (例: Mayhem 2.x) が行われる場合、API ユーザーにとって互換性に影響を与える可能性がある変更は、あらかじめ公表されます。