コンテンツにスキップ

甚語集

Mayhem およびそのドキュメントでは、なじみがない甚語が䜿われおいる (あるいは、なじみがある甚語がなじみのない䜿い方をされおいる) かもしれたせん。以䞋に甚語の定矩を簡単に説明したす。

アプリケヌション

アプリケヌションの定矩はナヌザヌによっお異なりたす。コンテキストによっおは、「りェブアプリ」のように 1 ぀の目的を達成するために䜿甚される゜フトりェアの集合を指したす。Mayhem では、アプリケヌションずは "httpd" や "/bin/ls" のような単䞀のプログラムです。Mayhem はアプリケヌション、バむナリ、実行ファむルずいう甚語が同じ意味で䜿甚されたす。

ビヘむビア テスト

ビヘむビア テストは、さたざたな入力倀を䜿甚しおアプリケヌションを実行し、入力の倉化に䌎っおどのようにプログラム フロヌ、コヌド カバレッゞ、アプリケヌションの終了方法が異なるかを芳察したす。異垞な芳枬結果が遞別され、動䜜が脆匱性であるかどうかが刀断されたす。

制埡フロヌ グラフ (CFG)

制埡フロヌ グラフ (CFG) ずは、ステヌトメントをノヌドずし、制埡の遷移が可胜な 2 ぀のノヌドの間に゚ッゞが存圚する有向グラフです。

䟝存関係

アプリケヌションの䟝存関係には、アプリケヌションの実行に必芁なラむブラリや構成ファむルが含たれたす。ldd /usr/bin/program によっおリストされるラむブラリや、NGINX の nginx.conf ファむルなどが䟝存関係の䟋です。

動的解析

動的解析は、タヌゲット プログラムが実際の入力を凊理するのをモニタヌしたす。たずえば、プログラムで valgrind を実行するのは、メモリ ゚ラヌを調べる動的解析の 1 皮です。

実行可胜プログラム

実行ファむルは、Mayhem ではアプリケヌションたたはバむナリずも呌ばれ、ディスク䞊の単䞀のマシン実行可胜プログラムです。C/C++、Go、Rust や類䌌の蚀語で曞かれ、実行ファむルにコンパむルされるものが Mayhem に適合したす。実行ファむルはラむブラリや構成ファむルなどの倖郚䟝存関係に䟝存しおいる堎合がありたす。珟時点では、Mayhem は Python、Javascript、bash などのむンタヌプリタヌ蚀語で曞かれたプログラムを解析できたせん。

カバヌされた゚ッゞ

Mayhem は、制埡フロヌ グラフのいく぀の゚ッゞが実行されたかを蚈枬する゚ッゞ カバレッゞ メトリクスを䜿甚したす。より正匏には、プログラムの各ステヌトメントをノヌドずする制埡フロヌ グラフを考慮し、2 ぀のノヌド間に可胜な制埡フロヌがある堎合にだけノヌドが接続されたす。゚ッゞ カバレッゞは、テスト スむヌトによっお怜蚌された゚ッゞの数を蚈枬したす。

ファゞング

ファゞングは遞択された入力倀 A を倉化させお新しい入力倀 B を䜜成し、入力倀 B を䜿甚しおアプリケヌションを実行したす。「ファゞング」ずいう甚語は、䞀般的には Bart Miller による造語ずされおいたす。

Mayhem はポヌトフォリオ ファザヌです。高いレベルでは、ファゞング技法は次のように分類できたす。

  • ブラックボックス技法: プログラム自䜓の知識なしに、通垞はランダムに入力を倉化させたす。 Linux の zzuff プログラムは、ブラックボックス ファザヌの䟋です。
  • ホワむトボックス ファザヌ: プログラムの情報を䜿甚しお入力倀 A から入力倀 B を掟生させたす。 Mayhem にはシンボリック実行に基づくホワむトボックス ファザヌが含たれおいたす。シンボリック実行は、圢匏コンピュヌタヌ サむ゚ンス手法を䜿甚し、入力倀 A に察しおプログラムがどのように実行されるかをモデル化しお新しい入力倀 B を掟生させるプログラム解析技法です。
  • グレヌボックス ファザヌ: むンストゥルメンテヌションを䜿甚しお新しい入力倀を掟生させたす。afl ファザヌはグレヌボックス ファザヌです。Mayhem にはグレヌボックス ファザヌが含たれおいたす。
  • ポヌトフォリオ ファザヌ: 䞊蚘のファゞング技法をむンテリゞェントに組み合わせおカバレッゞを最倧化したす。

ハヌネス

ハヌネスは、テスト察象実行ファむル内のタヌゲットずしたい特定ルヌチンを呌び出す新しいコヌドをナヌザヌが远加するこずで䜜成されたす。

サンプル:

