Pro-Ocean: Rocke攻撃グループの新しいクリプトジャックマルウェア

By

Category: Cloud, Malware, Unit 42

Tags: , , ,

This post is also available in: English (英語)

概要

2019年、Unit 42のリサーチャーは、Rocke攻撃グループがMoneroのマイニング(採掘)を行うクリプトジャック攻撃に使用する、クラウドを標的としたマルウェアについて文書化しました。それ以来、サイバーセキュリティ企業各社は当該マルウェアをレーダーにとらえており、Rocke攻撃グループのクリプトジャック オペレーションの妨げとなっていました。これを受けて同グループはマルウェアを更新しています。

本稿では、やはりクラウドを標的としたクリプトジャッキング マルウェアの更新版について詳説していきます。この更新ではルートキットが新しく改良されたものになり、ワーム機能が追加されていました。このほか、同マルウェアがサイバーセキュリティ企業の検知手法回避に使用している隠蔽技術についても詳しく説明し、その4つのモジュール構造について説明していきます。攻撃者がインストール スクリプトに選んだ名前にちなんで、私たちはこのマルウェアにPro-Oceanという名前を付けました。

Pro-Oceanは既知の脆弱性を使用してクラウド アプリケーションを標的にします。私たちの分析では、Apache ActiveMQ(CVE-2016-3088)、Oracle WebLogic(CVE-2017-10271)、Redis(セキュア化されていないインスタンス)を標的とするPro-Oceanが見つかっています。このマルウェアは、Tencent CloudまたはAlibaba Cloudで実行されている場合、以前のマルウェアとまったく同一のコードを使用して検出回避のために監視エージェントをアンインストールします。さらにインストール前に、Luoxk、BillGates、XMRig、Hashfishなどのほかのマルウェアやマイナーを削除しようとします。インストール後、同マルウェアはCPU使用率の高いプロセスをすべて強制終了し、CPUを100%使用してMoneroを効率的にマイニングすることができます。

パロアルトネットワークスのPrisma Cloudをご利用中のお客様は、ランタイム保護機能、クリプトマイナー検出機能を通じてPro-Oceanから保護されています。

マルウェア

Pro-Oceanは自身が無害なものであるように見せかけようとしますが、クリプトジャック オペレーションに使われることで悪名高いXMRigマイナーをパックしています。このマイナーは悪意のあるコードに複数の難読化レイヤを設けることで自身を隠蔽しようとしています。

  1. 本バイナリはUPXでパックされています。つまり、実際のマルウェアはバイナリ内で圧縮されており、バイナリの実行中に抽出・実行されることになります。
  2. 高度な静的分析ツールであればUPXバイナリをアンパックしてコンテンツをスキャンすることができますが、このケースではUPXのマジックナンバーがバイナリから削除されているため静的分析ツールでこのバイナリをUPXであるものと識別して解凍することはできません。
  3. モジュールは、解凍されたバイナリ内でgzip圧縮されています。
  4. XMRigバイナリはgzip圧縮されたモジュールの1つに含まれていますがこれもUPXでパックされておりUPXのマジックナンバーがありません。
図1 難読化レイヤー
図1 難読化レイヤ

Pro-Oceanは、Apache ActiveMQ、Oracle Weblogic、Redisなどいくつかの典型的クラウド アプリケーションを対象としていますが、とくにAlibaba CloudやTencent Cloudなどの中国に拠点を置くクラウド プロバイダに重点を置いています。これはGoで記述されていて、x64アーキテクチャ バイナリにコンパイルされます。また、実行中に展開される4つのモジュール(隠蔽、マイニング、感染、ウォッチドッグ)が含まれています。各モジュールには、さまざまな言語(C、Python、Bash)で記述されたいくつかのファイルと、それを実行するBashスクリプトが含まれています。

モジュール

Pro-Oceanの4つのモジュールはバイナリ内でgzipで圧縮されており、4つの異なる関数によって次々に抽出・実行されます。

図2 4つの主な機能
図2 4つの主な機能
図3 マルウェア アーキテクチャ
図3 マルウェア アーキテクチャ

隠蔽モジュール(ルートキット機能)

隠蔽モジュールは、Pro-Oceanの悪意のあるアクティビティを隠蔽する役割を果たしています。このモジュールはLinuxのネイティブ機能、LD_PRELOADを使用します。LD_PRELOADは、他のライブラリよりも先に特定のライブラリをロードするようバイナリに強制することで、プリロードされたライブラリが任意のライブラリの任意の関数をオーバーライドできるようにします。このLD_PRELOADを使用する方法の1つが、細工したライブラリを/etc/ld.so.preloadに追加することです。

