WatchDog: 2年にわたりオペレーションの続くクリプトジャックキャンペーンを暴く

By

Category: Cloud, Unit 42

Tags: , , , , ,

This conceptual image illustrates cryptojacking, such as the WatchDog cryptojacking compaign discussed in this blog.

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

概要

本稿では、Unit 42のリサーチャーによって暴かれた、これまで知られているもののなかでも最大かつ最長のMoneroクリプトジャックオペレーションの1つについて解説します。このオペレーションは、Linuxデーモン名watchdogdにならって「WatchDog」と呼ばれています。WatchDogのマイニングオペレーションは2019年1月27日から実行されており、少なくとも209 Monero(XMR)、米ドル換算で約32,056ドル(日本円でおよそ340万円)を集めていました。リサーチャーは、少なくとも同時に476台の侵害されたシステム(主にWindows、*NIXのクラウドインスタンス)が、2年以上にわたり、マイニングオペレーションを実行していたものと考えています。

クリプトジャックとは、自身の所有・保守下にないシステム上でマイニングオペレーターがクリプトマイニングオペレーションを行う行為を指します。悪意のあるクリプトジャックオペレーションは現在クラウド環境の23%に影響を与えていると推定されていますが、これは2018年時点の8%と比べ15%の増加となっています。この増加は主に暗号通貨(仮想通貨)価値の急激な上昇によって引き起こされています。暗号通貨の背後にある技術、ブロックチェーンの世界市場は2024年までに607億ドルに達すると予想されており、犯罪組織やアクターグループはここから利益を得ようとしています。

本稿では、Unit 42のリサーチャーがWatchDogによるクリプトジャックキャンペーンの概要を説明します。WatchDogマイナーは、3部構成のGo言語バイナリセットとbashまたはPowerShellスクリプトファイルで構成されています。これらのバイナリには特定の機能があり、その1つがLinuxのwatchdogd機能をエミュレートしてマイニングプロセスがハング、オーバーロード、または予期せず終了しないようにすることです。2番目のGoバイナリは、IPアドレスネット範囲の構成可能リストをダウンロードし、その後スキャンオペレーション中に検出した識別済み*NIX、Windowsシステムを標的としたエクスプロイトオペレーション機能を提供します。最後に3番目のGoバイナリスクリプトは、開始されたbashまたはPowerShellスクリプトのカスタム構成を使用し、Windowsまたは*NIXオペレーティングシステム(OS)上でのマイニングオペレーションを開始します。WatchDogは、Goバイナリを使うことにより、オペレーティングシステムが違ってもGo言語プラットフォームが標的システムにインストールされてさえいれば、同じバイナリ(WindowsとNIX)を使って指定したオペレーションを実行できるようにしています。

リサーチャーはマイニングオペレーションの背後にあるインフラストラクチャの全体図を作成し、ルートIPエンドポイント18件と悪意のあるドメイン7件を特定しました。これらのドメインは、ツールセットのダウンロードに使用される少なくとも125件の悪意のあるURLアドレスを提供していました。

Unit 42は2019年10月にDockerHub上でワーム化可能なMoneroのマイニングオペレーションGraboidについて報告したことがあります。Graboidは、アクティブなシステムの総数という点でそれまでに知られていた最大のマイニングオペレーションでした。オペレーション時点でGraboidは少なくとも2,000台の侵害された公開済みDocker Daemon APIシステムで構成されていました。各Graboidマイナーは、一度に全体の65%を稼働させていました。つまり、同時には約1,300台(2000 * 0.65 = 1300)の侵害されたDockerコンテナがマイニングしていたことになります。さらにGraboidは、使用可能なすべてのコンテナ中央処理装置(CPU)を利用する構成スクリプトにより、より高い処理速度を達成することもできました。ただしGraboidはDockerHubイメージが削除されるまでの最大3か月間しか動作しないことがわかっていました。

これと比べ、WatchDogは悪意のあるペイロードのホスティングをサードパーティサイトに依存しないことから、本稿執筆時点で2年以上もアクティブな状態を保ってこられました。

WatchDogのオペレーターが熟練したコーダーであること、マイニングオペレーションにこれまでさほど注目を集めずにきたことは明らかです。現時点で追加のクラウド侵害アクティビティ(つまり、クラウドプラットフォームのIDおよびアクセス管理(IAM)資格情報、アクセスID、またはキーの窃取)の兆候はありませんが、クラウドアカウントはさらなる侵害を受ける可能性はあります。というのも、これらの攻撃者にはクリプトジャックソフトウェアの植え付けの段階で窃取済みのルートアクセスや管理者アクセスがあるので、そうした侵害済みクラウドシステム上でIAM関連情報も見つける可能性が高いからです。

パロアルトネットワークスのPrisma Accessは、PAN-OS経由で、WatchDogの18個のIPアドレス、7個のドメイン、関連URLアドレスをそれぞれ検出するように構成されています。Prisma Cloudもまた、Prisma Cloud Compute Defenderがインストールされたクラウド環境で、WatchDogマイナーによる悪意のあるXMRigプロセスが利用された場合、それを検出します。

パブリックマイニングプール

Unit 42のリサーチャーは、WatchDog構成ファイル内の3つのXMRウォレットアドレスを特定しました。これら構成ファイルはWatchDogマイニングバイナリと一緒にダウンロードされ、ここにマイニングオペレーション中に使用するXMRウォレットアドレスとマイニングプールが含まれています。構成ファイルconfig.jsonの例については図1を参照してください。

WatchDogマイニングバイナリと一緒にダウンロードされた構成ファイルの例。これらには、マイニングオペレーション中に使用されるXMRウォレットアドレスとマイニングプールが含まれています。
図1 XMRウォレットアドレスの詳細を示すconfig.jsonファイル

