脅威:攻撃者が悪意あるイメージをホスト上に直接ビルド #aqua #コンテナ #セキュリティ #マイニング #動的分析 #docker
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本ブログは「Aqua Security」社の技術ブログで2020年7月15日に公開された「 Threat Alert: Attacker Building Malicious Images Directly on Your Host 」の日本語翻訳です。
脅威:攻撃者が悪意あるイメージをホスト上に直接ビルド
Aqua のサイバーセキュリティ研究チームである Team Nautilus は、コンテナ環境に対する新しいタイプの攻撃を発見しました。攻撃者はホスト上に悪意のあるコンテナイメージをビルドして実行するために、間違って設定された Docker API ポートを悪用します。攻撃者がパブリックレジストリからイメージを pull してくるのではなく、ホスト上でイメージをビルドする攻撃が確認されたのは、私たちの知る限りではこれが初めてです。
今までに確認された攻撃シナリオでは、攻撃者は通常クリプトマイナーを実行してホストのリソースを乗っ取ろうとしたり、他のホストに対して DoS 攻撃を実行したり、最悪の場合、コンテナからホストネットワーク上に侵入したりします。これに対して守る側は、イメージをスキャンしてその結果に基づいて対応したり、不審なソースやレジストリとの通信を制限できたりします。しかし先述したこのケースの場合、攻撃者はこれらの防御策を回避するために、リモートソースからイメージを取得するのではなく、ターゲットとなるホスト上に直接イメージをビルドしています。さらに攻撃者はホスト上に直接イメージをビルドすることで、インフラストラクチャの永続性を高めることができます。イメージはどこのレジストリにも保存されないため、誰にも確認・対応されることはありません。さらにイメージの名前と ID はランダムに生成され、各ホストに固有のものになります。このため、環境を守る側がそのイメージを制限リストに追加することは困難です。したがって、この場合は悪意のあるイメージやソースについて事前に情報を得ていても意味がありません。しかし、行動パターンを解析する Aqua の DTA スキャナを使用することで、環境を守る側はこの種の攻撃を検出するのに役立ちます。この技術は、クラウドネイティブ環境における継続的な動的スキャンの重要性を強調しています。
攻撃手法の詳細
通常間違って設定された Docker API に対する攻撃は、パブリックレジストリ(つまり Docker Hub )からイメージを pull してきて、ターゲットとなるホスト環境上でコンテナを起動させることで開始されます。そのイメージは、通常以下のカテゴリの内のいずれかに該当します。
- サードパーティによってビルドされた専用イメージ- このイメージは特定の目的のために設計されています。例えば xmrig/xmrig:latest や douglasslow/slowhttptest:latest はクリプトマイニングを実行したり、アプリケーション層で DoS テストを実施するために設計されています。攻撃者はこれらのイメージを悪意を持って使用し、ホスト上のリソースを乗っ取ったり、ターゲットのホストに対して DoS 攻撃を実行します。
- 攻撃者が作成した専用イメージ- 通常攻撃者は、悪意のある要素を様々な手法で隠してイメージの本当の目的を隠ぺいします。または隠ぺいせずに攻撃をデザインしたりします。
- バニライメージ- 攻撃者は Alpine や Ubuntu などの正規のバニライメージを使用し、実行時に悪意のあるコード(スクリプト)をダウンロードします。
しかしこのケースでは、攻撃者は Docker SDK for Python パッケージを使用して、間違って設定された Docker API にコマンドを送信していました。攻撃の一連の流れは以下の通りです。
- API サーバが実際に公開されているかどうかを確認するために、Docker サーバに GET リクエストを送信して疎通を確認します。
- 疎通が確認出来たら、ホスト上で稼働しているコンテナのリストを受け取るための GET リクエストを送信します。
- Docker Build コマンドを実行するための POST リクエストを送信して、対象のホスト上にイメージ(zbrtgwlxz:latest)をビルドします。Dockerfile には以下のコマンドが含まれています。
- 軽量な Alpine イメージをベースイメージにする。
- wget コマンドによりリモートソースからスクリプト main.sh をダウンロードする(http://185.10.68.147/dock/main.sh)。
- GET リクエストを送信して、イメージがターゲットホスト上に正常にビルドされたことを確認します。
- 攻撃者が先ほどビルドした新しいイメージからコンテナを作成するための POST リクエストを送信します。
- GET リクエストを送信して、ホスト上で実行中のコンテナのリストを受信します。
- コンテナを実行するための POST リクエストを送信します。
コンテナは、ビルド中にリモートソースからダウンロードされたシェルスクリプトを実行するコマンドを ENTRYPOINT から起動します。
/bin/sh -c ash /main.sh
シェルスクリプト main.sh は、XMRIG という名前の ELF ファイルをダウンロードして実行するように設計されていました。
このファイルは Virus Total によって悪意のあるファイルに分類されており、クリプトマイニングを実行することでホストからリソースを乗っ取るように設計されています。
まとめ
今回のブログでは間違って設定された Docker API を攻撃する新しい手法を報告しました。そのイメージはターゲットのホスト上に直接ビルドされ、クリプトマイナーを使ってリソースの枯渇を狙ったものでした。これはクラウドネイティブ環境に対する攻撃が、ここ数年の間で超高速に進化したことを示すものです。これらの新しく大胆な攻撃は、守る環境に対して、より優れた強力なソリューションを導入する重要性を強調しています。
今回のケースでは、イメージがリモートソースから取得されないため、事前に準備しておいたコンテナイメージの脅威情報は役に立ちません。イメージは標準的な Alpine のベースイメージに基づいてビルドされており、ほとんどの場合良性のものとして許可されるため、静的イメージスキャンでは期待する結果は得られません。ネットワークレベルの IPS/IDS セキュリティならば、攻撃者の C&C サーバとの通信を実際にブロックし(185.10.68.147)、スクリプト main.sh と悪意のあるバイナリのダウンロードを防ぐ可能性はあります。しかし、GitHub などの公的なレポジトリからの取得であれば IPS/IDS も役立たない可能性があります。
この種の脅威に対する最良のソリューションは、継続的な動的脅威分析のスキャンにあると私たちは信じています。Docker Hub と組織のサーバ上のすべてのイメージを動的にスキャンすることで、クラウドに潜む隠れた脅威を明るみに出すことができます。