こうすることで、実行後にこれらのバイナリが、指定された特定のライブラリをロードし、デフォルト ライブラリ内の関数の代わりに使えるようになります。この機能は他のマルウェアでもよく悪用されています。

実行中、隠蔽モジュールはC言語で書かれたファイルをライブラリにコンパイルし、それを/etc/ld.so.preloadに追加します。このライブラリには、open、opendir、readdir、stat、accessなどを含め、通常はlibcが公開している多くの関数が含まれています。これらの関数が、実際のlibc関数を使用しつつ、Pro-Oceanの存在が明るみに出るような情報(たとえば悪意のあるファイルやプロセスなど)は隠蔽するよう、返されたデータを改ざんしています。場合によっては、たとえば/proc/statなどの特定のファイルにアクセスした場合は、偽造データが返されることもあります。

以前のバージョンのマルウェア同様、このコードはLibprocesshiderというプロセスを非表示にするライブラリを使っています。ただしこのコードの開発者は、インターネットからいくつかのコードスニペットを収集・追加して、より多くのルートキット機能をもたせたようです。

たとえば、libcのopen関数を見てみましょう。この関数はファイルを開いてそのファイル ディスクリプタを返しますが、悪意のあるライブラリがロードされると別のことが起こります。

図4 改ざんされたopen関数
図4 改ざんされたopen関数

open呼び出し前に、改ざんされた関数は、悪意のあるアクティビティが露見しにくいよう、対象のファイルを隠蔽すべきかどうかを判断します。隠蔽すべきと判断した場合、改ざんされた関数は、対象ファイルが存在しないかのように、「No such file or directory (そのようなファイルまたはディレクトリは存在しません)」というエラーを返します。

さらにPro-Oceanはこのモジュール内で、永続性を獲得すべく自身を多数の場所にコピーし、マルウェアが実行されていなければ実行するよう、新しい悪意のあるサービスを作成し、それと同じことを定期的に行うcronジョブも複数追加しようとします。

マイニング モジュール

マイニング モジュールが、そもそもPro-Oceanが存在する理由です。その目標は、攻撃者のウォレットにMoneroをマイニングすることであり、XMRig miner 5.11.1とJSONの構成をデプロイ後にマイニングを開始します。これはクリプトジャッキング マルウェアでは一般的にみられるオペレーションです。

感染モジュール(ワーム機能)

Rocke攻撃グループの行動は以前のバージョンのマルウェアで選択していたものとは異なります。Pro-Oceanでは、手動で被害端末をエクスプロイトすることはありません。かわりに「ワーム」機能を提供するPythonの感染スクリプトを使用しています。このスクリプトは、アドレス「ident.me」でオンラインサービスにアクセスすることにより、被害端末のパブリックIPを取得して、同一 /16サブネット(10.0.XXなど)内のすべての端末に感染を試みます。ここではパッチが適用されていない悪用可能なソフトウェアを見つけることを目指し、公開済みエクスプロイトを手当り次第実行しているようです。

図5 感染スキャン ループ
図5 感染スキャン ループ

パッチの適用されていないソフトウェアが見つかり、それをエクスプロイトすると、Pythonスクリプトがペイロードを送信し、悪意のあるHTTPサーバーからインストール スクリプトをダウンロードします。そうして多少の準備をしておいて、Pro-Oceanがインストールされます。

Pro-Oceanが悪用する脆弱なソフトウェアのリストは次のとおりです。

  1. Apache ActiveMQ – CVE-2016-3088
  2. Oracle WebLogic – CVE-2017-10271
  3. Redis - セキュア化されていないインスタンス

なお、このマルウェアは感染中にリモート サーバーから被害端末にダウンロードされるので、ここにあげたものは網羅的なリストではありません(つまりPro-Oceanはすべてのクラウド アプリケーションを対象としています)。これらは変更されることがありますし、追加のエクスプロイトをはじめとする更新が加えられる可能性があります。

図6 感染プロセス
図6 感染プロセス

インストール スクリプト

このインストール スクリプトには重要な役割があり、下準備をしてPro-Ocean用の基礎を築いてからそのインストールを行います。スクリプトはBashで書かれていて難読化されています。このスクリプトを観察すると、マルウェアの標的のうちの2つは、Alibaba CloudとTencent Cloudであると結論付けることができます。

このスクリプトは次のように機能します。

  1. Luoxk、BillGates、XMRig、Hashfishなど、ほかのマルウェアやマイナーを削除しようとします。このさい、grepコマンドを実行して他のプロセスとネットワーク接続を検索し、見つかった場合はそれらを終了します。
  2. すべてのcronタスクを消去し、他のマルウェアが復旧できないようにします。
  3. iptablesファイアウォールを無効にして、マルウェアがインターネットにフルにアクセスできるようにします。
  4. このマルウェアは、Tencent CloudまたはAlibaba Cloudで実行されている場合、以前のマルウェアとまったく同一のコードを使用して、検出回避のために監視エージェントをアンインストールします。
  5. SSHキーを探し、見つかればそれを使用して新しいマシンに感染しようとします。