WatchDogで使用されるすべての既知のconfig.jsonファイルを調べ、私たちは3つのXMRウォレットアドレスを次のように特定しました。

43zqYTWj1JG1H1idZFQWwJZLTos3hbJ5iR3tJpEtwEi43UBbzPeaQxCRysdjYTtdc8aHao7csiWa5BTP9PfNYzyfSbbrwoR

82etS8QzVhqdiL6LMbb85BdEC3KgJeRGT3X1F3DQBnJa2tzgBJ54bn4aNDjuWDtpygBsRqcfGRK4gbbw3xUy3oJv7TwpUG4

87q6aU1M9xmQ5p3wh8Jzst5mcFfDzKEuuDjV6u7Q7UDnAXJR7FLeQH2UYFzhQatde2WHuZ9LbxRsf3PGA8gpnGXL3G7iWMv

これらの3つのXMRウォレットアドレスは、マイニングオペレーション、パフォーマンス、機能、支払い処理のため、少なくとも3つのパブリックマイニングプールと1つのプライベートマイニングプールで使用されています。

マイニングプール: ポート パブリックまたはプライベート
xmr.f2pool[.]com 13531 パブリック
xmr-eu2.nanopool[.]org 14444 パブリック
xmr.pool.gntl[.]co.uk 40009 パブリック
80[.]211[.]206[.]105 6666 プライベート

表1 WatchDogマイナーが使用するパブリックマイニングプールとプライベートマイニングプール

次の8つのスクリーンショットは、特定された3つのXMRウォレットのそれぞれについて、f2pool、nanopool、およびGNTLパブリックマイニングプールから収集された調査結果を示しています。

f2poolマイニングプール

図2と図3は、f2poolパブリックマイニングプール内で頻繁に使用されている「43zq」で始まるXMRアドレスを示しています。このアドレスはおよそ200 XMRのMoneroを集めています。一方、「82et」で始まるXMRウォレットアドレスははるかに低い頻度で動作しており、こちらは 2.3 XMRしか集めていません(図4および5を参照)。

これは、f2poolパブリックマイニングプールのウォレット43zqのXMR合計を示していて、これは約200XMRのMoneroを集めています。
図2 XMRウォレット43zqとそのXMRの合計
XMRウォレット43zqは、f2poolパブリックマイニングプール内のWatchDogに頻繁に使用されていました。この画像は、30日間のハッシュレートを示しています。
図3 XMRウォレット43zqとその30日間のハッシュレート
これは、f2poolパブリックマイニングプールのウォレット82etのXMR合計を示していて、こちらは2.3XMRしか集めていません。
図4 XMRウォレット82etとそのXMR合計
XMRウォレット82etは、f2poolパブリックマイニングプール内のWatchDogではあまり使用されていませんでした。この画像は、30日間のハッシュレートを示しています。
図5 XMRウォレット82etとその30日間のハッシュレート

nanopoolマイニングプール

「82et」で始まるXMRアドレスは、f2poolパブリックマイニングプール内ではさほどアクティブではありませんでしたが、nanopoolパブリックマイニングプール(図6、図7を参照)では、「43zq」で始まるXMRウォレットアドレス(図8、図9を参照)よりも大きな関与が見られました。ただし、nanopoolマイニングオペレーションは、WatchDogマイニングオペレーション全体でマイニングされたXMR全体のほんの一部でしかなく、現在まででにマイニングされたのは6.8XMRコインとなっています。

XMRウォレット82etは、nanopoolパブリックマイニングプールではより大きな関与が見られました。ここに示されているライフタイムハッシュレートとバランスを参照してください。
図6 XMRウォレット82etとその全期間でのハッシュレート
XMRウォレット82etは、XMRペイアウトとともにここに示されています。nanopoolのパブリックマイニングプール内で、このウォレットはこれまでにマイニングされた6.8のXMRコインを示しています。
図7。XMRウォレット82etとそのXMRペイアウト
この画像は、比較のために、XMRウォレット43zqとnanopoolパブリックマイニングプール内のそのライフタイムハッシュレートを示しています。
図8 XMRウォレット43zqとその全期間でのハッシュレート
nanopoolパブリックマイニングプール内のXMRウォレット43zqのXMR合計支払い額は、WatchDogマイニングオペレーション全体のほんの一部にすぎません。
図9 XMRウォレット43zqとそのXMRペイアウト総額

GNTL XMRマイニングプール

「87qa」で始まるウォレットのマイニング能力をここにリストした3つのパブリックマイニングプールすべてに結びつける構成ファイルが1点特定されましたが、そのなかではGNTLのみに「87qa」XMRウォレットと関連するマイニングオペレーションが見られました(図10参照)。ただし、このXMRウォレットアドレスは、WatchDogオペレーション内ではあまり使用されていないようで、本稿執筆時点では「87qa」XMRアドレスでGNTLからマイニングされたのは0.59 XMRのみです(図10および11を参照)。

GNTL XMRマイニングプールは、ここにリストされている3つのパブリックマイニングプールのうち、87qaのXMRウォレットに関連するマイニングオペレーションが示された唯一のプールです。この画像は、XMRハッシュレートを示しています。
図10 XMRウォレット87qaおよびXMRハッシュレート
本稿執筆時点では87qaのXMRアドレスでGNTLからマイニングされたのは0.59 XMRのみです。
図11 XMRウォレット87qaとXMRペイアウト総額

私たちは3つのパブリックマイニングプールすべてから収集したデータを使って、パブリックマイニングプール全体でXMRウォレットは平均1,037KH/sのハッシュレートを持つものと算定しました。次に私たちはクリプトマイニングオペレーションに積極的に参加しているシステムの現在の数を見積りました。その結果、控えめに見積もって、どの時点をとっても平均で476台のシステムがWatchDogマイニングオペレーションに積極的に関与しているものと考えています。

