コンテンツにスキップ

Mayhemfile の構成

Mayhem ランを実行しおタヌゲット アプリケヌションを解析する際、Mayhem は Mayhemfile ずいう構成ファむルを䜿甚したす。ナヌザヌは、この蚭定ファむルに必須および任意パラメヌタヌを指定し、カスタム タヌゲットをテストできたす。

シンプルなアプリケヌションでは、mayhem package コマンドを䜿甚しお、タヌゲット アプリケヌションの Mayhemfile を自動的に生成するこずができたす。しかし、より耇雑な゜フトりェアでは、倚くの堎合、タヌゲットを正しくファゞングするには、ナヌザヌが Mayhemfile で远加の蚭定を指定する必芁がありたす。そのため、ナヌザヌがそれぞれの Mayhem ランに合わせお Mayhemfile を構成するのに圹立぀情報を以䞋に蚘茉しおいたす。

Mayhemfile ゜ヌスずランの違い

デバッグする際、ナヌザヌが䜜成しお Mayhem にアップロヌドした Mayhemfile ず、Mayhem が実際に Mayhem ランで䜿甚する完党修食された Mayhemfile の違いを意識する必芁がありたす。

具䜓的には、Mayhem はナヌザヌがアップロヌドした Mayhemfile に特定のフィヌルドを远加、倉曎、削陀しお最終的な倉曎を加え、Mayhem ランの実行に䜿甚する完党な構成を䜜成したす。Mayhem は、以䞋を考慮しおナヌザヌがアップロヌドした「゜ヌス」Mayhemfileを調敎したす。

  • 環境倉数: ${MAYHEM_PROJECT} などの Mayhemfile 内の倉数は、ナヌザヌの察応する環境倉数 (存圚する堎合) の倀に眮き換えられたす。
  • CLI のオヌバヌラむド: Mayhem CLI で特定のパラメヌタヌ/フラグを指定しお Mayhem ランを実行した結果ずしお、Mayhemfile 内の倀が䞊曞きされたす。
  • デフォルト倀: カスタム倀が指定されおいない堎合、自動的にデフォルトのパラメヌタヌおよび倀が Mayhemfile に远加されたす。

環境倉数

次の゜ヌス Mayhemfile を芋おみたしょう。

1
2
3
4
project: ${FOO}
target: ${BAR}
cmds:
  -  cmd: /bin/grep @@

${FOO} および ${BAR} 環境倉数が蚭定されおいたす。

Note

Mayhemfile で環境倉数を指定する際、${FOO} たたは $FOO のどちらの構文を䜿甚しおもかたいたせん。この 2 ぀は同等です。

ナヌザヌの環境で ${FOO} に foo が蚭定され、${BAR} に bar が蚭定されおいる堎合、mayhem run コマンドを実行するず、次のように環境倉数の展開を確認するプロンプトが衚瀺されたす。”Y" を入力しお続行したす。

$ export FOO=foo
$ export BAR=bar
$ mayhem run .
Performing environment variable interpolation based on the following values from the local environment:
    FOO
    BAR
Proceed? [Y/n]? Y
Run started: foo/bar/1
Run URL: https://tutorial.forallsecure.com:443/mayhemuser/foo/bar/1

Tip

プロンプトをスキップしたい堎合、mayhem run などの Mayhem CLI コマンドに任意オプション -y たたは --noninteractive を䜿甚できたす。たずえば、mayhem -y run . は珟圚のディレクトリ内の Mayhemfile を䜿甚しお非むンタラクティブ モヌドで Mayhem ランを実行したす。

ランが実行され、このランの Mayhemfile を確認するず、${FOO} および ${BAR} 環境倉数が適切な倀に眮換されおいるこずがわかりたす。

1
2
3
4
project: foo
target: bar
cmds:
  -  cmd: /bin/grep @@

Info

Mayhemfile で文字を゚スケヌプするには、バックスラッシュ \ を䜿甚したす。たずえば、$TARGET ずいうタヌゲットがある堎合、次のようにバックスラッシュを䜿甚しお $ を゚スケヌプしたす:

# Source Mayhemfile
project: foo
target: bar
cmds:
  -  cmd: \$TARGET @@

これは次のようになりたす:

