ESET/マルウェア情報局

macOSやWindowsを狙った珍しいタイプのマイニングマルウェア「LoudMiner」

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はキヤノンマーケティングジャパンが提供する「マルウェア情報局」に掲載された「macOSやWindowsを狙った珍しいタイプのマイニングマルウェア「LoudMiner」 」を再編集したものです。

はじめに

 LoudMinerは、2018年8月以降macOSおよびWindows用に拡散されている珍しいタイプの常駐型暗号通貨マイナーです。LoudMinerは、仮想化ソフトウェア(macOSではQEMU、WindowsではVirtualBox)を使用してTiny Core Linux仮想マシン上で暗号通貨をマイニングする、クロスプラットフォームマイナーです。LoudMinerは、VSTソフトウェアの違法コピーにバンドルされています。このマイナー自体はXMRig(Monero)がベースになっており、マイニングプールを使用しているため、潜在的なトランザクションの追跡は不可能です。

配布方法

 本記事執筆時点で、ドメインの登録日が2018年8月24日である1つのWordPressベースのサイト上で利用可能なVST関連アプリケーションは、137件存在しています(Windows用が42件、macOS用が95件)。最初のアプリケーション「Kontakt Native Instruments 5.7 for Windows」は同じ日にアップロードされました。サイズが大きいため、すべてのアプリケーションを分析することは現実的ではありませんが、すべてトロイの木馬化されていると考えて間違いありません。

 アプリケーションそのものをホストしているのはWordPressベースのサイトではなく、29台の外部サーバーです(これらのサーバーについてはIoCのセクションをご覧ください)。サイトの管理者はアプリケーションを新しいバージョンに更新する作業も頻繫に行うため、マイナーの最初のバージョンを追跡するのは困難です。

 ターゲットとなるアプリケーションの性質について興味深いのは、それらのアプリケーションの目的がオーディオ制作に関連している点です。つまり、アプリケーションがインストールされているのは優れた処理能力を持つマシンであり、CPUが大量に消費されたとしてもユーザーは驚きません。また、これらのアプリケーションは複雑であることが多いため、ファイルが巨大であるのもユーザーにとっては想定内です。攻撃者はこれを利用して、自分のVMイメージを紛れ込ませます。さらに、簡素なソリューションを使用するのではなく、仮想マシンを使用する設計は極めて異例であり、日常的に確認されているものとは異なります。

 以下に、いくつかのアプリケーションの例と、Webサイトに掲載されているコメントを示します。

・Propellerhead Reason
・Ableton Live
・Sylenth1
・Nexus
・Reaktor 6
・AutoTune

図1:「admin」からのコメント1

 スクリプト2のリストにあるように、実行中のqemu-system-x86_64プロセスを検出した場合にのみ検出されます

図2:「admin」からのコメント2

ユーザーからの報告

 SETは、MacのCPUを100%占有しているqemu-system-x86_64プロセスについてユーザーが不満を書き込んでいるフォーラムスレッドを発見しました。

