fbpx

脅威:コンテナイメージを狙った攻撃手法の徹底解剖 #aqua #コンテナ #セキュリティ #クリプトマイニング #マルウェア

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本ブログは「Aqua Security」社の技術ブログで2020年8月25日に公開された「 Deep Analysis of TeamTNT Techniques Using Container Images to Attack 」の日本語翻訳です。

コンテナイメージを狙った攻撃手法の徹底解剖


隠蔽されたマルウェアに関するニュースでは、その修正方法に焦点が当てられていることがほとんどです。実際、私たちもそのようにしていました。今まさに、 TeamTNT と呼ばれるグループによる攻撃が相次いでいるというニュースがあります。彼らは Docker Hub から AWS の資格情報を盗むために、クリプトマイニングとワームを組み合わせて使用しています。クラウドリソースの乗っ取りが流行っているのであれば、これからは攻撃が起こる前に脅威を見つけることが重要になります。私たちの調査では、動的分析を行うことでセキュリティチームの多くの時間と疲弊を軽減できると判断しました。これらのイメージが検出され、利用される前にあらかじめ Docker Hub から削除されていれば、セキュリティチームのプライベートレジストリの管理にも役立ちます。

私たち Team Nautilus は、TeamTNT が悪意のあるイメージを保存するために使用していた Docker Hub アカウント hildeteamtnt を検出し、分析しました。コンテナイメージを安全なサンドボックス環境で実行し、合計8つの悪意のあるコンテナイメージを発見しました。そのうち少なくとも2つのイメージが既に攻撃に使用されていました。

アカウント「hildeteamtnt」により作成されたイメージ

これらのコンテナイメージはよく設計されており、ターゲットとなるホストを完全に悪用するために細心の注意を払って構築されていました。攻撃者は、様々なマルウェア実行ファイル(TsunamiとMirai)、バックドア、コンテナからホストへ侵入するためのツール、潜在的に不要なアプリケーション(Potentially Unwanted Application=PUA)をこれらのコンテナイメージに隠蔽しています。それぞれのイメージについて、彼らはスクリプトを使って攻撃を実行しており、シンプルで単純なものもあれば、複雑で洗練されたものもありました。

  1. シンプルで単純な攻撃: 「metal3d」、「first」、「dockerfirst」 は、単純なクリプトジャッキング(クリプトマイニング)を実行するように設計されたイメージです。
  2. 洗練された攻撃: 「Minerescape」、「Debian-service」には「docker-escape」という名前のバイナリが含まれています。このバイナリは、GitHub 上にあるツールをベースにしています。Docker コンテナ内で動作しているかどうかを識別するように設計されており、その後コンテナからホストへの侵入を試みます。

例えば、このバイナリには以下の文字列が含まれています。

  • .\docker_escape network - Docker TCP ソケット(いずれかのインターフェースで見つかった場合)またはポートスキャン(ホストと共有されているネットワークネームスペースの場合)を経由してホストへの侵入を試みます。
  • .\docker_escape auto - 自動的にホストへの侵入を試みます。成功した場合、ホストOSにマウントされた特権コンテナを起動します。
  • .\docker_escape Unix - /var/run/docker.sockにあるマウントされた Docker UNIX ソケットを使ってホストへの侵入を試みます。

また、コンテナイメージ「minerescape」には Python ファイル「minedaemon.py」を実行するシェルスクリプトが含まれていました。そこから実行される「nightminer.py」というファイルは、クリプトマイニングの実行を可能にします。

3. 2020年3月28日に「xmrigminer」がアップロードされて以来、攻撃者はスクリプトを修正し、検出を回避したりコマンドや制御サーバとの通信チャネルを隠蔽したり、時間の経過とともに永続性を獲得したりするテクニックをどんどん追加しようとしてきました。2つ目のコンテナイメージ「avscan」はこれをより洗練したもの(後述)で、最新のコンテナイメージ「docrunker」はさらに洗練されています。

「AVscan」を分析

攻撃者は、コンテナ内の /mnt にホストのルートディレクトリをマウントし、/mnt に chroot 化することでホストを乗っ取ることを目的とした既知のテクニックを使用していました。

AVscan.sh

コンテナイメージのエントリーポイントは AVscan.sh スクリプトです。

そのコマンドに続いて、コンテナイメージはスクリプト「Carray.sh」、「cron.sh」を実行し、2つの悪意のあるバイナリ「SystemHealt」と「AVscan」を実行するように設計されています。コマンド「vm.nr_hugepages」は、クリプトマイニングプロセスの有効性を高めるために設計されたシステムプロパティです。

スクリプト「Carray.sh」と「cron.sh」は、すでにコンテナイメージレイヤー内に格納されています。

Carray.sh

