ターゲット サポート マトリクス¶
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 はテスト ケースが以下の要因から欠陥を発生させた場合に検出します:
選別と診断 セクションを参照してください。 |
特別なサポート | 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:
- CWE-20: Improper Input Validation (不適切な入力検証)
- CWE-125: Out-of-Bounds Read (境界外読み取り)
- CWE-369: Divide By Zero (ゼロ除算)
- CWE-476: Null Pointer Dereference (Null ポインター間接参照)
- CWE-763: Release of Invalid Pointer or Reference (無効なポインターまたは参照の解放)
- CWE-787: Out-of-Bounds Write (境界外書き込み)
- CWE-913: Improper Control of Dynamically-Managed Code Resources (動的管理されるコード リソースの不適切な制御)
高度な選別¶
高度な選別を有効化すると、追加の解析が行われ、メモリ リークや未初期化変数の使用などの UNIX シグナルが送信されない欠陥が検出されます。
高度な選別をサポートするには、ターゲットは glibc にリンクされていなければなりません。他の libc バリアントにリンクされた (または libc にリンクされていない) ターゲットは、サポートされていません。さらに、高度な選別は、ターゲットがインストゥルメンテーション付きでなないことを必要とします。
高度な選別のサポート | |
---|---|
アーキテクチャ | サポート |
x86_64, x86 | ✓ |
ARM | |
MIPS | |
PowerPC |
(基本的な選別に加えて) 高度な選別によって検出される CWE:
- CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer (メモリ バッファーの境界内での操作の不適切な制限)
- CWE-131: Incorrect Calculation of Buffer Size (バッファー サイズの誤った計算)
- CWE-401: Failure to Release Memory Before Removing Last Reference ('Memory Leak') (最後の参照を削除する前のメモリ解放エラー (「メモリ リーク」))
- CWE-457: Use of Uninitialized Variable (未初期化変数の使用)
- CWE-590: Free of Memory not on the Heap (ヒープ上にないメモリの解放)
- CWE-704: Incorrect Type Conversion or Cast (誤った型変換またはキャスト)
Important
Mayhemfile の advanced_triage
オプションに true
が設定されていることを確認します。
サニタイザー¶
コンパイル時に ASAN などのサニタイザーをプログラムに追加できます。サニタイザーは、ただちにはクラッシュにつながらない欠陥を含め、Mayhem がさらに多くの欠陥を追加で検出できるようなチェックを追加します。
Mayhem は ASAN、UBSAN、LSAN および MSAN サニタイザー フラグ付きでコンパイルされたターゲットと連携します。
Note
MSAN サニタイザー ターゲットは、Mayhem のメモリ サンドボックスでは許容されない範囲のメモリを割り当てる場合があります。この問題の影響があり、なおかつメモリ割り当ての削除が不可能な場合、support@forallsecure.com までお問い合わせください。
(基本的な選別に加えて) サニタイザーによって検出される CWE:
- CWE-115: Misinterpretation of Input (入力の解釈の誤り)
- CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer (メモリ バッファーの境界内での操作の不適切な制限)
- CWE-121: Stack-based Buffer Overflow (スタックベースのバッファー オーバーフロー)
- CWE-122: Heap-based Buffer Overflow (ヒープベースのバッファー オーバーフロー)
- CWE-129: Improper Validation of Array Index (配列インデックの不適切な検証)
- CWE-131: Incorrect Calculation of Buffer Size (バッファー サイズの誤った計算)
- CWE-188: Reliance on Data/Memory Layout (データ/メモリ配置への依存)
- CWE-190: Integer Overflow or Wraparound (整数オーバーフローまたはラップアラウンド)
- CWE-197: Numeric Truncation Error (数値丸めエラー)
- CWE-233: Improper Handling of Parameters (パラメーターの不適切な処理)
- CWE-393: Return of Wrong Status Code (誤ったステータス コードのリターン)
- CWE-400: Uncontrolled Resource Consumption (制御されていないリソース消費)
- CWE-415: Double Free (2 重解放)
- CWE-416: Use After Free (解放後の使用)
- CWE-457: Use of Uninitialized Variable (未初期化変数の使用)
- CWE-469: Use of Pointer Subtraction to Determine Size (サイズ特定のためのポインター減算の使用)
- CWE-561: Dead Code (デッド コード)
- CWE-562: Return of Stack Variable Address (スタック変数アドレスのリターン)
- CWE-590: Free of Memory not on the Heap (ヒープ上にないメモリの解放)
- CWE-664: Improper Control of a Resource Through its Lifetime (リソースの生存期間を通じたリソース管理の不備)
- CWE-665: Improper Initialization (不適切な初期化)
- CWE-680: Integer Overflow to Buffer Overflow (バッファー オーバーフローに至る整数オーバーフロー)
- CWE-690: Unchecked Return Value to NULL Pointer Dereference (NULL ポインター間接参照に至る未チェックの戻り値)
- CWE-704: Incorrect Type Conversion or Cast (誤った型変換またはキャスト)
- CWE-758: Reliance on Undefined, Unspecified, or Implementation-Defined Behavior (未定義、未指定、処理系定義の動作への依存)
- CWE-786: Access of Memory Location Before Start of Buffer (バッファーの先頭より前の位置へのアクセス)
- CWE-788: Access of Memory Location Before Start of Buffer (バッファーの先頭より後の位置へのアクセス)
- CWE-789: Uncontrolled Memory Allocation (制御されていないメモリ割り当て)
CWE 全体の階層¶
情報
次の CWE 階層リストは、以下に従って分類されています。
- 基本的な選別
- 高度な選別
- サニタイザー
さらに、以下の CWE は、高度な選別およびサニタイザーの両方で検出されます:
CWE 全体の階層
- CWE-1000: Research Concepts
- CWE-435: Improper Interaction Between Multiple Correctly-Behaving Entities
- CWE-188: Reliance on Data/Memory Layout
- CWE-436: Interpretation Conflict
- CWE-664: Improper Control of a Resource Through its Lifetime
- CWE-118: Incorrect Access of Indexable Resource ('Range Error')
- CWE-400: Uncontrolled Resource Consumption
- CWE-404: Improper Resource Shutdown or Release
- CWE-763: Release of Invalid Pointer or Reference
- CWE-762: Mismatched Memory Management Routines
- CWE-772: Missing Release of Resource after Effective Lifetime
- CWE-763: Release of Invalid Pointer or Reference
- CWE-665: Improper Initialization
- CWE-908: Use of Uninitialized Resource
- CWE-704: Incorrect Type Conversion or Cast
- CWE-681: Incorrect Conversion between Numeric Types
- CWE-913: Improper Control of Dynamically-Managed Code Resources
- CWE-682: Incorrect Calculation
- CWE-707: Improper neutralization
- CWE-20: Improper Input Validation
- CWE-1284: Improper Validation of Specified Quantity in Input
- CWE-1285: Improper Validation of Specified Index, Position, or Offset in Input
- CWE-228: Improper Handling of Syntactically Invalid Structure
- CWE-20: Improper Input Validation
- CWE-710: Improper Adherence to Coding Standards
- CWE-754: Improper Check for Unusual or Exceptional Conditions
- CWE-703: Improper Check or Handling of Exceptional Conditions
- CWE-435: Improper Interaction Between Multiple Correctly-Behaving Entities
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 ユーザーにとって互換性に影響を与える可能性がある変更は、あらかじめ公表されます。