この見積もりは複数のクラウドプロバイダ最大手のCPUアーキテクチャ関連ドキュメントをベースに計算しています。すべてのクラウドプロバイダはクラウドVMインスタンスの大半でIntel XeonE5およびAMDEPYCCPUを使用していることを謳っています。

人気XMRマイニングソフトウェアXMRigのベンチマークハッシュ計算機を使うとミッドレンジのIntel Xeon E5AMD EPYCシリーズ7などのプロセッサのハッシュレートを計算することができます。各プロセッサの単一スレッドは、AMD EPYCシリーズ7では543H/s(1秒あたりのハッシュ数)、Intel XeonE5では544H/sの推定ハッシュレートを生成できます。WatchDogマイナーの構成ファイルconfig.jsonを見ると、マイナーは侵害システムで最大4スレッドを使用することがわかります(図12参照)。

WatchDogマイナーの構成ファイルconfig.jsonを見ると、マイナーは侵害システムで最大4スレッドを使用することがわかります。
図12 WatchDogマイナーのCPU構成

これにより、構成ガイドに従って最大4本のスレッドを使い、侵害システムは合計で平均2,172〜2,176 H/sを処理することになります。WatchDogのマイナーオペレーション全体の処理の平均合計は1,037KH/s(1000ハッシュ/秒)で、ここから考えると同時に計476台のシステムがマイニングオペレーションに参加する可能性があります。

システムの数は、侵害を受けて使用されたVMインスタンスの種類によって異なります。侵害されたすべてのシステムがXMRigオペレーションを同じ規模で処理できるわけではない点には留意すべきでしょう。ここで推定した数の2倍の約900システムが、一度に稼働している可能性もあります。このサイズのマイニングオペレーションは、比較的小さめで堅牢性の低いクラウドVMインスタンスが侵害され、XMRハッシュ処理に使用された場合に達成できるものです。

WatchDogのインフラストラクチャ

WatchDogマイナーは、少なくとも2019年1月27日からアクティブになっています。このことはパブリックマイニングプールのデータから確認できます。これ以降、WatchDogのインフラストラクチャに向けられたマルウェアサンプル、とくにシステムを開始する初期化bashスクリプトや、新たに侵害されたシステムのマイニング構成プロセスが多数特定されています。

これら初期化bashスクリプトの分析を通じ、WatchDogのアクターが侵害システム上でマイニングオペレーションをどのように設定したかを追跡することができました。スクリプト作成者は、意図せずマイニングインフラストラクチャのセットアップや構成方法の手がかりを残していました。既知のすべてのオペレーションで、初期化bashスクリプトが侵入先システムにダウンロードされ一連の機能を実行します。機能の一部はほとんどのクリプトジャックオペレーションと共通していて、たとえばクラウドセキュリティツールの削除、以前にインストールされた既知の悪意のあるクリプトマイニングソフトウェアの削除、カスタマイズされた悪意のあるクリプトマイニングソフトウェアのダウンロードとセットアップなどを行います。ただしWatchDogのbashスクリプトマイナーは、WatchDogマイニングツールキットのダウンロードに使用するプライマリ/セカンダリURLアドレスのハードコードもしています(図13を参照)。

WatchDogのbashスクリプトマイナーは、WatchDogマイニングツールキットのダウンロードに使用するプライマリ/セカンダリURLアドレスのハードコードをしています。
図13 コマンド&コントロールの確立(C2)

これらのプライマリ/セカンダリURLアドレスを使い、WatchDogマイナーオペレーターが利用しているネットワークインフラストラクチャをおおよそでマッピングすることができました。

次のMaltegoチャートは、WatchDogが利用している既知のオペレーションインフラストラクチャの全体的サイズを示しています(図14参照)。

このMaltegoチャートは、WatchDogが利用している既知のオペレーションインフラストラクチャの全体的サイズを示しています。
図14 WatchDogマイナーオペレーションのMaltegoチャート

現在までで、18個の既知IPアドレス、7つの既知ドメインが少なくとも125件のURLをホストしており、これらがWatchDogマイナーマルウェアと構成ファイルを提供してきたか、現在も提供を続けています。マルウェアの大半は *NIX オペレーティングシステムに的を絞っているようですが、既知の複数のホストシステムにホストされているWindows OS用バイナリも見つかっています。

39.100.33[.]209
45.153.240[.]58
45.9.148[.]37
93.115.23[.]117
95.182.122[.]199
106.15.74[.]113
107.173.159[.]206
146.71.79[.]230
185.181.10[.]234
185.232.65[.]124
185.232.65[.]191
185.232.65[.]192
185.247.117[.]64
198.98.57[.]187
199.19.226[.]117
204.44.105[.]168
205.209.152[.]78
208.109.11[.]21

表2 WatchDogマイナーに関連付けられた18個の既知IPアドレス

de.gengine[.]com.de
de.gsearch[.]com.de
global.bitmex[.]com.de
ipzse[.]com
py2web[.]store
sjjjv[.]xyz
us.gsearch[.]com.de

表3 WatchDogマイナーに関連付けられた7つの既知のドメイン

WatchDogのマイニングオペレーション関連の既知URLアドレスの全リストは本稿末尾の「IOC」セクションから参照してください。

私たちは本稿の調査時点でこれらホストシステムの一部がまだ機能していることを確認しています。こうした稼働中のシステムから、さらなる分析のために悪意のあるファイルを複数取得することができました。ファイルとそのSHA-256ハッシュ値の全内訳は巻末のIOCセクションに記載しておきます。

WatchDogマルウェアの内訳