シェルスクリプト「Carray.sh」は、ホスト上で実行されている他のマイニングプロセスをすべて終了させるように設計されています。このスクリプトは実行後に自分自身も削除します。

Cron.sh

シェルスクリプト「Cron.sh」は、「minion.sh」を以下のURLからダウンロードするための cron ジョブを設定します。
http//yd6ugsklvmydbvmntk54k4dmgkuwzar3u3zzv5vcxwdywjwbwzjmdryd[.]tor2web[.]su/.../minion.sh

Minion.sh

このスクリプトの一部のスニペットは、Base64 でエンコードされています。攻撃者はこのコードをデコードして、pu、ntpd.pid、.logs.c などの名前を使って新しいファイルを作成します。また、ディスクに書き込んだファイルの一部を非表示にします。以下、このスクリプトが実行する3つの例を紹介します。

  • あるファイル(/usr/bin/hid)は、指定された PID を /proc/ ディレクトリから /usr/foo にマウントしようとしています。この処理は /etc/mtab に痕跡を残さずに密かに行われます。
  • もう一つのファイル(/usr/bin/pu)は、SSH ポートを悪用してネットワーク内を移動するように設計された Python スクリプトです。
  • 最後に、もう一つのファイル(/tmp/.logs.c)は、システム上のすべてのログインとログアウトの記録(WTMP、UTMP、および Linux 用の Lastlog )をクリーンアップするために使用されます。これは、攻撃者が痕跡を消去することで、現状の OPSEC の質を維持させる意図があることを示しています。

このスクリプトは、「xmrigMiner」や「Watchdog」など、CPU上のリソースを使用するプログラムも無効化します。スクリプトの実行が完了すると、スクリプト自身と履歴が削除されます。

このスクリプトは、他の3つのスクリプト(user.sh、sbs.sh、sxc.sh)をダウンロードして実行します。

user.sh

感染したホストとの SSH 通信を担当します。

  • sshd の有無を確認し、存在しなければ Openssh-server をインストールします。
  • 3人のユーザ(hilde、reboot、ubuntu)を作成しようとします。
  • ユーザにroot権限を付与しようとします。
  • 上記のユーザ(hilde、reboot、ubuntu)に攻撃者の RSA-key を追加します。
    /home/$usersname/.ssh/authorized_keys
    /home/$usersname/.ssh/authorized_keys2

  • パスワードなしで ssh で root ログインできるように /etc/ssh/sshd_config に設定します。その後 sshd を再起動します。
  • ウェブサービス(iplogger[.]org)を使用して、プロセス中に収集したデータを攻撃者に送信します。例えば、CPU のコア数、速度、システムの詳細(uname -a を使用)、標的となるホストの IP アドレスなどです。
  • アクティビティをログに記録し、ファイルにエンコードします。Base64を使用します。

sbs.sh

  • 実体は usr/bin/bioset である 00.jpg ファイルを /usr/bin/dns_ipv4.tar.gz としてダウンロードします。
  • Bioset を実行します。
    • プロセスの名前を systemd に変更します。
    • ポート 1982 での接続を Listen しています。新しい接続のたびに新しいスレッドが開きます。
    • ソケットを Listen し、「Named PIPE(FIFOともいう)」と呼ばれるメソッドを使用して親プロセスと通信する子プロセスを作成します。
    • 親プロセスはメッセージを解読し、それを PIPE で子プロセスに書き返す役割を担っています。
    • 子プロセスは /bin/sh で実行されているコマンドを受けとります。
    • このことから Bioset はバインドシェルとして機能しており、おそらく攻撃者がコンテナをデプロイした後でホストへ接続できるようになっていると結論づけられます。
  • サービスディスカバリとコマンドの制御をします。
    • ウェブサービス(iplogger[.]org)を使用して、プロセス中に収集したデータを攻撃者に送信します。例えば、CPU のコア数、速度、システムの詳細(uname -a を使用)、標的となるホストの IP アドレスなどです。
    • アクティビティをログに記録し、ファイルにエンコードします。Base64を使用します。
  • 防衛策を回避します。
    • コマンド履歴を削除します。
    • 使用されたシェルスクリプトを削除します。

