もっと詳しく

トレンドマイクロは脅威動向調査の一環として、攻撃者が積極的に悪用する脆弱性や設定の不備を注意深く監視しています。頻繁に悪用される設定の不備の1つに、インターネット上に露出したDocker REST APIがあります。

2021年10月トレンドマイクロは、Docker REST APIを露出させた不適切な設定状態にあるサーバを標的として、以下のような悪意のあるスクリプトを実行するイメージからコンテナを起動(スピンアップ)させる攻撃活動を観測しました。

  1. 暗号資産「Monero」を採掘するツール(コインマイナー)をダウンロードまたは同梱する
  2. よく知られた手法を用いてコンテナ経由でホストを侵害する「コンテナエスケープ」攻撃を実行する
  3. 侵害されたコンテナから露出したポートに対するインターネット全体のスキャンを実行する
図1:脆弱なDockerサーバを狙った攻撃フロー
図1:脆弱なDockerサーバを狙った攻撃フロー

トレンドマイクロは、侵害された、またはサイバー犯罪者グループ「TeamTNT」に属するDocker Hubレジストリのアカウントを特定しました。これらのアカウントは、悪意のあるイメージをホストするために使用されていたほか、Docker REST APIを悪用するボットネットやマルウェアキャンペーンの一部として活動を活発化させていました。トレンドマイクロはこれについてDocker社に連絡し、問題のアカウントは削除されました。

本ブログ記事では、Docker REST APIを悪用してコインマイナーを拡散するために用いられた2つのアカウントについて解説します。

Dockerイメージ内で見つかった悪意のあるスクリプト
図2:Dockerイメージのコンテンツの例
図3:Dockerイメージのコンテンツの例
図2~3:Dockerイメージのコンテンツの例

これらのDockerイメージには、新たなコンテナが生成されたときに実行される「pause」という名前の悪意のあるスクリプトが含まれています(図2~3)。

図4:ソースコードのコンテンツ
図5:ソースコードのコンテンツ
図6:ソースコードのコンテンツ
図4~6:ソースコードのコンテンツ

INIT_MAIN関数は、後続の手順で使用される悪意のあるツールを更新・追加するために、SETUP_APPS関数を呼び出します。

INIT_MAINは、無限ループを作成し、hxxp://teamtnt[.]red/RangeDA.phpにGETリクエストを送信します。またINIT_MAINは、数値応答を受け取ります。この数値応答は、後に「pwn」関数で指定された引数として使用されます。curlの試みが失敗した場合、1から255までのランダムな数字が生成され、$RANGE変数に割り当てられます(図5)。

図7:pwn関数のコード
図7:pwn関数のコード

「pwn」はmasscanのラッパーで、ポート番号2375、2376、2377、4243、4244をスキャンします。これは、2020年7月16日に解説した分散型サービス拒否(DDoS)攻撃を実行するために構築されたボットネットのアーティファクトの動作と類似しています。ただし、今回の事例では別の関数(CHECK_INTER_SERVER)が呼び出され、IPアドレスとポートの値が供給されます。

CHECK_INTER_SERVERはまず、インターネット上に露出したDocker REST APIサーバの「info」を要求することで、リモートIPアドレスのオペレーティングシステム(OS)に「linux」が含まれているかどうかを確認します。このコマンドを使用することで、一時停止中 / 実行中 / 停止中のコンテナ数やサポートされているランタイム、サーバのバージョン、アーキテクチャなどのサーバに関する様々なメタデータを調べることができます。

図8:CHECK_INTER_SERVER関数
図8:CHECK_INTER_SERVER関数

トレンドマイクロは、このコードがフラグを設定するために以下のプロパティを調べて、現在スキャンしているサーバがDocker swarm managerであるかどうかを識別していることを観測しました。

  1. OSType:サーバのOSを示す
  2. Repository:使用するために設定されているコンテナレジストリ
  3. Architecture:サーバアーキテクチャ
  4. Swarm:現在のスワーム参加状況
  5. CPU:サーバのCPUコア数

攻撃者は、不適切な設定状態にあるサーバの稼働時間や使用可能なメモリ容量などの詳細情報を得るために、docker-cliを使用して以下のようにコンテナを起動します。

  1. 「–privileged」フラグを設定する
  2. 基礎となるホスト「–net=host」のネットワーク名前空間を使用する
  3. 基礎となるホストのルートファイルシステムをコンテナパス「/host」にマウント(認識させて利用可能な状態に)する
図9:コンテナを起動するためのコード
図9:コンテナを起動するためのコード

この直後、このスクリプトは「–privileged」フラグを使ってホストのルートファイルシステムをマウントし、イメージ「alpineos/dockerapi,」からホストのネットワーク名前空間を共有することで、新たなコンテナを生成します。イメージ「alpineos/dockerapi,」は2021年11月9日時点でDocker Hubから10,000回以上取得(プル)されています。