図3:ユーザーレポート1(https://discussions.apple.com/thread/250064603)

図4:ユーザーレポート2(https://toster.ru/q/608325)

「Macloni」を名乗るユーザーは次のように述べています。

「残念なことに、OSXを再インストールしなければなりませんでした。問題は、私が公式サイトではなくtorrentサイトからダウンロードしたAbleton Live 10でした。マイナーも一緒にインストールされ、バックグラウンドで実行されたため、この問題が発生していました。」

 このユーザーが添付したActivity Monitorのスクリーンショットからは、2つのプロセス(qemu-system-x86_64とtools-service)がCPUリソースの25%を消費していること、そしてroot権限で実行されていることがわかります。

海賊版アプリケーションの分析結果

macOSもWindowsも、分析結果の概略は同じです。

1.アプリケーションには、常駐化を可能にする仮想化ソフトウェア、Linuxイメージ、および追加ファイルがバンドルされています。
2.ユーザーがアプリケーションをダウンロードし、添付されているインストール手順に従います。
3.LoudMinerが最初にインストールされ、その後に実際のVSTソフトウェアがインストールされます。
4.LoudMinerは身を潜め、再起動時に常駐化します。
5.Linux仮想マシンが起動し、マイニングが始まります。
6.仮想マシン内のスクリプトは、C&Cサーバーと通信してマイナー(構成とバイナリ)を更新することができます。

 さまざまなアプリケーションを分析したところ、実際のソフトウェア、C&Cサーバードメイン、および作成者が設定したバージョン文字列と思しきものとのバンドル方法に基づいて、このマイナーには4つのバージョンがあることが特定できました。

macOS

 ESETはこれまで、このマルウェアの3つのmacOSバージョンを確認しています。そのすべてに、installerdata.dmgでQEMUを実行するために必要な依存関係が含まれており、ここからすべてのファイルが/usr/local/binにコピーされ、その過程で適切なアクセス許可(パーミッション)が設定されます。マイナーの各バージョンは一度に2つのイメージを実行でき、それぞれが128 MBのRAMと1つのCPUコアを使用します。常駐化は、RunAtLoadをtrueに設定して/Library/LaunchDaemonsにplistファイルを追加することによって実現します。また、KeepAliveをtrueに設定することで、プロセスが停止された場合にプロセスが再開されるようにします。各バージョンには、次のコンポーネントがあります。

1.QEMU Linuxイメージ
2.QEMUイメージを起動するためのシェルスクリプト
3.起動時にシェルスクリプトを起動して、実行させ続けるために使用するデーモン
4.CPU使用率およびActivity Monitorプロセスが実行されているかどうかに基づいてマイニングを開始/停止できる、デーモンが付随したCPUモニターシェルスクリプト

 このCPUモニタースクリプトは、デーモンをロードまたはアンロードすることによって、マイニングを開始または停止できます。Activity Monitorプロセスが実行されている場合、マイニングは停止します。それ以外の場合は、システムが何秒間アイドル状態になっているかをチェックします。

2分以上経過していると、マイニングを開始します。2分未満だった場合は、CPU使用率の合計をチェックします。

その値をCPUコア数で割ります。

85%を超えている場合は、マイニングを停止します。スクリプト自体はバージョンごとに少し異なりますが、大まかな部分は同じです。

インストールが完了すると、すべてのマイナー関連のインストールファイルが削除されます。

図5:Polyverse.Music.Manipulator.v1.0.1.macOS.dmgのインストール

図6:Polyverse.Music.Manipulator.v1.0.1.macOS.dmg のセットアップ手順

バージョン1

 ダウンロードされたアプリケーションパッケージ内のマイナーファイルは、全く難読化されておらず、別のパッケージに格納されていたりもしません。これらのファイルは、ソフトウェアと一緒に次の場所にインストールされます。

/Library/Application Support/.Qemusys
 ・qemu-system-x86_64 - クリーンなQEMUバイナリ
 ・sys00_1-disk001.qcow2 - Linuxイメージ(1つ目)
 ・qemuservice - qemu-system-x86_64バイナリを介して1つ目のイメージを起動するシェルスクリプト(スクリプト1のリストを参照)

/Library/Application Support/.System-Monitor
 ・system-monitor.daemon - system-monitorバイナリを介して1つ目のイメージを起動します

/usr/local/bin
 .Tools-Service
  ・sys00_1-disk001.qcow2 - Linuxイメージ(2つ目)
  ・tools-service.daemon - tools-serviceバイナリを介して2つ目のイメージを起動します
 ・cpumonitor - アイドル時間とCPU使用率に基づいてマイニングを開始/停止します
 ・system-monitor - qemu-system-x86_64バイナリのコピー
 ・tools-service - qemu-system-x86_64バイナリのコピー
/Library/LaunchDaemons
 ・com.buildtools.system-monitor.plist - system-monitor.daemonを起動します
 ・com.buildtools.tools-service.plist - tools-service.daemonを起動します
 ・com.modulesys.qemuservice.plist - qemuserviceを起動します
 ・com.systools.cpumonitor.plist - cpumonitorを起動します

スクリプト1:qemuserviceシェルスクリプト

 依存関係がコピーされると、すべてのマイナー関連デーモンが起動され、その後実際のソフトウェアがインストールされます。

・Activity Monitorプロセスが実行中の場合、qemuserviceはイメージを起動しません。実行中の場合には、起動元のplistをアンロードします。
・tools-service.daemonは、qemu-system-x86_64プロセスが実行されておらず、45分間スリープした後に限り、イメージを起動します。
・System-monitor.daemonは、Intel i5、i7、またはi9のCPUが検出された場合に限り、イメージを起動します。

 これらのスクリプトは、名前とイメージパスが異なるだけで、同じコマンドを使用してQEMUイメージを起動します。 ESETでは、マイナーのバージョン1に関連する次のスクリーンショットを発見しました。

図7:Little Snitchが導入されているQEMUのCPU消費(出典:https://imgur.com/a/sc3u6kk)

 これはLittle Snitchからのもので、プロセスqemu-system-x86_64からの接続がブロックされたことを示しています。具体的には、hopto[.]org(無料のホスト名サービス)は、マイナーのバージョン1で使用されているC&Cです。

バージョン2

 マイナーファイルは、ダウンロードしたアプリケーションパッケージ内のdata_installer.pkgに格納されています。dが最初にインストールされ、次にVSTソフトウェアがインストールされます。インストールの前に、以下のコマンドが実行されるとマイナーのバージョン1が削除されます。

 スクリプト2のリストにあるように、実行中のqemu-system-x86_64プロセスを検出した場合にのみ検出されます。

スクリプト2:バージョン1を削除するdata_installer.pkgプリインストールスクリプト

以下の一時ファイルが作成されます。

/Users/Shared
 ・z1 - QEMUバイナリ
 ・z1.daemon - QEMUバイナリ(バージョン1のqemuservice)でQEMUイメージを起動します
 ・z1.qcow2 - QEMUイメージ
 ・z1.plist - z1.daemonを起動します
 ・z3 – CPUモニタースクリプト(バージョン1のcpumonitorとほとんど変わりません)
 ・z3.plist - z3の起動に使用されます
 ・randwd - ランダムな名前を生成します

 依存関係がコピーされた後、マイナーがインストールされます。今回QEMUバイナリ、plist、およびディレクトリの名前は、randwdスクリプトでランダム化されます。マイナーがインストールされると、z1、z1.daemon、z1.qcow2、およびz1.plistの2つのコピーが作成されます。コピーごとに、次の処理が実行されます。

・ランダムな名前のディレクトリが、/Library/Application Supportに作成されます。
・QEMUバイナリz1の名前はディレクトリと同じで、/usr/local/binにコピーされます。
・z1.daemon(スクリプト3のリストを参照)とz1.qcow2は、ランダムな名前でこのディレクトリにコピーされます。
・z1.plistは、com.<random_name>.plistという名前で/Library/LaunchDaemonsにコピーされます。

 z1.daemon、z1.plistz3、z3、およびz3.plistファイルはテンプレートとして機能します。これらのファイル内の他のスクリプト、バイナリ、plistsなどへの参照は、対応する生成されたランダムな名前に置き換えられます。 CPUモニター(z3)シェルスクリプトとそれに付随するplistファイルについても、ランダムな名前が選択されます。z3は/usr/local/binにコピーされ、plistはcom.<random_name>.plistという名前で/Library/LaunchDaemonsにコピーされます。

スクリプト3:z1.daemonシェルスクリプト

 バージョン2は、バージョン1よりも若干わかりやすく単純です。QEMUイメージは1つだけで、2つのコピーが作成されます。イメージ起動スクリプト、デーモン、およびcpumonitorについても同様です。バージョン2ではファイル名とディレクトリがランダム化されますが、インストール時にコマンドラインでaccel=hvfを指定して実行中プロセスをチェックするため、1回しかインストールできません。

 これまでにESETが確認したバージョン2のアプリケーションでは、data_installer.pkgのSHA1ハッシュは常に39a7e86368f0e68a86cce975fd9d8c254a86ed93です。

バージョン3

 マイナーのファイルは、アプリケーションパッケージ内の暗号化されたDMGファイルdo.dmgの中にあります。DMGは次のコマンドでマウントされます。

 マイナーのDMGには、単一のパッケージdatainstallero.pkgが含まれます。これとソフトウェアパッケージが次にインストールされます。 バージョン2のdatainstallero.pkgとdata_installer.pkgのパッケージ内容はほぼ同じですが、datainstallero.pkgは2つの難読化されたスクリプト(- clearpacko.shとinstallpacko.sh)を追加し、既存のスクリプト(randwd)を難読化します。

・clearpacko.shは、バージョン2と同様にマイナーのバージョン1を削除します。
・コメントがスクリプトから削除されている点を除いて、installpacko.shはバージョン2と同じ方法でマイナーをインストールします。

do.dmgのSHA1も同じままです(b676fdf3ece1ac4f96a2ff3abc7df31c7b867fb9)。

Linuxイメージの起動

 すべてのバージョンは、複数のシェルスクリプトを使用してイメージを起動します。これらのシェルスクリプトは、起動時にplistsによって実行され、そのまま保持されます。

・バージョン1は、次のバイナリ(qemu-system-x86_64のコピー)を実行して、QEMUイメージを起動します。qemu-system-x86_64、system-monitor、tools-service。
・バージョン2と3は同じコマンドを使用しますが、バイナリのファイル名、Application Supportのディレクトリ、およびQEMUファイル名はランダム化されます。

 すべてのバージョンで以下のスイッチが使用されます。

・アクセラレータとしてハイパーバイザーフレームワークを使用するための-M accel=hvfHVFはOS X 10.10で導入されました。HVFのサポートは、2018年4月にリリースされたQEMU 2.12で追加されました。
・-display noneは、グラフィカルインタフェースなしで仮想マシンを実行するためのものです。
イメージはRAM容量とCPUコア数を指定せずに起動されるため、デフォルト値(CPUコア x 1、128 MBのRAM)が使用されます。すべてのバージョンで2つのイメージを起動できます。

Windows(バージョン4)

 ESETがアプリケーションから抽出した文字列に基づいて、これまで確認された唯一のWindowsバージョンをバージョン4と定義しました。前述したように、ロジックはmacOSバージョンと非常によく似ています。各Windowsアプリケーションは、「クラッキングされた」アプリケーションをインストールするMSIインストーラとしてパッケージングされています。図8は、vstcrack[.]comからの「クラッキングされた」VSTインストーラを実行する際に、VirtualBoxドライバのインストールに関して信頼するかどうかを確認するポップアップウィンドウ(信頼ポップアップ)を示しています。

図8:vstcrack[.]comからのアプリケーションのインストールを実行する際に表示されるVirtualBoxドライバの信頼ポップアップ

 VirtualBoxは通常のフォルダ名(C:\Program Files\Oracle)にインストールされます。ただし、ディレクトリの属性は「非表示」に設定されます。続いて、インストーラはLinuxイメージとVBoxVmService(VirtualBox仮想マシンをサービスとして実行するために使用されるWindowsサービス)をC:\vms(隠しディレクトリ)にコピーします。インストールが完了すると、インストーラはBAT2EXE(スクリプト4の解凍リストを参照)でコンパイルされたバッチスクリプトを実行してLinuxイメージをインポートし、VmServiceControl.exeを実行して仮想マシンをサービスとして起動します。

スクリプト4:Linux仮想マシンをサービスとして実行するためのバッチスクリプト

 この方法は、再起動後もマイナーが潜伏できるようにするために用いられます。実際、VboxVmServiceに付属している構成ファイル(スクリプト5を参照)では、AutoStartオプションを有効にすることが可能であるため、仮想マシンを起動時に自動的に起動できます。

スクリプト5:AutoStartが有効になっているVBoxVmServiceの構成ファイル

 Linuxイメージに含まれているOVFファイルには、仮想マシンのハードウェア構成が記述されています(スクリプト6を参照)。使用するのは1GBのRAMと2つのCPUコアです(最大使用率90%)。

スクリプト6:Linuxイメージのハードウェア構成

Linuxイメージ

 Linuxイメージは、XMRigに加えてマイナーを継続的に更新するためのファイルとスクリプトを実行するように構成されたTiny Core Linux 9.0です。最も興味深いファイルは次のとおりです。

・/root/.ssh/{id_rsa, id_rsa.pub} - SCPを使用してC&Cサーバーからマイナーを更新するために使用されるSSHペアキー。
・/opt/{bootsync.sh, bootlocal.sh} - C&Cサーバーからのマイナーの更新と実行を試みるシステム起動コマンド(スクリプト7と8を参照)。

スクリプト7:bootsync.sh

スクリプト8:bootlocal.sh

・/mnt/sda1/tools/bin -マイナーの更新と実行に使用されるメインファイルとスクリプト。
・/mnt/sda1/tools/xmrig - (GitHubリポジトリからの)XMRigのソースコードを含みます。

 マイナーの構成は、/mnt/sda1/tools/bin/config.jsonに格納されており、マイニングプールに使用されるドメイン名とポートが主に含まれています。これらのドメイン名とポートはバージョンによって異なります(IoCセクションの例を参照)。 更新メカニズムは、3つの異なるスクリプトによってSCP(Secure File Copy)を介して実行されます。

・xmrig_update - マイナーの設定を更新します(config.json)。
・ccommand - ccommand_update、xmrig_update(スクリプト9を参照)、updater.sh, xmrigを更新します。
・ccommand_update - ccommandを更新します。

 上記のことから、マイナーの構成は毎日1回更新されていると考えられます。

スクリプト9:xmrig_update

 特定のマイニングセッションを識別するために、マシンのIPアドレスとその日の日付を含むファイルがidgeneratorスクリプトによって作成され、その出力がupdater.shスクリプトによってC&Cサーバーに送信されます。

対策

 言うまでもありませんが、この種の脅威から保護するための最善の対策は、市販ソフトウェアの違法コピーをダウンロードしないことです。ただし、アプリケーションに含まれている不要なコードを識別するのに役立つヒントがいくつかあります。

- 予期していなかった「追加の」インストーラ(この場合はOracleネットワークアダプタ)からの信頼ポップアップ。
- インストールしなかったプロセス(この場合はQEMUまたはVirtualBox)によるCPUの大量消費。
- スタートアップサービスリストに追加された新しいサービス(Windows)、または新しいLaunch Daemon(macOS)。
- 奇妙なドメイン名へのネットワーク接続(ここではsystem-update[.]info、system-check[.]servicesサービスなど)。

IoC(セキュリティ侵害の痕跡情報)

ハッシュ
macOSの「クラッキングされた」アプリケーション(バージョン1~3)

Windowsの「クラッキングされた」アプリケーション(バージョン4)

Linuxイメージ

ファイル名

macOS
・/Library/Application Support/.Qemusys
・/Library/Application Support/.System-Monitor
・/usr/local/bin/{.Tools-Service, cpumonitor, system-monitor, tools-service}
・/Library/LaunchDaemons/{com.buildtools.system-monitor.plist, com.buildtools.tools-service.plist, com.modulesys.qemuservice.plist, com.systools.cpumonitor.plist}

Windows
・C:\vms

ホスト名
・vstcrack[.]com (137[.]74.151.144)

ダウンロードホスト(ポート80のHTTP経由)
・185[.]112.156.163
・185[.]112.156.29
・185[.]112.156.70
・185[.]112.157.102
・185[.]112.157.103
・185[.]112.157.105
・185[.]112.157.12
・185[.]112.157.181
・185[.]112.157.213
・185[.]112.157.24
・185[.]112.157.38
・185[.]112.157.49
・185[.]112.157.53
・185[.]112.157.65
・185[.]112.157.72
・185[.]112.157.79
・185[.]112.157.85
・185[.]112.157.99
・185[.]112.158.112
・185[.]112.158.133
・185[.]112.158.186
・185[.]112.158.190
・185[.]112.158.20
・185[.]112.158.3
・185[.]112.158.96
・d-d[.]host (185[.]112.158.44)
・d-d[.]live (185[.]112.156.227)
・d-d[.]space (185[.]112.157.79)
・m-m[.]icu (185[.]112.157.118)

更新のホスト(SCP経由)
・aly001[.]hopto.org (192[.]210.200.87、ポート22)
・system-update[.]is (145[.]249.104.109、ポート5100)

マイニングのホスト
・system-update[.]info (185[.]193.126.114、ポート443または8080)
・system-check[.]services (82[.]221.139.161、ポート8080)

MITRE ATT&CKの攻撃手法

戦術 ID 名称 説明
実行 T1035 サービスの実行 WindowsでLinuxイメージがVboxVmServiceと共にサービスとして実行されます。
常駐化 T1050 サービスの追加 VboxVmServiceと併せて、Linux仮想マシンをサービスとしてインストールします。
T1062 ハイパーバイザー マイナーを実行するために、Type 2ハイパーバイザーをホスト(VirtualBoxまたはQEMU)にインストールします。
T1160 Launch Daemon macOSのバージョンは、常駐するためにLaunch Daemonを使用します。
防衛の回避 T1027 ファイルまたは情報の難読化 一部のシェルスクリプトは難読化されており、一部のインストーラはmacOSバージョンで暗号化されています。
T1045 ソフトウェアパッキング WindowsバージョンではBAT2EXEを使用してバッチスクリプトをパッキングします。
T1158 隠しファイルとディレクトリ VirtualBoxのインストールフォルダとLinuxイメージを含むディレクトリが非表示になります。
C&C T1043 一般的に利用されるポート TCPポート443と8080をマイニングプール通信に使用します。
T1105 リモートファイルコピー SCP(ポート22または5100)を使用して、C&Cサーバーとの間でファイルをコピーします。
影響 T1496 リソースハイジャッキング 被害者のマシンを使用して暗号通貨(Monero)をマイニングします。

[参照元]
LoudMiner:クラッキングされたVSTソフトウェアを利用するクロスプラットフォームマイニング