図7 クラウド監視エージェントをアンインストールする
図7 クラウド監視エージェントをアンインストールする

基礎を築いた後、インストール スクリプトはマシンのCPUアーキテクチャを判定し、curl、wget、python2、python3、PHPなどさまざまなツールを使用して対応するバイナリをダウンロードしようとします。

図8 マルウェアをダウンロードする難読化されたコード
図8 マルウェアをダウンロードする難読化されたコード

ウォッチドッグ モジュール

Pro-Oceanには、Bashで記述されたウォッチドッグ モジュールが含まれていて、目的の異なる2つのBashスクリプトが実行されます。

  1. program__kill30 –このスクリプトは永久にループしてCPUの30%以上を使用するプロセス(マルウェア プロセスを除く)を検索します。見つかるとそれらをkillします。このマルウェアの目標は、CPUを100%使用し、Moneroを効率的にマイニングすることです。そのため、CPU使用率の高いプロセスをすべて強制終了します。
  2. Program__daemonload –このプロセスは永久にループしてマルウェアが実行されていることを確認します。停止していれば実行します。

結論

クラウドを標的とするクリプトジャック マルウェアは、暗号通貨(仮想通貨)をマイニングする環境としてのクラウドの可能性を攻撃者たちが理解するにつれて進化しています。以前に観測されたRocke攻撃グループの攻撃はもっとシンプルなものでしたが、どうやらこのグループには継続的に増大していく脅威としての兆候があるようで、このクラウド標的型マルウェアも、ワーム機能やルートキット機能を備えるなど、普通のものとは一線を画しています。クラウドへの高度な攻撃の増加傾向は今後も続くことでしょう。

またこのマルウェアは、クラウド プロバイダの提供するエージェント ベースのセキュリティ ソリューションでは、パブリック クラウド インフラストラクチャを標的とする検出回避型マルウェアを防止するうえで、十分にその機能を果たせない可能性がある、ということを示唆した例だともいえます。本稿で見てきたように、このサンプルには、一部のクラウド プロバイダのエージェントを削除し、それらの検出を回避する機能があるからです(図7参照)。

なお、パロアルトネットワークスのPrisma Cloudをご利用中のお客様は、ランタイム保護機能、クリプトマイナー検出機能を通じてPro-Oceanから保護されています。

図9 Prisma Cloudによるインシデント アラート
図9 Prisma Cloudによるインシデント アラート

IoC

URL

  • hxxp://shop.168bee[.]com/*
  • hxxps://shop.168bee[.]com/*

マイニングプール:

  • hxxp://pool.minexmr[.]com

ファイル

SHA-256ハッシュ値 ファイル名
4ff33180d326765d92e32ec5580f54495bfcdd58a85f908a7ece8d0aedbe5597 pro__autolk.sh
220c2ebacafde95ebf4af12bf0d8eedb6004edd103ecb1d6363e7eb5a3e62c01 pro__automig.sh
a81424ec81849950616f932c79db593147b8a01cc6d06d279fd05d61103abdb7 pro__autorkt.sh
070afdbb4c2c9e499d55cb8fbc08f98e95725b98682586d42f84fd7181eae1cb pro__autoscan.sh
0a3898da2c6e31f1eed4497c4e4e3cf24138981f35cb3d190b81ba4b24ab3df0 pro__cfg
26a126fd5cd47b62bb5ae3116a509caf84da1ccd414e632f898aec0948cb0dbf pro__wlib.c
37e1c05cc683bac5fe97763023a228a4ca4e0439acc94695724f67b7e0275ece proc__bioset.sh
d3e95ae2f01be948dd11157873b3c84cb3e76dea1b382bcfb2c0cb09a949497c proc__o0mig
713b5447a51a4b930222491a2dfb5b948a5da6860d80cd8663c99432c1e0812f proc__scanr.py
0f7abdceae4353c4a6a8ed6b5d261df0f94c2c52709dd50d38003192492e7d3b pro__o0cean
bfea86bb68b51c6875d541c92bb48b38298982efbe12cf918873642235b99eeb pro__o0cean
575945f6f5149dc48c4a665fcab0cbdbedec1e18b887abe837ed987a7253ad02 proc__sysagent.service
abb36bc19b82a026f7d70919c64ed987ebb71420b04bb848275547e99da485bd .program__daemonload
7888925fe143add65f2ad928a7ee4e4b864d421fde57fac0cb2b218e70fe4d31 .program__kill30

表1 悪意のあるファイルのハッシュ値