ここでは相関する5つのマルウェアサンプルを選び、その機能を説明します。クリプトジャックオペレーションはbashスクリプトnewdat.shから始まるようです。このスクリプトで、3つの独立したGoバイナリファイルと1つのJSON構成ファイルconfig.json用のダウンロード可能コンテンツを定義しています。本稿で詳説するGoバイナリは、ネットワークスキャナでエクスプロイトバイナリのnetworkmanager、プロセス監視バイナリのphpguard、悪意のあるXMRig暗号化ソフトウェアの1バージョンであるphpupdateです。

newdat.sh

私たちは4つの異なるファイル名をもつbashスクリプトを特定しました。これらは同一のインフラストラクチャを使い、同じネットワークスキャン、システム構成のオペレーションを実行しています。ファイル名はそれぞれinit.sh newinit.sh newdat.shupdate.shとなっています。

初期化スクリプトには次の8つのユニークなオペレーションが含まれています。

  • 環境設定
    • ファイルとディレクトリの読み取り/書き込み権限の構成を行い、ダウンロードしたファイルを事前に構成した場所に保存します。
  • クラウドセキュリティツールのアンインストール
  • ツールキットのダウンロード
    • 3つのGoバイナリと構成ファイルをダウンロードします。
  • kill_miner_proc
    • 既知のマイニングプロセスを強制終了します。
  • kill_sus_proc
    • すでにインストールされているWatchDogマイニングプロセスを強制終了します。
  • ダウンロード
    • スキャンに使用するIPアドレス範囲をダウンロードします。
  • unlock_cron
    • /etc/crontabファイルをアンロックします。
  • lock_cron
    • /etc/crontabファイルをロックします。

Unit 42のリサーチャーが特定したなかでももっとも有用なスクリプトオペレーションの1つはおそらくWatchDogツールキットのダウンロード場所に関するセクションでしょう。前のインフラストラクチャのセクションで説明したとおり、これらのスクリプトは、悪意のあるクリプトジャックファイルが現在どのエンドポイントでホストされているかについての詳細を示しています。

この図はnewdat.shスクリプト内のハードコードされたリンクを示しています。これらがURLアドレスを指定したり、マイナーのバイナリや構成ファイル、スキャン用バイナリ、WatchDogプロセス、さらには別バージョンの初期スクリプトまでも識別しています。
図15 コマンド&コントロールの確立(C2)

図15が示すように、newdat.sh スクリプト内にはハードコードされたリンクがあり、これらがURLアドレスを指定したり、マイナーのバイナリや構成ファイル、スキャン用バイナリ、WatchDogプロセス、さらには別バージョンの初期スクリプトまでも識別しています。これにより、アクターはアクティブなマイナーをほぼリアルタイムで更新できます。

これらの各バイナリについては、次のセクションで調査します。最初に解説するのはGo言語スキャンバイナリnetworkmanagerです。

networkmanager

このnetworkmanagerはUPX圧縮されたGo言語バイナリで、ネットワークスキャン向けに設計されています。脆弱性のある標的が特定されると、強固な組み込みアプリケーションエクスプロイトセットを使い、特定済みのシステムを侵害しようとします。私たちは、このアクターが、同一のスキャン/エクスプロイト機能を実行するさいに、2つの異なるファイル名を使うことを特定しました。それがnetworkmanagernetworkserviceです。

スキャンオペレーションは先に説明したbashスクリプトnewdat.shが開始しますが、実際のスキャンオペレーションやエクスプロイトオペレーションの実行を担うのはスキャナバイナリです。WatchDogのスキャン用バイナリは、個別の中国のIPアドレス範囲60,634個で構成されるファイルを使用しますが、このファイルは、networkmanagerバイナリによるシステム検出の段階でダウンロードされます。Goバイナリのメインの初期化関数sym.go.main.ipc.download_ipdb内で、networkmanagerバイナリは、以下の2つのIPアドレス範囲ファイルのいずれか1つをダウンロードします。

http://83.97.20[.]90/cccf67356/ip_cn.txt

http://83.97.20[.]90/cccf67356/ips_cn.txt

IPアドレス範囲はバイナリ形式で保存されていますが、ASCIIに変換して対象IPアドレス範囲を確認できました(図16参照)。

IPアドレス範囲はバイナリ形式で保存されていますが、ASCIIに変換して対象IPアドレス範囲を確認できました。
図16 中国のIPアドレス範囲の例(ip_cn.txt)

私たちがこれらのファイルをダウンロードしたところ、ダウンロード時点では両ファイルのSHA-256ハッシュ値は同じだったので、ファイルのコンテンツは同じものが含まれていたように見えます(ad3efb9bfd49c379a002532f43cc4867a4f0b1cd52b6f438bb7a8feb8833b8f8)。pnscan、masscanプロセスがこれらの2つの同一ファイルを使い、潜在的被害者のネットワーク範囲をスキャンします。

本稿でのダウンロード時点では、これら2つのファイルには中国に関連するIPアドレスのみが含まれているようです。WatchDogの背後にいるアクターは、バイナリを更新し、標的にしたいIPアドレス範囲をいくつでも含めることができる可能性があります。また、実際にそうなっている可能性があります。私たちは中国のIPアドレス空間外、具体的には米国およびヨーロッパにおいて、WatchDogマイナーに侵害されたホストを特定しています。

つづいて networkmanagerのGoバイナリにロードされるのが33個の個別のエクスプロイト関数、32の個別RCE関数、複数のシェルグラバー関数です(図17参照)。

networkmanagerのGoバイナリにロードされるのが33個の個別のエクスプロイト関数、32の個別RCE関数、複数のシェルグラバー関数です。
図17 networkmanagerバイナリにロードされたエクスプロイト