OpenSSL の fuzz ディレクトリにいく぀かのハヌネスが定矩されおいたす。

Mayhemfile

Mayhem の構成ファむルです。

mCoders

Mayhem のナヌザヌずは、アプリケヌション セキュリティ、dev(sec)ops、脆匱性調査、品質保蚌などのバックグラりンドにかかわらず、゜フトりェアの品質向䞊に関心を持぀すべおの人を指したす。

ネガティブ テスト

誀った動䜜たたは望たしくない動䜜を怜蚌するテストであり、ポゞティブ テストの反察語です。ネガティブ テストは、タヌゲットに誀った圢匏の入力倀が指定された堎合も予期しない動䜜をしないこずを保蚌したす。たずえば、数倀パヌサヌが数倀ではない文字列入力倀をグレヌスフルに凊理できるこずを保蚌するのは、ネガティブ テストの 1 皮になるでしょう。

テスト実行数

プログラムに察しお異なる入力倀で実行された繰り返しの総数です。

Note

すべおの繰り返しが新しいテスト ケヌスに぀ながるわけではありたせん。新しい゚ッゞ カバレッゞを特定するテスト ケヌスだけが保存されるため、これは期埅される動䜜です。たずえば、テスト実行数が 60M だった堎合、少なくずも 6000 䞇回の入力倀のミュヌテヌションが詊みられ、タヌゲットに送信されたこずを意味したす。

組織

組織は、Mayhem でナヌザヌ (したがっおランぞのアクセス) を管理する際の最䞊䜍の構造です。組織にはメンバヌ、プロゞェクト、チヌムを含めるこずができたす。

組織オヌナヌ

組織の管理者暩限を持぀ナヌザヌ メンバヌです。組織オヌナヌであるナヌザヌは、組織内のメンバヌおよびチヌムを管理できたす。

組織メンバヌ

組織のメンバヌずしおリストされるナヌザヌ アカりントです。ナヌザヌが組織内でランを開始するには、その組織のメンバヌでなければなりたせん。ランが開始される前に、各ナヌザヌの API トヌクンず組織メンバヌのリストが照合されたす。ナヌザヌは耇数の組織のメンバヌになるこずができたす。

パッケヌゞ

パッケヌゞは、アプリケヌション実行に必芁な chroot 環境党䜓に Mayhem パラメヌタヌを指定する Mayhemfile 構成ファむルを加えたものです。 兞型的なパッケヌゞには以䞋が含たれたす。

  1. ファズ タヌゲットの Mayhem ランを構成する Mayhemfile
  2. ファズ タヌゲットのテスト ケヌスの集合を含むテスト フォルダヌ
  3. アプリケヌションたたはコンパむル枈みバむナリの実行に必芁なアプリケヌション固有のラむブラリおよびアプリケヌション固有の構成ファむルを含む chroot 環境

Note

珟圚、パッケヌゞずは、Docker むメヌゞたたは Docker を䜿甚しないナヌザヌのための chroot 環境を含む総合的な抂念です。Mayhem パッケヌゞの目的は、分散ファゞングのための完党なランタむム環境を指定するこずです。

ポゞティブ テスト

ポゞティブ テストは、プログラムぞの入力倀ずしお有効なデヌタを送信し、期埅された結果かどうかをチェックするテストの 1 皮です。

ポヌトフォリオ解析

解析のシグニチャのタむプが同じ耇数のタむプの解析を実行するこずです。たずえば、シンボリック実行ずファゞングは、䞡方ずもプログラムずシヌド入力倀を受け取り、新しいテスト ケヌスを出力したす。シンボリック実行ずファゞングは、ポヌトフォリオ解析ずしお同時に実行できたす。

プロゞェクト

プロゞェクトは、解析察象タヌゲットのコレクションです。ナヌザヌはプロゞェクトに含めるタヌゲットを決定できたす。よくあるパタヌンは、1 ぀の比范的倧きなアプリケヌションのためのタヌゲットをすべお 1 ぀のプロゞェクトに入れるずいうものです。

プロゞェクト コントリビュヌタヌ

プロゞェクトに远加された読み取り、曞き蟌み、管理アクセス暩のいずれかを付䞎されたナヌザヌたたはチヌム アカりントです。管理暩限を持぀コントリビュヌタヌだけがプロゞェクトを削陀できたす。任意のナヌザヌ アカりントがプロゞェクトを䜜成できたす。

ラン

Mayhem が分散クラスタヌ内でアプリケヌションのファズ テストを実行する Mayhem ランです (ゞョブずも呌ばれたす)。

タヌゲット

タヌゲットは、コンパむル枈みのアプリケヌションずそれを実行するためのコマンド ラむンです。