sxc.sh

  • リモートから「xmrig」をダウンロードします。
  • 設定ファイル(/usr/bin/ntpd.pid)をディスクに書き込みます。
  • クリプトマイナー(ntpd ファイル)が実行されていることを確認します。
  • 共存するプロセスを停止します。
    • すべての「Moneroocean」プロセスを停止します。
  • マイニングプロセスを最適化します。
    • system-getty.slices.service など、マイニングリソースを制限する監視サービスを停止します。
    • cp.syshealt などのシステムのヘルスチェックを実行するサービスを停止します。
  • サービスディスカバリとコマンドの制御をします。
    • ウェブサービス(iplogger[.]org)を使用して、プロセス中に収集したデータを攻撃者に送信します。例えば、CPU のコア数、速度、システムの詳細(uname -a を使用)、標的となるホストの IP アドレスなどです。
    • アクティビティをログに記録し、ファイルにエンコードします。Base64を使用します。
  • 防衛策を回避します。
    • システムログ(/var/log/syslog)を削除します。
    • コマンド履歴を削除します。
    • 使用されたシェルスクリプトを削除します。
    • netfilter ファイアウォール、iptables、kernel.nmi_watchdog((カーネルがハングしているかどうかをチェックします)などのネットワーク設定、セキュリティ、監視ツールを無効化します。
    • Aliyun などのセキュリティスキャナを無効化します。

The malicious binaries:

SystemHealt - cb782b40757d1aba7a3ab7db57b50847 (MD5)

AVscan - b27eb2159c808f844d60900e2c81a4df (MD5)

犯人の手口

この洗練された攻撃は、コードに様々な変更が含まれており、TeamTNT は攻撃を改善するために時間と労力を費やしたことを示唆しています。彼らは防衛策を回避する技術を追加し、C2 サーバとの通信を隠蔽して、攻撃を長引かせながら成功を確実にしようとしました。

防衛策の回避テクニックの例

  • 動的コードを使用します。通信チャネル(IP/ドメイン)は変数として定義され、外部設定ファイルを使用して C2 サーバとマイニングインフラを隠蔽します。
  • ウェブサービスと TOR サーバを活用して、C2 サーバのインフラ永続性を向上させます。
  • OPSEC を狙うことを重視します。最近の攻撃では多くの段階で悪意のあるツールやログを削除したりホスト上のユーザ活動を消去したりすることで攻撃者が痕跡を隠蔽しようとしていることが明らかになりました。
  • プライベートドメインの teamtnt[.]red を使用して、サブドメインの vps と pool を使用しています。
  • セキュリティツールやネットワークセキュリティツールを無効化します。
  • 多くのスニペットを base64 でエンコードします。(同じスニペットが複数回エンコードされる場合もあります)

まとめ

4ヶ月以上、TeamTNT は様々なコンテナイメージをアップロードし、中には既に攻撃に使われているものもありました。クラウドネイティブ環境全般、特に Docker API ポートの設定ミスを狙った現在も積極的に活動が行われています。これらの新しいアカウントによって作成されたコンテナイメージは、防衛策回避、ネットワーク内移動、新しい技術などによる高度かつ悪質な手法を使うように設計されていました。

これらの新しいイメージは、TeamTNT の学習曲線(開発能力)を少なからず反映していると考えられます。もっとシンプルで単純なコンテナイメージなら静的マルウェア解析で検出できる可能性がありますが、このようなコンテナイメージには通用しません。しかし、コンテナイメージ「xmrigminer」は、実行時の動作プロファイリングとモニタリングを使用すれば悪意あるものとして識別できますし、Aqua DTA(動的脅威分析)を使用してパイプライン内でも識別できます。

Dynamic Container Analysis

TeamTNT 攻撃の MITRE ATT&CK フレームワークへの適用

攻撃の各構成要素を、以下 MITRE ATT&CK フレームワークに当てはめたものを記します。

Indications of Compromise (IOCs):

Mining pools:

vps[.]teamtnt[.]red33331
45[.]9[.]148[.]12333331
xmr[.]f2pool[.]com13531
47[.]101[.]30[.]12413531
xmr[.]bohemianpool[.]com9000
80[.]211[.]206[.]1059000

Malicious Binaries

xmrigDeamon - d6e169d47a4bed78dffc184409994fbf (MD5)
Bioset - 4206dbcf1c2bc80ea95ad64043aa024a (MD5)
dns3 - b348abf1d17f7ba0001905e295b1f670 (MD5)
xmrigMiner - 7c7b77bfb9b2e05a7a472e6e48745aeb (MD5)
docker-update - ecf5c4e29490e33225182ef45e255d51 (MD5)
dns (Tsunami malware) - b7ad755d71718f2adf3a6358eacd32a3 (MD5)
64[watchdogd] - 8ffdba0c9708f153237aabb7d386d083 (MD5)
64bioset - b8568c474fc342621f748a5e03f71667 (MD5)
64tshd - 5f5599171bfb778a7c7483ffdec18408 (MD5)
armbioset - 23812035114dbd56599694ed9b1712d2 (MD5)
armdns - cfa007dc2d02da9a8873c761aa5a5c8c (MD5)
armtshd - d46b96e9374ea6988836ddd1b7f964ee (MD5)
tntscan - 4882879ffdac39219bef1146433ec54f (MD5)
SystemHealt - cb782b40757d1aba7a3ab7db57b50847 (MD5)
AVscan - b27eb2159c808f844d60900e2c81a4df (MD5)

New call-to-action
新規CTA