図10:新たなコンテナを生成している様子
図10:新たなコンテナを生成している様子

その後、同一サーバ上に新たなコンテナを生成する別の試みが観測されましたが、その動機は異なります。

図11:base64でエンコードされた文字列を用いてコンテナを生成している様子
図11:base64でエンコードされた文字列を用いてコンテナを生成している様子

このコンテナは、Docker公式イメージのOSである「alpine」から作成され、base64でエンコードされた文字列がデコードされた後に「bash」に受け渡される事実を除き、基盤となるホスト上でrootレベルの権限を許可するフラグを使って実行されます。

以下に、デコード後にエンコードされた文字列を示します。

図12:デコードされた文字列
図12:デコードされた文字列

新たなSecure Shell(SSH)鍵ペアが作成されるほか、不変ビットを使ってフォルダの属性が変更されます。TeamTNTの公開鍵が/root/.ssh/authorized_keysに追加されるため、生成された公開鍵と秘密鍵のペアを使用して攻撃者がログインできるようになります。ログイン後、公開鍵は削除されます。

図13:TeamTNTに関連する暗号鍵
図13:TeamTNTに関連する暗号鍵

暗号資産「Monero」を採掘するためのマイニングスクリプトは、TeamTNTの管理下にあるサーバからダウンロードされた後、「/tmp/TeamTNT」から秘密鍵が供給されることで、「root」ユーザとして基礎となるホスト上でSSHセッションを用いて「bash」に受け渡されます。その後、秘密鍵の「/tmp/TeamTNT」も削除されます。

ここでは、イメージ{改訂されたアカウント}(左)および「alpineos / docker2api」(右)の変更履歴を簡単に見てみましょう。図14では、これらのイメージからコンテナが作成されたときに実行されるコマンドを確認できます。また、「pause」というスクリプトにも注意が必要です。

図14:Dockerイメージのコード
図14:Dockerイメージのコード

双方のイメージに記載された「pause」スクリプトを比較してみると、いくつかの相違点を除いて、非常に類似したコードであることを確認しています。

図15:双方のイメージに記載されている「pause」スクリプトの比較図_1
図15:双方のイメージに記載されている「pause」スクリプトの比較図_2
図15:双方のイメージに記載されている「pause」スクリプトの比較図

具体的な相違点として、masscanの使用方法に違いがあります。また、いくつかのコメント付きセクションが見つかっており、これらは攻撃者が自身のツールや武器をテストしながら高度化させ続けていることを示しています。

注目すべき点は、IPアドレス45[.]9[.]148[.]182が複数のドメインで使用されていることから、TeamTNTのインフラストラクチャに関連した履歴を残していることです。

  • dl.chimaera[.]cc
  • githb[.]net (inactive)
  • github-support[.]com (inactive)
  • irc.borg[.]wtf
  • irc.chimaera[.]cc
  • irc.teamtnt[.]red

トレンドマイクロが2021年7月に実施したTeamTNTに関する追跡調査では、同グループが以前に構成ファイルから認証情報を窃取するマルウェアを使用していたことが明らかとなりました。これは、今回の攻撃活動で侵害されたウェブサイトから情報を窃取するためにTeamTNTが用いた手口と同じ可能性があります。

実行されたスクリプトと、コインマイナーを拡散するために用いられたツールに基づき、今回の攻撃活動をTeamTNTに関連付けた結論を以下に示します。

  1. すべてのイメージを合わせて150,000以上プルされた「alpineos」は、TeamTNTが積極的に使用している主要なDocker Hubアカウントの1つであること
  2. コインマイナーを拡散するためにTeamTNTの管理下にある侵害されたDocker Hubアカウントが存在すること

トレンドマイクロは既にDocker社に連絡を取り、今回の攻撃に関与したアカウントは削除されました。TeamTNTに関する次回のブログ記事では、同グループが使用している攻撃手法についてご紹介することを予定しています。

まとめ

インターネット上に露出したDocker APIはセキュリティ上の配慮がなされていない場合、標的ホスト上でroot権限を用いて独自の不正コードを実行できるようになるため、攻撃者に高頻度で狙われています。最近確認された今回の攻撃活動は、特に、悪意のある目的を達成するために侵害されたユーザ認証情報を悪用するTeamTNTのような有能な攻撃者グループによって、露出したサーバを攻撃する手口が高度化していることを浮き彫りにしただけでした。

侵入の痕跡(Indicators of CompromiseIoC

今回の記事に関する侵入の痕跡は、こちらを参照してください。

参考記事:

記事構成:岡本 勝之(セキュリティエバンジェリスト)

平子 正人(セキュリティマーケティンググループ)

翻訳:益見 和宏(Core Technology Marketing, Trend Micro™ Research

The post サイバー犯罪者集団「TeamTNT」がDocker hubアカウントを悪用してコインマイナーを拡散する手口を解説 first appeared on トレンドマイクロ セキュリティブログ.