Mayhem での Docker エントリポイントのサポート¶
環境変数に基づいて構成アイテムをセットアップするなど、コンテナー化されたアプリケーションを実行する前に 1 回限りの初期化プロセスを実行するために、開発者が Docker イメージにエントリポイント スクリプトを含めることがよくあります。
Note
Docker エントリポイント スクリプトには docker-entrypoint.sh
という名前が付けられるのが一般的ですが、このような命名は必須ではありません (スクリプトである必要もなく、単なるコマンドにすることもできます)。ENTRYPOINT の詳細については、Docker の公式ドキュメントを参照してください。
そのため、Mayhem は Docker イメージのエントリポイントとして指定されたコマンドの実行をサポートしており、Mayhem ランでファジングを実行する前に初期化プロセスを実行することができます。
Mayhem での Docker エントリポイントの有効化¶
Docker イメージの利用可能なエントリポイントを実行するよう Mayhem に指示するには、まず、次の操作を実行する必要があります。
-
次のコマンドを実行して、ターゲットの Docker イメージにエントリポイントがあることを確認します。
docker image inspect <IMAGE_NAME>
コマンドは次のような出力を返すはずです。
... "Entrypoint": [ "docker-entrypoint.sh" ] ...
ヒント
- Docker イメージの検査に関する詳細については、docker image inspect コマンドの公式ドキュメントを参照してください。
- Docker イメージがまだセットアップされておらず、現在
Dockerfile
を使用してイメージを構築している場合、 ENTRYPOINT および CMD をセットアップする方法および、これら 2 つの 相互作用 (少なくとも 1 つは必要です) について確認してください。
-
Docker イメージの Mayhemfile の
env
セクションにMFUZZ_DOCKER_ENTRYPOINT: “1”
を追加します。 - Mayhemfile の
cmd
がテストしたい実際のターゲット (ELF バイナリ) を指していることを確認します。
たとえば、redis Docker イメージをテストする場合、 MFUZZ_DOCKER_ENTRYPOINT: “1”
を指定し、Mayhemfile の cmd
に redis
が指定されていることを確認します。これにより、実際の redis
バイナリをテストする前にエントリポイント スクリプト内のコマンドが実行されます。
Warning
現時点では、インストルメントされていないターゲットだけがサポートされています。ターゲットがルート ユーザーでの実行を許可していない場合 (redis
の場合のように)、現時点ではエントリポイント スクリプトからの権限のドロップはサポートされていないため、Mayhemfile 内で uid
および gid
が適切に設定されていることを確認してください。方法については、次のサンプルで説明します。
Docker エントリポイントを有効化した redis
のテスト¶
Redis は、オープン ソースのインメモリ データ構造ストアであり、データベース、キャッシュ、メッセージ ブローカーとして使用できます。redis
Docker イメージのテストを開始するには、以下を実行する必要があります。
docker pull redis
Note
この操作は Docker Hub パブリック レジストリにある最新の redis Docker イメージをプルします。
ダウンロードが終了したら、次のコマンドを実行して redis
Docker イメージの詳細を表示します。
docker image inspect redis
Entrypoint
構成を探し、redis
Docker イメージに docker-entrypoint.sh
が設定されていることを確認します。コマンドの出力は次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
すばらしい! redis Docker イメージにエントリポイントが設定されていることが確認できたので、Mayhemfile を作成して次のパラメーターを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Note
上で説明したとおり、ルート権限を保存するために uid
および gid
パラメーターの設定が必要です。
最後に、上で説明した Mayhemfile と同じディレクトリで次のコマンドを実行して、redis
Docker イメージの Mayhem ランを実行します。
mayhem run .
Important
Mayhemランを実行する前に、mayhem login
を実行して Mayhem インスタンスで認証情報を検証する必要があります。
これで終わりです。redis
Docker イメージの Mayhem ランが開始され、実行されているはずです。よくできました!
まとめ¶
Mayhem でエントリポイントのサポートを有効化する方法を理解すると、より効果的に Docker イメージおよびコンテナー化されたアプリケーションをファジングできます。