具体的には次のアプリケーションがスキャンバイナリ内で標的とされています。

  • CCTVエクスプロイト
    • 対象がCCTVアプライアンスなのかあるいは「cctv」が表す別の呼称が存在するのかはいまのところ不明
  • Drupal
    • バージョン7および8
  • Elasticsearch
    • CVE-2015-1427(Elasticsearchサンドボックス回避 – 1.3.8より前のバージョンと1.4.3より前の1.4.x)
    • CVE-2014-3120(1.2より前のElasticsearch)
  • Apache Hadoop
  • PowerShell
    • エンコードされたコマンドラインオペレーション
  • Redis
  • Spring Data Commons
    • CVE-2018-1273の脆弱性のある1.13-1.13.10、2.0-2.0.5より前のバージョン
  • SQL Server
  • ThinkPHP
    • バージョン5.x、5.10、5.0.23
  • Oracle WebLogic Server
    • CVE-2017-10271 – バージョン10.3.6.0.0、12.1.3.0.0、12.2.1.1.0、12.2.1.2.0

「tmp_0324_scan」への参照は2019年5月19日に中国語の情報セキュリティグループforum.90sec.comのブログ投稿ですでに確認されています。同グループのブログでは、Apache Hadoop、Redis、ThinkPHPアプリケーションを対象としたクリプトジャックのエクスプロイトイベントの詳細を取り上げています。

注目すべきはブログ内で強調表示されていたbashスクリプトがWatchDogマイナーが使用するシェルスクリプト(図18を参照)newinit.sh と同じ形式を踏襲しているという点です。ファイル名とIPアドレスが異なることを除けば2つの形式は事実上同じものです。

同グループのブログとnewInit.shとの間の類似したスクリプト形式を、2つのスクリプト間の似たセクションをつないだ赤い矢印で示します。
図18 同グループのブログとnewInit.shの類似したスクリプト形式

さらに、同投稿内の「tmp/0324/scan」への参照は、networkmanagerバイナリ関数内で見られるものと同じ形式でリスト化されています(図17および19を参照)。

この画像は、同グループのフォーラムで見つかったnetworkservicesのエクスプロイトの詳細を示しています。
図19 同グループのフォーラムで見つかったnetworkservicesのエクスプロイトの画像

2019年5月19日に90secが観測したアクティビティは、今回私たちリサーチャーがWatchDogマイナーの形で確認したクリプトジャックマルウェアファミリと同じものであることは明らかです。同じエクスプロイトが使用されているようすがあるなど、これらマルウェアの過去・現在の形式には、類似点が複数見られます。ただし、新たな手法が開発され、WatchDogのより新しいバージョンに実装されてもいます。具体的にはphpguardバイナリについてそうした手法が見られます。

このほか、denisenkom/go-mssqldbライブラリがGoバイナリに追加され、Go言語経由でSQL DB関数にアクセスできるようになっています(図20を参照)。これには、リモート接続、エラー処理、バルク操作、ロギング、データ操作などが含まれます。

この画像は、Goバイナリに追加されたライブラリを示しています。Go言語経由でSQL DB関数にアクセスし、リモート接続、エラー処理、バルク操作、ロギング、データ操作などを行うことができます。
図20 ロードされたライブラリ – Denisenkom mssql-db、Go-Civil、Redis

またこのGoバイナリにはGoogle Cloud library Go Civilもロードされています。これにより、正確な24時間、60分、60秒のグレゴリオ暦の使用が可能になります。このほかGithub Redis Goライブラリもロードされており、これでバイナリによるRedisサービスの制御を可能にしています。

phpguard

phpguardはUPX圧縮されたGo言語バイナリで、オペレーション中、マイニングソフトウェアを保護するように設計されています。phpguradは、システムプロセスとタスクスケジューラ、またはcronジョブを監視する機能を実行することで、マイニングソフトウェアが確実に実行されるようにしています。私たちは同一の保護機能を実行するバイナリ2つをphpguardsysguardという異なるファイル名で特定しています。

このGoバイナリは、カスタムGoライブラリ「tmp_0324_dog_platform」(図21を参照)を使い、Windowsまたは*NIXシステムのXMRigマイニングソフトウェアを制御することができます。

カスタムGoライブラリを使い、このGoバイナリはWindowsまたは*NIXシステムのXMRigマイニングソフトウェアを制御できます。
図21 Windowsおよび*NIXのマイナーを制御するphpguardのカスタムGo関数

さらにこのバイナリは、対象OS内にマイニングソフトウェアを埋め込みます(図22を参照)。Windowsシステムの場合は、タスクをスケジュール化することでこれを実現し、*NIXシステムの場合は、cronジョブ経由で埋め込みます(図23を参照)。

このバイナリは、対象OS内にマイニングソフトウェアを埋め込みます。Windowsシステムの場合は、タスクをスケジュール化することでこれを実現します。phpguardの関連するセクションをここに示します。
図22 phpguardがWindowsシステム上でスケジュールされたタスクを作成しているところ
*NIXシステムの場合は、cronジョブ経由でマイニングソフトウェアを埋め込みます。phpguardの関連するセクションをここに示します。
図23 phpguardが*NIXシステム上でcronジョブを作成しているところ

このバイナリは、OSが実行中の各プロセスを継続的にクロールすることで、マイニングプロセスが実行中であることを確認します(図24参照)。

このバイナリはまた、OSが実行中の各プロセスを継続的にクロールすることでもマイニングプロセスが実行中であることを確認します。
図24 phpguardプロセスによるクローリングサイクル

このバイナリは、マイニングプロセスを確実に保護するために設計されています。バイナリの初回実行時には保護のための新しいプロセスを設定し、マイニングソフトウェアが起動していなければ起動させ、マイニングソフトウェアがまだダウンロードされていなければダウンロードプロセスを開始します(図25参照)。