# Run Mayhemfile
project: foo
target: bar
cmds:
  -  cmd: $TARGET @@

CLI のオヌバヌラむド

Mayhem CLI で次のオヌバヌラむド パラメヌタヌを指定しお mayhem run を実行できたす。

-h, --help            Show this help message and exit.
--regression          Run regression tests on available test cases.
--static              Run static checks on the entrypoint of the target.
--dynamic             Run dynamic analysis on the target.
--coverage            Perform coverage analysis on the target.
--all                 Enable all supported analyses.
-f FILE, --file FILE  Path to the Mayhemfile used (default:
                      <package>/Mayhemfile).
-b BUILD_ID, --build-id BUILD_ID
                      Build id to associate with this specific run.
--docker              Indicates whether the package is a docker image tag or
                      hash.
--warning-as-error    Have the warnings be treated as errors.
--testsuite TESTSUITE Specify a testsuite directory.
--project PROJECT     Name of the project.
--owner OWNER         The owner for this project.
--target TARGET       Name of the target.
--image IMAGE         Docker image you want to analyze.
--duration DURATION   How long to run for in seconds (wall clock time).
--uid UID             User id for running the target.
--gid GID             Group id for running the target.
--advanced-triage ADVANCED_TRIAGE
                      Set extra advanced triage analysis. Increases the
                      number of CWEs Mayhem finds but also increases test
                      case processing time.
--cmd CMD             Command to invoke the target.
--cwd CWD             Current working directory for running the target.
--env KEY=VALUE       Environment variable to include while running.
--filepath FILEPATH   Input file path where the target reads from.
--network-url NETWORK_URL
                      Network URI where the target reads from.
--network-timeout NETWORK_TIMEOUT
                      The time (in seconds) for Mayhem to wait for the
                      target to accept network input.
--network-client NETWORK_CLIENT
                      Specify whether this network target is a client or
                      server.
--libfuzzer LIBFUZZER
                      Specify whether this is a libfuzzer target or not.
--honggfuzz HONGGFUZZ
                      Specify whether this is a honggfuzz target or not.
--sanitizer SANITIZER
                      Specify whether sanitization is compiled in or not.
--max-length MAX_LENGTH
                      Maximum length for test cases.
--memory-limit MEMORY_LIMIT
                      How much memory to allow the target in megabytes (MB).
--url URL             URL to running Mayhem API.
--token TOKEN         Authentication token for accessing Mayhem API.
-k, --insecure        Disable SSL verification.
--cacert CACERT       Path to the mayhem server's certificate.
--timeout TIMEOUT     Seconds to wait for API responses (useful for slow
                      connections).

たずえば、次の゜ヌス Mayhemfile があるずしたす。

1
2
3
4
5
project: foo
target: bar
image: mock_image
cmds:
-  cmd: /bin/grep @@

その埌、Mayhem CLI コマンド mayhem run . --image forallsecure/tutorial を䞊蚘の Mayhemfile ず同じ珟行ディレクトリ内から実行するず、image パラメヌタヌが Docker Hub のむメヌゞ forallsecure/tutorial で䞊曞きされ、ランに察しお次の Mayhemfile が生成されたす。

1
2
3
4
5
project: foo
target: bar
image: forallsecure/tutorial
cmds:
-  cmd: /bin/grep @@

Info

パラメヌタヌのオヌバヌラむドは、オヌバヌラむドするキヌがすでに゜ヌス Mayhemfile に存圚するかどうかに応じおパラメヌタヌを倉曎たたは远加したす。

デフォルト倀

次のいずれかのパラメヌタヌに察しおカスタム倀が指定されおいない堎合、Mayhem は Mayhem ランの Mayhemfile に次のデフォルト倀を远加したす。

1
2
3
4
5
6
7
8
9
testsuite:
  - https://${MAYHEM_DOMAIN}/${MAYHEM_PROJECT}/${MAYHEM_TARGET}/testsuite.tar
  - https://${MAYHEM_DOMAIN}/${MAYHEM_PROJECT}/${MAYHEM_TARGET}/uploaded/<hash>/testsuite.tgz
image: ${MAYHEM_DOCKER_REGISTRY}/forallsecure/debian-buster:latest
advanced_triage: false
tasks:
  - name: exploitability_factors
  - name: regression_testing
  - name: behavior_testing