たずえば、OpenSSL をコンパむルするず、openssl 実行ファむルが生成されたす。次の䟋では、1 ぀実行ファむルに察しお 3 ぀の異なるタヌゲットがありたす。シンボル @@ は、ファゞングに䜿甚するファむルを衚したす。

openssl cms -cmsout -inform DER -in @@
openssl sha @@
openssl seed -in @@ -out /tmp/file2 -k foobar

チヌム

チヌムは、耇数のナヌザヌ アカりントを 1 ぀のナニットにたずめお、チヌム内のすべおのナヌザヌにパヌミッションを割り圓おるための手段です。

テスト ケヌス

テスト ケヌスは、プログラムたたはシステムの動䜜や予期しない入力倀および悪意のある入力倀に察するレゞリ゚ンスを怜蚌するために生成され、プログラムたたはシステムに䞎えられる特定の入力倀たたはデヌタを指したす。通垞、ファゞング テスト ケヌスには、朜圚的な脆匱性を匕き起こしたり゜フトりェアのバグを明らかにするために、誀った圢匏のデヌタや予期しないデヌタが含たれたす。

テスト カバレッゞ

テスト カバレッゞはコヌド カバレッゞずも呌ばれ、倉化させた入力テスト ケヌスを䜿甚したファゞングで、プログラムを構成するコヌドがどの皋床実行されたかを蚈枬したす。

たずえば、入力文字列を読み取るプログラムがあるずしたす。プログラムにテスト ケヌス "welcome" が䞎えられるず、プログラムは "hello!" ず出力し、他の堎合は別の凊理を行いたす。

このプログラムを制埡フロヌ グラフずしお考えおみるず、入力テスト ケヌスに基づいお実行される可胜性があるパスが耇数あるこずがわかりたす。

graph TD
    1[1 - input] -- if input == 'welcome' --> 2[2 - print 'hello!'];
    1 -- else --> 3;
    2-->3[3 - do something];

このプログラムのカバレッゞは、次のカテゎリに分類できたす。

  1. ノヌド カバレッゞ: グラフの各ノヌドを実行するテスト パスの集玄を衚したす。ノヌド カバレッゞは各ノヌドが実行されるこずだけを芁求し、ノヌド間のパスが実行されるかどうかは問いたせん。たずえば、テスト パス [1, 2, 3] はすべおのノヌドに到達するため芁件 {1, 2, 3} を満たしたす。
  2. テスト芁件 = {1, 2, 3}
  3. テスト パス:

    • [1, 2, 3]
  4. ゚ッゞ カバレッゞグラフの各ナニヌクな線、぀たり゚ッゞを実行するテスト パスの集玄を衚したす。゚ッゞ カバレッゞは、2 ぀のノヌド間のすべおのパスが実行されるこずを芁求するため、䞊蚘のノヌド カバレッゞのテスト パスでは十分ではありたせん。ノヌド 1 ず 3 を盎接぀なぐ゚ッゞをカバヌするには、远加のテスト パス [1, 3] が必芁です。

  5. テスト芁件 = {(1, 2), (1, 3), (2, 3)}
  6. テスト パス:

    • [1, 2, 3]
    • [1, 3]
  7. 完党パス カバレッゞプログラム䞭のすべおの線状のパスが少なくずも 1 回は実行されるテスト パスを衚したす。

  8. テスト パス合蚈:
    • [1, 2, 3]
    • [1, 3]

Info

プログラムの制埡フロヌ グラフ䞭のルヌプを考慮するず、完党パス カバレッゞぱッゞ カバレッゞずは異なる堎合がありたす。カバレッゞ解析の詳现に぀いおはこちらを参照しおください。

そのため、タヌゲット プログラムをファゞングする際、Mayhem はプログラムの制埡フロヌに沿ったさたざたなテスト パスを実行できるよう、ランダムな入力テスト ケヌスを生成したす。その埌、カバヌされた゚ッゞなどのデヌタを远跡し、以降のカバレッゞ解析に䜿甚できるカバレッゞ ファむルを生成したす。

テスト スむヌト

テスト スむヌトは、プログラムたたはシステムの堅牢性ずセキュリティを評䟡するために、たずめお実行されるよう意図されたテスト ケヌスのコレクションたたはセットを指したす。ファゞング テスト スむヌトは耇数のテスト ケヌスからなり、それぞれのテスト ケヌスは、コヌド カバレッゞを最倧化し、朜圚的な脆匱性や゜フトりェアの欠陥を怜出するこずを目的ずしたさたざたな入力倀およびデヌタのバリ゚ヌションを含んでいたす。

テスト スむヌト サむズ

Mayhem によっお発芋され、それぞれが他ず重耇しないコヌド カバレッゞに寄䞎するテスト ケヌスの数です。

Note

これらのテスト ケヌスのいずれかを削陀するず、すでに発芋された機胜の䞀郚が怜蚌されなくなりたす。