このバイナリは、マイニングプロセスを確実に保護するために設計されています。関連する保護のいくつかをここに示します。
図25 マイニングプロセスの保護を設定しているところ

phpupdate

phpupdateプロセスは、WatchDogマイナーが使用するXMRigマイニングソフトウェアです。Unit 42のリサーチャーは、同じマイニングオペレーションを実行するバイナリについてphpupdatezzhtraceという3つの異なるファイル名を特定しています。

WatchDogマイナー版のXMRigやそのマイニングオペレーションについては、すでに知られているマイニングソフトウェアのオペレーションから外れるようなものはとくにないので、ここで説明すべきことはほとんどありません。このバイナリはさまざまに構成可能なオペレーションメニューを提供し、以下のようなマイニング上のオプションをユーザーが指定できるようにしています(図26参照)。

  • マイニングプールのURL。
  • マイニングアルゴリズム(または目的のコイン)。
  • ユーザー名。
  • パスワード。
  • プロキシ情報。
  • キープアライブパケットの送信
  • パケットのサイズ(他多数)。
WatchDogマイナーのバージョンのXMRigは、ここに示すような完全に構成可能なオペレーションメニューを提供します。
図26 WatchDogマイナーの構成オプション

直前のセクションで説明したようにこマイニングソフトウェアはGoライブラリphpguardからも制御可能ですが、ユーザーが直接対話的にオペレーションすることもできます。

結論

WatchDogのマイニングオペレーションは早ければ2019年1月27日には実行されており、少なくとも209 Monero(XMR)、米ドル換算で約32,056ドル(日本円でおよそ340万円)を集めていました。WatchDogのアクターはUPX圧縮されたGo言語バイナリによるクラウドでの効率が高いクリプトジャックマルウェアを使います。それにより、Windows/Linuxの両オペレーティングシステムにGoプラットフォームがインストールされていればどちらのオペレーティングシステムでも侵害できるようにしているのです。現時点では、WatchDogマイニングインフラストラクチャには18個のIPアドレスと7個のドメインが含まれていることがわかっています。これらの悪意のあるエンドポイントは、WatchDogマイニングツールキットのダウンロードに使用される少なくとも125のURLアドレスをいずれかの時点でホストしていたか現在もホストしています。さらに、スキャンとエクスプロイトを行うバイナリのnetworkmanagerには、32個のRCE関数を含む33の固有のエクスプロイトがロードされています。WatchDogマイニングオペレーションは非常に大規模で、少なくとも476台の侵害されたシステムが常にマイニングしていると推定されます。

WatchDogのオペレーターが熟練したコーダーであること、マイニングオペレーションにこれまでさほど注目を集めずにきたことは明らかです。現時点で追加のクラウド侵害アクティビティ(つまり、クラウドプラットフォームのIAM資格情報、アクセスID、またはキーの窃取)の兆候はありませんが、クラウドアカウントはさらなる侵害を受ける可能性はあります。というのも、これらの攻撃者にはクリプトジャックソフトウェアの植え付けの段階で窃取済みのルートアクセスや管理者アクセスがあるので、そうした侵害済みクラウドシステム上でIAM関連情報も見つける可能性が高いからです。

パロアルトネットワークスのPrisma Accessは、PAN-OS経由で、WatchDogの18個のIPアドレス、7個のドメイン、関連URLアドレスをそれぞれ検出するように構成されています。Prisma Cloudもまた、Prisma Cloud Compute Defenderがインストールされたクラウド環境で、WatchDogマイナーによる悪意のあるXMRigプロセスが利用された場合、それを検出します。

IoC