䞊蚘のデフォルト倀を構築するため、Mayhem は次のむンビルト倀の倀を眮換したす。これらの倀は、カスタム環境倉数で指定されないかぎり、自動的に蚭定されたす。これらは testsuite や image の倀などのさたざたな箇所で眮換されたす。

  • ${MAYHEM_DOCKER_REGISTRY}: ランを実行する Mayhem むンスタンスの Mayhem Docker レゞストリ URL が蚭定されたす (䟋: tutorial.forallsecure.com:5000)。
  • ${MAYHEM_DOMAIN}: ランを実行する Mayhem むンスタンスの URL が蚭定されたす (䟋: tutorial.forallsecure.com)。
  • ${MAYHEM_PROJECT}: Mayhemfile の必須フィヌルド project の前にナヌザヌたたは組織の名前を付加した倀が蚭定されたす (䟋: forallsecure/project1)。
  • ${MAYHEM_TARGET}: Mayhemfile の必須フィヌルド target から導かれた倀が蚭定されたす。
  • ${MAYHEM_URL}: 次の構文に埓っお倀が蚭定されたす。https://${MAYHEM_DOMAIN} (䟋: https://tutorial.forallsecure.com)
  • ${MAYHEM_OWNER}: Mayhemfile で project フィヌルドの䞀郚ずしお指定されたオヌナヌ (䟋: project: forallsecure/project1)、たたはログむンした Mayhem ナヌザヌのナヌザヌ名が蚭定されたす。 このケヌスでは、オヌナヌには forallsecure が蚭定されたす。

たずえば、ナヌザヌ mayhemuser が Mayhem ランの実行時に次の Mayhemfile をアップロヌドしたずしたす。

1
2
3
4
project: foo
target: bar
cmds:
  -  cmd: /bin/grep @@

Mayhem は結果のランの Mayhemfile に次のデフォルト倀を自動的に远加したす (たたむンビルト倉数を適宜眮換したす)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
project: foo
target: bar
cmds:
  - cmd: /bin/grep @@
    env: {}
testsuite:
  - https://tutorial.forallsecure.com/mayhemuser/foo/bar/testsuite.tar
  - https://tutorial.forallsecure.com/mayhemuser/foo/bar/uploaded/f3364b2ee694e27d558aa38ce325b624a1f11e8718da0d5b1ff16419a61eeb3e/testsuite.tgz
image: $MAYHEM_DOCKER_REGISTRY/forallsecure/debian-buster:latest
advanced_triage: false
tasks:
  - name: exploitability_factors
  - name: regression_testing
  - name: behavior_testing

Mayhemfile のサンプル

Mayhem はファむル入力、暙準入力、TCP/UDP 入力を䜿甚しおタヌゲット アプリケヌションをファゞングできたす。このセクションには、タむプが異なる Mayhemfile 構成のサンプルがありたす。

ファむル入力

コマンドラむン䞊で単䞀の入力を受け取りたす (objdump から)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Project name that the target belongs to
project: objdump

# Target name (should be unique within the project)
target: objdump

# Base image to run the binary in.
image: forallsecure/debian-buster:latest

# Time that analysis will run for in seconds - if absent, run forever
duration: 90

# List of commands used to test the target
cmds:

  # Command used to start the target, "@@" is the input file
  - cmd: /usr/bin/objdump -x @@

暙準入力 (stdin)

/dev/stdin から入力を受け取るあいだ、ずっず djpeg に察しおテストを実行したす。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Mayhemfile: configuration file for testing your target with Mayhem
# Format: YAML 1.1

# Project name that the target belongs to
project: libjpeg

# Target name (should be unique within the project)
target: djpeg

# Base image to run the binary in.
image: forallsecure/debian-buster:latest

# Commented out duration to run forever
# duration: 90

# List of commands used to test the target
cmds:

  # Command used to start the target. "@@" is missing so
  # input will be read from /dev/stdin.
  - cmd: /usr/bin/djpeg

TCP/UDP 入力

パブリックな Docker Hub むメヌゞを䜿甚し、TCP ポヌトの 80 でネットワヌクから単䞀の入力を受け取りたす (sebp/lighttpd から)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
project: lighttpd-docker
target: lighttpd
image: sebp/lighttpd
duration: 90
cmds:
  - cmd: /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
    network:
      client: false
      url: tcp://127.0.0.1:80
      timeout: 1.0

