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 イメージおよびコンテナー化されたアプリケーションをファジングできます。
