Dockerイメージは、任意のバイナリとライブラリを1つのデータブロブにバンドルできます。画像の実際の内容を調べると、画像の適合性を評価し、セキュリティ上の危険を特定するのに役立ちます。
画像のコンテンツを探索する最も簡単な方法は、コンテナを起動し、シェルセッションを取得してから、ls
などの通常のターミナルコマンドを使用することです。 およびcd
ディレクトリ構造を内部から表示します。ただし、これはセキュリティが重要な環境では理想的ではありません。不明なイメージでコンテナを作成すると、悪意のあるエントリポイントスクリプトにさらされる可能性があります。
コンテナを起動せずに画像のファイルを検査するために使用できる手法は次のとおりです。
docker create
docker run
のあまり知られていない対応物です 。開始せずに、指定されたイメージの上に新しいコンテナを作成します。後でdocker start
を使用して起動できます コマンド。
新しいコンテナを作成することは、実行されるまで不活性のままであるため、危険ではありません。使用しないVMの構成設定を定義することに大まかに例えることができます。汚染されたオペレーティングシステムISOから起動するように設定されている場合でも、環境に損傷を与えることはありません。
docker create --name suspect-container suspect-image:latest
上記のコマンドは、suspect-container
という新しいコンテナを作成します これはsuspect-image:latest
に基づきます 画像。
これで、有効であるが停止したコンテナができました。docker export
を使用してファイルシステムをエクスポートできます。 指図。コンテナは開始されていないため、エクスポートが画像のレイヤーによって定義されたファイルシステムを正確に表していることを確認できます。
docker export suspect-container > suspect-container.tar
作業ディレクトリに、画像内のすべてを含むtarアーカイブが作成されます。お気に入りのソフトウェアを使用してこのアーカイブを開くか抽出して、画像のディレクトリを参照し、ファイルを一覧表示して表示します。
アーカイブを保存したり開いたりする必要がなく、代わりにターミナルでファイルリストを取得する場合は、tar
を変更します。 コマンド:
docker export suspect-container | tar t > suspect-container-files.txt
tar t
入力アーカイブの内容を一覧表示します。最終的に、suspect-container-files.txt
内の画像内のすべてのリストが表示されます。 。
この手法のバリエーションは、docker image save
を使用することです。 。このコマンドは、画像のデータをtarアーカイブに直接保存します。
docker image save suspect-image:latest > suspect-image.tar
この方法では、画像から作成されたコンテナではなく、画像に焦点を当てたアーカイブが作成されます。 tarにはmanifest.json
が含まれます ファイル、画像のレイヤー、およびすべての個々のレイヤーのコンテンツを含むディレクトリのセットを記述します。
これは、イメージの構築における各レイヤーの役割を評価するときに役立ちます。ただし、停止したコンテナを作成してエクスポートする方が、イメージの最終的なファイルシステムを参照するためのよりアクセスしやすい方法です。
画像のコンテンツを検査するもう1つの方法は、docker image history
を使用してそのレイヤーリストを表示することです。 コマンド。
docker image history suspect-image:latest
これにより、イメージのレイヤーを構成するDockerfile命令が公開されます。画像のファイルシステム内の個々のファイルやディレクトリを表示することはできませんが、疑わしい動作を強調するのにより効果的です。
コマンドの出力の各行は、画像の新しいレイヤーを表しています。 「CREATEDBY」列には、レイヤーを作成したDockerfile命令が表示されます。
レイヤーリストをスキャンすると、悪意のある画像を使用している可能性のある疑わしいアクションをすばやく特定できます。 RUN
で不明なバイナリを探します 命令、予期しない環境変数の変更、および疑わしいCMD
およびENTRYPOINT
ステートメント。
後者の2つのレイヤーは、画像の履歴を検査するときに評価するのに間違いなく最も重要です。 docker run
したときに何が起動するかを正確に教えてくれます またはdocker start
コンテナ。いずれかの命令が疑わしい、またはなじみがないように見える場合は、上記の手法を使用して、参照されているバイナリまたはスクリプトを完全に検査することを検討してください。
画像のファイルシステムにアクセスすると、そのコンテンツの非常に詳細なビューが提供され、手動で検査した後でも、悪意のあるコンテンツが簡単に見過ごされる可能性があります。 docker image history
によって公開されたレイヤーリスト 偽装されたファイルシステムアイテムを見つけるのに役立ちませんが、スパイウェアのダウンロードや環境変数のオーバーライドなど、露骨に悪意のある操作を明らかにするのに効果的です。
画像のコンテンツを一覧表示するのに役立つサードパーティのオープンソースツールも利用できます。これらは通常、フィルタリング機能を提供するため、インストールされているオペレーティングシステムパッケージ、プログラミング言語の依存関係、および通常のファイルをすばやく列挙できます。
画像検査は、アンカーコンテナスキャンエンジンに組み込まれています。 anchore-cli image content my-image:latest
を実行して使用できます Anchoreをインストールした後。これにより、ターゲットイメージのファイルシステムコンテンツの完全なリストが提供されます。
もう1つのオプションは、画像コンテンツを視覚化するために特別に構築されたツールであるDiveです。レイヤーベースのアプローチを使用し、新しいレイヤーごとに行われたファイルシステムの変更を強調表示します。ツリーベースのインタラクティブターミナルビューを使用してファイルシステムを参照します。
Dockerイメージは通常、消費の時点では不透明です。人気のあるレジストリは、APIやユーザーインターフェースにファイルリストを提供していません。この機能もDockerCLIに統合されていません。多くの開発者は画像をそのまま使用しますが、リスクの高い環境では未監査の画像は耐えられない場合があります。
疑わしい画像をアーカイブにエクスポートし、そのコンテンツを閲覧することで、疑わしい画像を検査できます。これにより、イメージが不活性に保たれ、悪意のあるコンテンツが実行されるのを防ぎ、コンテナ内に作成されるファイルシステムの完全なビューを提供します。
手動のコンテンツ探索と自動画像スキャンを組み合わせることで、セキュリティ体制をさらに強化できます。これらは既知の脆弱性を検出するプロセスを加速しますが、隠された場所に置かれた新しい悪意のあるファイルを見つけるのに効果的ではない可能性があります。複数の手法を使用すると、カバレッジを広げて、疑わしいファイルの可能な限り幅広いセットをキャッチできます。