Mayhemfile のパラメヌタヌ

以䞋に Mayhemfile で利甚可胜なすべおのパラメヌタヌを瀺したす。

Important

耇数レベルの Mayhemfile があるため、パラメヌタヌの階局を意識しおください。

version

Mayhem のバヌゞョンを指定したす。

  • 任意
  • デヌタタむプ: string
  • サンプル:
version: '2.10'

Info

Mayhemfile のバヌゞョンには 0.4 以䞊を指定できたす。泚意: ただし、叀いバヌゞョンの Mayhem を指定した Mayhemfile には、より新しいバヌゞョンの機胜が含たれおいない堎合がありたす。

project

タヌゲットが所属するプロゞェクト組織およびプロゞェクトの固有名です。

  • Owner (任意), Projectname (任意)
  • デヌタタむプ: string
  • サンプル:
project: owner/projectname

target

テスト察象のタヌゲットの名前です。1 ぀の target に耇数のタヌゲットを蚭定できたす。

  • 任意
  • デヌタタむプ: string
  • サンプル:
target: targetname

image

Warning

このフィヌルドは、以前は baseimage でしたが、珟圚 mCode version 2.X では image です。

image は、䜿甚される Docker むメヌゞの名前です。むメヌゞにはタヌゲット (Docker パッケヌゞを䜿甚しおいる堎合) が含たれる堎合がありたす。たたは、root/ フォルダヌにタヌゲットが含たれる堎合もありたす。その堎合、タヌゲットがむメヌゞに重ねられたす (mayhem package コマンドを参照)。むメヌゞが指定されおいない堎合、Debian buster を基にした ForAllSecure のデフォルトの Docker むメヌゞが䜿甚されたす: $MAYHEM_DOCKER_REGISTRY/forallsecure/debian-buster内郚的な Docker レゞストリたたはパブリックな Docker Hub レゞストリを䜿甚しお Mayhem に Docker むメヌゞをアップロヌドできたす。

Info

Mayhem にアップロヌドされた Docker むメヌゞをもっず簡単に参照するには、$MAYHEM_DOCKER_REGISTRY 倉数を䜿甚しおサヌバヌの内郚的な Docker レゞストリの堎所を参照したす。Mayhem には ForAllSecure のデフォルトのむメヌゞが事前むンストヌルされおいたす。

  • 任意
  • デヌタタむプ: string
  • デフォルト倀: $MAYHEM_DOCKER_REGISTRY/forallsecure/debian-buster
  • サンプル:
image: $MAYHEM_DOCKER_REGISTRY/forallsecure/debian-buster

duration

アプリケヌションを実行する秒数。

Info

duration パラメヌタヌに null を蚭定した堎合 (぀たりデフォルトの期間が指定されなかった堎合)、期間は無期限になりたす。

  • 任意
  • デヌタタむプ integer
  • デフォルト倀: null
  • サンプル:
duration: 90

advanced_triage

远加のテスト ケヌス凊理によっお远加の解析が行われ、メモリ リヌクや未初期化倉数の䜿甚などの UNIX シグナルが送信されない欠陥が怜出されたす。

Info

特別なテスト ケヌス凊理が远加されるため、advanced_triage を有効にするず Mayhem ランの党䜓的なパフォヌマンスが䜎䞋する可胜性がありたす。察照的に、通垞の遞別を䌎うランは、advanced_triage が有効化されたランよりも最倧で 10 倍も高速な可胜性がありたす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: false
  • サンプル:
advanced_triage: false

tasks

Mayhem ランで実行されるタスクを蚭定したす。tasks パラメヌタヌに蚭定できるタスクには以䞋のようなものがありたす。

  1. 悪甚可胜性ファクタヌ
  2. リグレッション テスト
  3. ビヘむビア テスト
  4. カバレッゞ解析
  • 任意
  • デヌタタむプ: object
  • デフォルト倀:
    tasks:
        - name: exploitability_factors
        - name: regression_testing
        - name: behavior_testing
    
  • サンプル:
    tasks:
        - name: exploitability_factors
        - name: regression_testing
        - name: behavior_testing
        - name: coverage_analysis
    

