上級
言語別ガイドの概要¶
Mayhem 言語別ガイドへようこそ。
特定の言語でセキュリティ テストを始める方法のサンプルが必要ですか? 特定のプログラミング言語と解析ツールの組み合わせを使用してターゲットをコンパイルし、テストする方法については、以下のガイドを参照してください。
C/C++ ¶
C 言語は 1970 年代初頭に開発されたクロスプラットフォームの手続き型プログラミング言語であり、多くのより新しい言語やより低レベルのプログラムに影響を与え、基礎となった「ベース」言語とみなされています。C++ 言語は 1980 年代初頭にオブジェクト指向プログラミングの概念を取り入れるために C 言語の拡張として開発されました。C++ は C 言語のスーパーセットとなり、有効な C プログラムは有効な C++ プログラムでもあります。
C/C++ では、開発者がプログラムのメモリ管理方法を制御することができます。そのため、Mayhem でメモリ リークなどメモリの安全性の問題を検査するのによい対象です。
Mayhem は次の C/C++ ターゲットをファジングできます。
- ベース実行ファイル: インストゥルメンテーションなしでコンパイルされたスタンドアロンの C/C++ ターゲットです。
- AFL / AFL++: AFL/AFL++ インストゥルメンテーション付きでコンパイルされた C/C++ ターゲットです。
- Honggfuzz: Honggfuzz インストゥルメンテーション付きでコンパイルされた C/C++ ターゲットです。
- LibFuzzer: libFuzzer インストゥルメンテーション付きでコンパイルされた C/C++ ターゲットです。
Go ¶
Go または Golang は、オープンソースの静的型付けプログラミング言語であり、C/C++ と同様に、高速で効率的なマシン コード バイナリにコンパイルされます。Go はよく「21 世紀の C 言語」と言われ、動的なメモリ割り当てや同時実行性、そしてほとんど C と同等の高速なパフォーマンスなど、C 言語に似た特性がありながら、Python などより新しい言語の単純性や簡潔性も備えています。
Mayhem は、ネイティブな Golang ターゲットを自動検出し、 Mayhemfile
で Golang の例外の処理方法を指示する環境変数を設定できます。
Mayhem は次の Go ターゲットをファジングできます。
- ベース実行ファイル: インストゥルメンテーションなしでコンパイルされたスタンドアロンの Go ターゲットです。
- Go-Fuzz Go-Fuzz インストゥルメンテーション付きでコンパイルされた Go ターゲットです。
Rust ¶
Rust は、C の文法をヒントにし、Ocaml や Haskell などの ML ファミリーの言語から大きな影響を受けた高パフォーマンスで安全な汎用プログラミング言語です。Rust には Rust Fuzz Book という、cargo を使用して Rust の AFL および libFuzzer ターゲットを生成する方法を学ぶことができる優れたリソースがあります。
Mayhem は次の Rust ターゲットをファジングできます。
- ベース実行ファイル: インストゥルメンテーションなしでコンパイルされたスタンドアロンの Rust ターゲットです。
- AFL: AFL インストゥルメンテーション付きでコンパイルされた Rust ターゲットです。
- Cargo-Fuzz: cargo-fuzz インストゥルメンテーション付きでコンパイルされた Rust ターゲットです。
Java ¶
Java はクラスベースの汎用オブジェクト指向プログラミング言語であり、実装への依存が最小限になるよう設計されています。特に、アプリケーション開発者は「1度書けばどこでも動く」を実現できます。コンパイルされた Java コードは、Java をサポートするすべてのプラットフォームで再コンパイルなしに実行できます。結果として、1996 年のリリース以降、Java は広く普及した言語になりました。
Mayhem は次の Java ターゲットをファジングできます。
- ベース実行ファイル: インストゥルメンテーションなしでコンパイルされたスタンドアロンの Java ターゲットです。
- LibFuzzer (Jazzer) libFuzzer を基にしたカバレッジガイド付き Java ファザーである Jazzer ファザー エンジンを使用した libFuzzer インストゥルメンテーション付き Java ターゲットです。
Python ¶
Python は、動的セマンティクスを備えたオブジェクト指向のインタープリター型高レベル プログラミング言語です。Python の動的型付けと動的束縛を組み合わせた高レベル ビルトイン データ構造は、Rapid Application Development やスクリプト処理、既存のコンポーネントを接続する接着剤として使いたい場合に魅力的です。結果として、Python は使いやすい文法と強化されたモジュール性により、近年非常に広く使われる言語になっています。
Mayhem は次の Python ターゲットをファジングできます。
- LibFuzzer (Atheris): libFuzzer を基にしたカバレッジガイド付き Python ファザーである Atheris ファザー エンジンを使用した libFuzzer インストゥルメンテーション付き Python ターゲットです。
Ada ¶
Ada は、汎用の静的型付けオブジェクト指向プログラミング言語であり、もともとは 1970 年代にアメリカ国防総省の後援によって、当時さまざまな DoD プロジェクトの実装に使用されていた 450 以上のプログラミング言語を標準化する手段として開発されました。特に、Ada はコンピューター ハードウェア システムに組み込まれたソフトウェアが含まれる組み込みシステム向けのハイレベル言語として特化しています。Ada は C または C++ の機能の多くを備えていますが、コンパイラを使用して実行時より早期にエラーを発見することによる強力な型安全性チェックを重視しています。
今日では、Ada は軍事ハードウェア用プログラムだけでなく、信頼性が最も重視される航空電子工学および航空交通管制システム用プログラムの作成にも使用されています。
Mayhem は次の Ada ターゲットをファジングできます。
- ベース実行ファイル: インストゥルメンテーションなしでコンパイルされたスタンドアロンの Ada ターゲットです。