IPアドレス
39.100.33[.]209
45.153.240[.]58
45.9.148[.]37
93.115.23[.]117
95.182.122[.]199
106.15.74[.]113
107.173.159[.]206
146.71.79[.]230
185.181.10[.]234
185.232.65[.]124
185.232.65[.]191
185.232.65[.]192
185.247.117[.]64
198.98.57[.]187
199.19.226[.]117
204.44.105[.]168
205.209.152[.]78
208.109.11[.]21
ドメイン
de.gengine[.]com.de
de.gsearch[.]com.de
global.bitmex[.]com.de
ipzse[.]com
py2web[.]store
sjjjv[.]xyz
us.gsearch[.]com.de
URLアドレス
hxxp://107.173.159[.]206:8880/tatavx1hym9z928m/bsh.sh
hxxp://107.173.159[.]206:8880/tatavx1hym9z928m/config.json
hxxp://107.173.159[.]206:8880/tatavx1hym9z928m/sysupdate
hxxp://107.173.159[.]206:8880/tatavx1hym9z928m/update.sh
hxxp://146.71.79[.]230/363A3EDC10A2930DVNICE/config.json
hxxp://146.71.79[.]230/363A3EDC10A2930DVNICE/networkservice
hxxp://146.71.79[.]230/363A3EDC10A2930DVNICE/sysguard
hxxp://146.71.79[.]230/363A3EDC10A2930DVNICE/sysupdate
hxxp://146.71.79[.]230/363A3EDC10A2930DVNICE/update.sh
hxxp://176.123.10[.]57/cf67356/config.json
hxxp://176.123.10[.]57/cf67356/networkmanager
hxxp://176.123.10[.]57/cf67356/newinit.sh
hxxp://176.123.10[.]57/cf67356/phpguard
hxxp://176.123.10[.]57/cf67356/zzh
hxxp://185.181.10[.]234/E5DB0E07C3D7BE80V520/config.json
hxxp://185.181.10[.]234/E5DB0E07C3D7BE80V520/networkservice
hxxp://185.181.10[.]234/E5DB0E07C3D7BE80V520/sysguard
hxxp://185.181.10[.]234/E5DB0E07C3D7BE80V520/sysupdate
hxxp://185.181.10[.]234/E5DB0E07C3D7BE80V520/update.sh
hxxp://185.232.65[.]124/update.sh
hxxp://185.232.65[.]191/cf67356/config.json
hxxp://185.232.65[.]191/cf67356/newinit.sh
hxxp://185.232.65[.]191/cf67356/zzh
hxxp://185.232.65[.]191/config.json
hxxp://185.232.65[.]191/trace
hxxp://185.232.65[.]191/update.sh
hxxp://185.232.65[.]192/cf67356/networkmanager
hxxp://185.232.65[.]192/cf67356/phpguard
hxxp://185.232.65[.]192/config.json
hxxp://185.232.65[.]192/trace
hxxp://185.247.117[.]64/cf67356/config.json
hxxp://185.247.117[.]64/cf67356/networkmanager
hxxp://185.247.117[.]64/cf67356/newdat.sh
hxxp://185.247.117[.]64/cf67356/phpguard
hxxp://185.247.117[.]64/cf67356/phpupdate
hxxp://198.98.57[.]187/config.json
hxxp://198.98.57[.]187/trace
hxxp://198.98.57[.]187/update.sh
hxxp://204.44.105[.]168:66/config.json
hxxp://204.44.105[.]168:66/networkmanager
hxxp://204.44.105[.]168:66/newdat.sh
hxxp://204.44.105[.]168:66/phpguard
hxxp://204.44.105[.]168:66/phpupdate
hxxp://205.209.152[.]78:8000/sysupdate
hxxp://205.209.152[.]78:8000/update.sh
hxxp://209.182.218[.]161:80/363A3EDC10A2930D/config.json
hxxp://209.182.218[.]161:80/363A3EDC10A2930D/networkservice
hxxp://209.182.218[.]161:80/363A3EDC10A2930D/sysguard
hxxp://209.182.218[.]161:80/363A3EDC10A2930D/sysupdate
hxxp://209.182.218[.]161:80/363A3EDC10A2930D/update.sh
hxxp://39.100.33[.]209/b2f628/config.json
hxxp://39.100.33[.]209/b2f628/newinit.sh
hxxp://39.100.33[.]209/b2f628/zzh
hxxp://39.100.33[.]209/b2f628fff19fda999999999/is.sh
hxxp://45.153.240[.]58/N3DN0E09C5D9BU70V1720/config.json
hxxp://45.153.240[.]58/N3DN0E09C5D9BU70V1720/networkservice
hxxp://45.153.240[.]58/N3DN0E09C5D9BU70V1720/sysguard
hxxp://45.153.240[.]58/N3DN0E09C5D9BU70V1720/sysupdate
hxxp://45.153.240[.]58/N3DN0E09C5D9BU70V1720/update.sh
hxxp://45.9.148[.]37/cf67356a3333e6999999999/1.0.4.tar.gz
hxxp://45.9.148[.]37/cf67356a3333e6999999999/config.json
hxxp://45.9.148[.]37/cf67356a3333e6999999999/is.sh
hxxp://45.9.148[.]37/cf67356a3333e6999999999/networkmanager
hxxp://45.9.148[.]37/cf67356a3333e6999999999/newdat.sh
hxxp://45.9.148[.]37/cf67356a3333e6999999999/phpguard
hxxp://45.9.148[.]37/cf67356a3333e6999999999/phpupdate
hxxp://47.253.42[.]213/b2f628/config.json
hxxp://47.253.42[.]213/b2f628/newinit.sh
hxxp://47.253.42[.]213/b2f628/zzh
hxxp://82.202.66[.]50/cf67356/config.json
hxxp://82.202.66[.]50/cf67356/networkmanager
hxxp://82.202.66[.]50/cf67356/newinit.sh
hxxp://82.202.66[.]50/cf67356/phpguard
hxxp://82.202.66[.]50/cf67356/zzh
hxxp://83.97.20[.]90/cf67356/config.json
hxxp://83.97.20[.]90/cf67356/networkmanager
hxxp://83.97.20[.]90/cf67356/newinit.sh
hxxp://83.97.20[.]90/cf67356/phpguard
hxxp://83.97.20[.]90/cf67356/zzh
hxxp://93.115.23[.]117/N3DN0E09C5D9BU70V1720/config.json
hxxp://93.115.23[.]117/N3DN0E09C5D9BU70V1720/networkservice
hxxp://93.115.23[.]117/N3DN0E09C5D9BU70V1720/sysguard
hxxp://93.115.23[.]117/N3DN0E09C5D9BU70V1720/sysupdate
hxxp://93.115.23[.]117/N3DN0E09C5D9BU70V1720/update.sh
hxxp://95.182.122[.]199/E5DB0E07C3D7BE80V52/config.json
hxxp://95.182.122[.]199/E5DB0E07C3D7BE80V52/networkservice
hxxp://95.182.122[.]199/E5DB0E07C3D7BE80V52/Saltmin.sh
hxxp://95.182.122[.]199/E5DB0E07C3D7BE80V52/sysupdate
hxxp://95.182.122[.]199/init.sh
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/config.json
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/is.sh
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/networkmanager
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/newdat.sh
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/phpguard
hxxp://global.bitmex[.]com[.]de/cf67355a3333e6/phpupdate
hxxp://py2web[.]store/7356a3333e6999999999/networkmanager
hxxp://py2web[.]store/7356a3333e6999999999/phpguard
hxxp://py2web[.]store/cf67356/config.json
hxxp://py2web[.]store/cf67356/newinit.sh
hxxp://py2web[.]store/cf67356/zzh
hxxp://xmr.ipzse[.]com:66/bd.sh
hxxp://xmr.ipzse[.]com:66/config.json
hxxp://xmr.ipzse[.]com:66/is.sh
hxxp://xmr.ipzse[.]com:66/networkmanager
hxxp://xmr.ipzse[.]com:66/newdat.sh
hxxp://xmr.ipzse[.]com:66/phpguard
hxxp://xmr.ipzse[.]com:66/phpupdate
hxxp://xmr.ipzse[.]com:66/rs.sh
hxxps://de.gengine[.]com[.]de/api/config.json
hxxps://de.gengine[.]com[.]de/api/networkservice
hxxps://de.gengine[.]com[.]de/api/sysguard
hxxps://de.gengine[.]com[.]de/api/sysupdate
hxxps://de.gengine[.]com[.]de/api/update.sh
hxxps://de.gsearch[.]com[.]de/api/config.json
hxxps://de.gsearch[.]com[.]de/api/networkservice
hxxps://de.gsearch[.]com[.]de/api/sysguard
hxxps://de.gsearch[.]com[.]de/api/sysupdate
hxxps://de.gsearch[.]com[.]de/api/update.sh
hxxps://sjjjv[.]xyz/sysupdate
hxxps://sjjjv[.]xyz/update.sh
hxxps://us.gsearch[.]com[.]de/api/config.json
hxxps://us.gsearch[.]com[.]de/api/networkservice
hxxps://us.gsearch[.]com[.]de/api/sysguard
hxxps://us.gsearch[.]com[.]de/api/sysupdate
hxxps://us.gsearch[.]com[.]de/api/update.sh
ファイル
SHA-256値 ファイル名
0a48bd0d41052c1e3138d558fc06ebde8d6f15b8d866200b8f00b214a73eb5b9 config.json
0c4aa6afd2a81fd15f3bd65adcbd4f649fbc58ef12dd2d528125435169555901 update.sh
1f65569b77f21f47256db339700b4ff33b7570e44e1981b5c213b7b2e65b0f6c networkmanager
2b52288383588f65803a5dc9583171103be79f0b196d01241b5cd3a8cf69b190 networkservice
2eeac2b9577047a9eef2d164c13ace5e826ac85990a3a915871d6b0c2fc8fe67 update.sh
2f642efdf56b30c1909c44a65ec559e1643858aaea9d5f18926ee208ec6625ed update.sh
37492d1897f77371f2eb431b9be7c861b81e97f04a091d8c6d63719171eda2ac rs.sh
3ab7cf786eeb23ebd11e86e0fc48b0a9b37a427d5d730d774c9ed8d98a925c6f sysupdate
43d7b29668786731f1bbbb3ae860487e84604195b186c1b7b253f99156d7f57a sysguard
49366ae4766492d94136ca1f715a37554aa6243686c66bf3c6fbb9da9cb2793d newinit.sh
51de345f677f46595fc3bd747bfb61bc9ff130adcbec48f3401f8057c8702af9 tar.gz
55c92d64ffa9d170e340e0528dc8ea1fa9be98f91db891869947c5b168a728c8 networkmanager
55dd539d8fe94648294e91df89b005f1dba330b432ceda25775963485bae7def config.json
67d0f77adf98ac34a6db78110c78652a9b7f63e22ae5ab7df4f57d3413e48822 phpguard
68cedf2a018c0830655dc9bb94aadf6492ab31196cbc83ceb44defae0a02d3dc config.json
6a7109481e113fd92ff98534e780f47a32b64bfa5692f7bd7da33c84033a9028 sysguard
758dbfda2b7d2e97caba294089c4c836ab447d7c9ceef510c667526fd873e161 phpguard
80b1a70d7ec5d1944787afff3c2feac3aa40ec8c64177886481d96623bc786bf config.json
818c16d1921572ffee6853c16c5c9158d2f217b6adbb5154cbb7daf945db493c update.sh
82815c61402cfc0edd6ce3be37848259711ef07e3391e74c85fbdaa676d95c0c is.sh
849f86a8fd06057eeb1ae388789881516239282dd4cb079b8281f995035874e1 newinit.sh
895e994dafaa00009a46f3b56ca0d563e066a14e77f5030b1331fc9b3f9f6478 networkservice
96fe63c25e7551a90051431aeddb962f05d82b7dd2940c0e8e1282273ba81e22 newinit.sh
a322dc6af6fed1326b04ec966e66b68dd8ef22374edd286569710afc65ccc741 newinit.sh
ac719447894b2f5029f493c7395d128f710a3ba7b31c199558f3ee00fb90ea12 networkmanager
ad05d09e6ed4bd09fe1469e49885c5169458635a1a33f2579cb7caa221b43fce newdat.sh
b6a5790a9bfaf159af68c4dbb09de9c2c0c2371c886fdb28223d40e6984b1dd7 config.json
bd3506b86452d46d395b38aa807805097da1291c706318b5fe970fe4b20f5406 config.json
c67881c1f05477939b8964ad26f1a467762a19c2c7d1a1656b338d8113ca1ac1 phpguard
c8ca3ab0ae00a1bf197086370ab5994264ac5bc1fcf52b2ddf8c9fcacc4402ff 1.0.4.tar
d54157bb703b360bb911363d9bb483a2ee00ee619d566d033a8c316f06cf26cc zzh
d6cf2d54e3bb564cb15638b58d2dd124ae7acd40e05af42d1bdc0588a8d5211d networkmanager
e3cbb08913493e54d74081349972423444cbc0f4853707b84409131d19cad15b phpguard
e7446d595854b6bac01420378176d1193070ef776788af12300eb77e0a397bf7 sysupdate
ed1e49cb05c375cc1149c349880ed077b6ee75cb7e5c6cae9cbd4bd086950c93 zzh