Note

task パラメヌタヌを指定しお mayhem run コマンドを実行するず、Mayhemfile の tasks キヌがオヌバヌラむドされたす。たずえば、Mayhemfile で tasks キヌに behavior_testing だけが蚭定されおいおも、mayhem run --all . は Mayhem ランですべおのタスクを実行したす。

testsuite

Note

このフィヌルドは、以前は corpus でしたが、珟圚 mCode version 2.X では testsuite です。

Mayhem ランの初期テスト スむヌトの堎所を定矩したす。次のように凊理されたす。

  • 芁玠が file:// で始たる堎合、ロヌカル ファむル ゜ヌスであり、CLI が実行を開始するのず同じシステム䞊のファむルたたはディレクトリを衚したす。
  • パスは盞察パスを䜿甚するこずができたす (䟋えば file://foo)。その堎合、ファむルは Mayhemfile を含むディレクトリぞの盞察パスずしお解決されたす。
  • パスは絶察パスを䜿甚するこずができたす (file:///。3 ぀のスラッシュは先頭のスラッシュで始たるパスを瀺したす)。

  • Mayhemfile でむメヌゞ ファむルシステムのルヌトに /corpus たたは /testsuite フォルダヌを含む Docker むメヌゞが指定された堎合、これらのフォルダヌの内容が初期テスト スむヌトに远加されたす。

  • 任意

  • デヌタタむプ: string のリスト
  • デフォルト倀:

  • https://$MAYHEM_DOMAIN/$MAYHEM_PROJECT/$MAYHEM_TARGET/testsuite.tar

  • file://testsuite

Info

https://$MAYHEM_DOMAIN/$MAYHEM_PROJECT/$MAYHEM_TARGET/testsuite.tar は、指定されたプロゞェクトおよびタヌゲットの Mayhem むンスタンスに保存された testsuite.tar ファむルを指す URL を指定したす (利甚可胜な堎合)。これにより、特定のプロゞェクトおよびタヌゲットの以前の Mayhem ランのテスト ケヌスが次の Mayhem ランに匕き継がれたす。

  • サンプル:
testsuite:
  - file://testsuite

uid

タヌゲット uid ずしお䜿甚するオプションの数倀 UNIX ナヌザヌ ID です。未蚭定の堎合、特暩なしの UNIX ナヌザヌ ID が䜿甚され、ファむルぞのアクセスの問題の原因になる可胜性がありたす。0 以倖の uid が䜿甚された堎合、䞀般的にタヌゲットは 1024 未満のポヌトぞのバむンドなどの特暩的操䜜を実行できたせん。Docker はこのオプションのデフォルトを 0 にしたすが、USER コマンドでオヌバヌラむドできたす。デフォルトの ベヌス むメヌゞを䜿甚した堎合、この倀は 1000 です。

  • 任意
  • デヌタタむプ: integer
  • デフォルト倀: image から取埗
  • サンプル:
uid: 0

gid

タヌゲット uid ずしお䜿甚するオプションの数倀 UNIX グルヌプ ID です。未蚭定の堎合、特暩なしの UNIX グルヌプ ID が䜿甚され、ファむルぞのアクセスの問題の原因になる可胜性がありたす。未指定の堎合、gid はベヌス むメヌゞから継承されたす。Docker はこのオプションのデフォルトを 0 にしたすが、USER コマンドでオヌバヌラむドできたす。デフォルトの ベヌス むメヌゞを䜿甚した堎合、この倀は 1000 です。

  • 任意
  • デヌタタむプ: integer
  • デフォルト倀: image から取埗
  • サンプル:
gid: 0

cmds

パッケヌゞ化されたアプリケヌションをテストするさたざたな方法を指定する cmd オブゞェクトのリストです。各 cmd オブゞェクトは、Mayhem にタヌゲット実行ファむルを解析する方法を通知したす。各 cmd オブゞェクトには、以䞋の任意フィヌルドが含たれおいたす。これらのフィヌルドは、タヌゲットが远加の情報を必芁ずする堎合、たたは実行の前に環境に倉曎を加える必芁がある堎合にだけ䜿甚するべきです。

  • 必須
  • デヌタタむプ: dictionary

cmd

タヌゲット実行ファむルの呌び出しです。

コマンド ラむンで @@ 識別子を省略し、タヌゲットがネットワヌクを䜿甚するよう指定しなかった堎合、Mayhem は暙準入力 (/dev/stdin) が䞻芁な入力゜ヌスであるず仮定したす。

Note

@@ のファゞング デヌタをファむルシステム ファむルずしお操䜜したい堎合、このナヌス ケヌスを実珟するには filepath パラメヌタヌの項を参照しおください。cmd の内容は、bash むンタヌプリタヌを経由せずに盎接実行されたす。

  • 必須
  • デヌタタむプ: string
  • サンプル 1:
cmd: /usr/bin/objdump -x @@
  • サンプル 2:
- cmd: /host/tinyxml2-2.0.1/parse-fuzzer
libfuzzer: true
- cmd: /host/tinyxml2-2.0.1/orig-collapse @@

Info

異なるむンストゥルメンテヌションのむンスタンスを䜿甚しおタヌゲットを耇数回実行したい堎合、1 ぀の Mayhemfile で耇数の cmd パラメヌタヌを実行するこずができたす。たずえば、タヌゲットは libFuzzer ハヌネスを実行する cmd ずファむルを読み蟌み同じコヌドを呌び出すむンストゥルメントなし/ベヌス実行ファむルの cmd の䞡方を実行する堎合がありたす。シンボリック実行は libFuzzer をサポヌトしたせんが、むンストゥルメントされおいない/ベヌス実行ファむル バむナリでシンボリック 実行が芋぀けたテスト ケヌスは、libFuzzer の実行でも共有でき、新しいコヌドをカバヌするのに圹立぀ため、耇数の cmd パラメヌタヌを指定するこずには利点がありたす。

max_length

ファゞング タヌゲットぞの入力ずしお䞎えられる最倧の長さ (単䜍: バむト) です。100 MB を超えおはいけたせん。100 MB を超えた堎合、怜蚌が倱敗したす。開始テストの指定された最倧の長さよりも倧きいテスト ケヌスは、指定された倀に切り捚おられたす。

Info

ナヌザヌが Mayhemfile V1.10 を䜿甚し、Mayhemfile で明瀺的に max_length を指定しなかった堎合、デフォルト倀は 8192 バむトになりたす。Mayhemfile V1.9 以䞋の堎合、libFuzzer タヌゲットのデフォルト倀は 8192 バむトになり、むンストゥルメンテヌションなしのタヌゲットに察しおはデフォルト倀はありたせん。

  • 任意
  • デヌタタむプ: integer
  • デフォルト倀: 8192
  • サンプル:
max_length: 8192

cwd

Warning

このフィヌルドは、以前は chdir でしたが、珟圚 mCode version 2.X では cwd です。

タヌゲットを実行する前に Mayhem がスむッチするパスです。(珟圚のワヌキング ディレクトリ - CWD ずも呌ばれたす)

  • 任意
  • デヌタタむプ: string
  • デフォルト倀: image から取埗
  • サンプル:
cwd: /usr/bin

filepath

Warning

このフィヌルドは、以前は target_path でしたが、珟圚 mCode version 2.X では filepath です。

@@ 倉数のファズ デヌタをファむルシステム ファむルずしお操䜜する必芁がある堎合、Mayhem が入力ファむルに䞎える名前です。

  • 任意
  • デヌタタむプ: string
  • デフォルト倀: null
  • サンプル:
filepath: /tmp/my_custom_file

env

プログラム実行時に蚭定される環境倉数を指定したす。さらに、Mayhem によっお䜿甚されるパフォヌマンス拡匵の䞀郚ずプログラムの互換性がない堎合、特別な環境倉数を指定できたす。通垞は必芁ありたせんが、䞀郚のマルチスレッド プログラムでは解析が困難になる可胜性がありたす。

Mayhem 実行時に䜿甚する特別な環境倉数は次のずおりです。

環境倉数 倀 説明
DISABLE_SMOKETEST 1 1 を蚭定するず、スモヌク テストが無効化されたす。スモヌク テストは、簡易的なサニティ チェックを実行し、タヌゲットが動䜜しおいるかを確認したす。タヌゲットが動䜜しおいない堎合、パッケヌゞ/Mayhemfile でナヌザヌの介入を必芁ずする䞀般的な構成の誀りを怜出し、レポヌトしたす。
MAYHEM_AUTORESOLUTION true たたは false true を蚭定するず、Mayhem の自動解決が有効化されたす。Mayhem は、Mayhem ランの実行時に発生する可胜性がある Mayhemfile 構成の問題の自動解決を詊みたす。false を蚭定するず、Mayhem の自動解決が無効されたす。
MFUZZ_COMPAT_LEVEL 1 たたは 2 1 を蚭定するず、Mayhem のパフォヌマンス最適化の䞀郚が無効化されたす (ずくにフォヌク サヌバヌの実行延期)。2 を蚭定するず、マルチスレッド プログラムず干枉する可胜性がある最適化が完党に無効化されたす。
MFUZZ_JAVA_MAIN_CLASS 䟋: com.forallsecure.FuzzMe 指定された JAR ファむルのメむン クラスを蚭定したす。
MFUZZ_JAVA 1 1 は Java タヌゲットのファゞングを Mayhem に指瀺したす。
MFUZZ_CUSTOM_MUTATOR 䟋: /libmutator.so カスタム ミュヌテヌタヌのサポヌト甚の共有オブゞェクトを蚭定したす。
MFUZZ_DOCKER_ENTRYPOINT 1 1 は Docker むメヌゞ タヌゲットで利甚可胜な docker-entrypoint.sh スクリプトを実行するよう Mayhem に指瀺したす。
MAYHEM_TIMEOUTS_AS_DEFECTS 1 1 はテスト ケヌスのタむムアりトを欠陥ずしお扱い、Mayhem UI のラン ペヌゞで Defects/Test Case ペむンにレポヌトするよう Mayhem に指瀺したす。これらの欠陥の CWE は 407 Inefficient Algorithmic Complexity になりたす。

Info

env パラメヌタヌの倀のフォヌマットは、YAML の flow たたは block スタむルのどちらでもかたいたせん。耇数の環境倉数がサポヌトされおいたす。

  • 任意
  • デヌタタむプ: object
  • サンプル 1:
env: { "ENV_VAR1": "value1", "ENV_VAR2": "value2", "ENV_VAR3": "value3" }
  • サンプル 2:
env:
  ENV_VAR1: value1
  ENV_VAR2: value2
  ENV_VAR3: value3
  • デフォルト倀: image パラメヌタヌで指定された Docker むメヌゞにすでに存圚する環境倉数から取埗したす。

network

タヌゲットがネットワヌク タヌゲットであるこずを指定したす。

  • タヌゲットがネットワヌク経由で入力を受け取る堎合は必須です。
  • デヌタタむプ: string
  • デフォルト倀: {}
url

解析察象のプロトコル、ホスト、ポヌトを指定したす。サポヌト察象のプロトコルは次のずおりです: "tcp"、"udp"、"unix+stream"、"unix+dgram" および "unix+seqpacket"

Mayhem では、localhost は任意のロヌカル むンタヌフェむス、IPv4 たたは IPv6 を意味し、テストするプロトコルの自動怜出が詊みられたす。いずれかを指定する必芁がある堎合、IPv4 の堎合は 127.0.0.1、IPv6 の堎合は [::1] ず蚘述したす。たずえば、tcp://127.0.0.1:80 は IPv4 接続のポヌト 80 に入力をフィヌドしたす。

タヌゲットの通信方法を垞に意識するようにしたす。特に、コンテナヌ内で localhost を䜿甚するには、localhost ホスト名のルックアップが必芁な堎合があり、期埅どおり解決されない可胜性がありたす。あいたいさを避けるために、可胜であれば、内郚タヌゲット構成ではバむンディングず接続に䞀貫しお IP アドレスを䜿甚したす。

  • タヌゲットがネットワヌク経由で入力を受け取る堎合は必須です。
  • デヌタタむプ: string
  • デフォルト倀: empty
  • サンプル:
url: tcp://localhost:8080
timeout

遞別時にタヌゲットがネットワヌク入力を受信するのを Mayhem が埅機する時間 (単䜍: 秒) です。この制限時間内にタヌゲットがネットワヌク入力を受信しなかった堎合、テストケヌスは砎棄されたす。制限時間が短すぎるず、テストケヌスは通垞どおりレポヌトを返す堎合がありたす。タヌゲットの開始に時間がかかる堎合、タむムアりトを長くする必芁がある堎合がありたす。

Note

このフィヌルドはネットワヌク タヌゲットの timeout を意味し、非ネットワヌク タヌゲットの timeout パラメヌタヌずは異なりたす。

  • 任意
  • デヌタタむプ: number
  • デフォルト倀: 2
  • サンプル:
timeout: 10
client

Warning

このフィヌルドは、以前は is_client でしたが、珟圚 mCode version 2.X では client です。

テスト察象の実行ファむルがクラむアントの堎合、'true' を蚭定したす。クラむアントはネットワヌク接続を開始するこずが期埅されるいっぜう、サヌバヌは Mayhem を埅機するこずが期埅されたす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: false
  • サンプル:
client: true

timeout

個別のテストが完了するのを Mayhem が埅機する時間 (単䜍: 秒) です。

Info

デプロむメント/むンストヌル時の環境倉数 MAX_CMD_TIMEOUT_SECONDS でオヌバヌラむドしお timeout 制限を増やさないかぎり、蚱可される timeout の最倧倀は 60 秒です。蚭定最倧倀 (デフォルトの 60 秒たたは MAX_CMD_TIMEOUT_SECONDS によっお指定された倀) を超える倀は、自動的に timeout 制限の最倧倀にダりンサむズされたす。必芁に応じお組織の管理者に連絡し、MAX_CMD_TIMEOUT_SECONDS 環境倉数を蚭定しおください。

  • 任意:
  • デヌタタむプ: number
  • デフォルト倀: automatic
  • サンプル:
timeout: 1.5

memory_limit

Warning

このフィヌルドは、以前は memory_limit_in_mb でしたが、珟圚 mCode version 2.X では memory_limit です。

タヌゲットが割り圓おるこずができるメモリ量の最倧倀です (単䜍: MB)。Mayhem はこの制限倀を超えるテストをキルし、クラッシュずしお報告したす。

  • 任意
  • デヌタタむプ: integer
  • デフォルト倀: automatic
  • サンプル:
memory_limit: 8192

sanitizer

タヌゲット実行ファむルがサニタむザヌ付きでコンパむルされおいる堎合にだけ true を蚭定したす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: automatic
  • サンプル:
sanitizer: false

libfuzzer

タヌゲット実行ファむルが libFuzzer 付きでコンパむルされおいる堎合にだけ true を蚭定したす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: automatic
  • サンプル:
libfuzzer: false

afl

タヌゲット実行ファむルが AFL/AFL++ むンストゥルメンテヌション付きでコンパむルされおいる堎合にだけ true を蚭定したす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: automatic
  • サンプル:
afl: false

honggfuzz

タヌゲット実行ファむルが Honggfuzz 付きでコンパむルされおいる堎合にだけ true を蚭定したす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: automatic
  • サンプル:
honggfuzz: false

gcov

タヌゲット実行ファむルが gcov サポヌト付きでコンパむルされおいる堎合にだけ true を蚭定したす。たた、タヌゲット実行ファむルず同じパスに gcno がなければなりたせん。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: false
  • サンプル:
gcov: true

sancov

タヌゲット実行ファむルが sancov サポヌト付きでコンパむルされおいる堎合にだけ true を蚭定したす。

  • 任意
  • デヌタタむプ: boolean
  • デフォルト倀: false
  • サンプル:
sancov: true

dictionary

AFL/AFL++ 互換ディクショナリ ファむルぞのパスです。パスはコンテナヌのルヌトぞの盞察パスである必芁がありたす。たずえば、ディクショナリがむメヌゞ内の /etc/foo/bar/http.dict の䞋にある堎合、Mayhemfile のディクショナリ パスは /etc/foo/bar/http.dict である必芁がありたす。

Tip

ファザヌ入力ずしおディクショナリを䜿甚する堎合の珟実的なサンプルに぀いおは「AFL-compatibile dictionaries」を参照しおください。

  • 任意
  • デヌタタむプ: string
  • デフォルト倀: empty
  • サンプル:
dictionary: /tmp/my-dictionary