YouTubeを悪用した、クリプトマイニング(暗号資産の発掘)モジュールを拡散する「Stantinko」

この記事をシェア

サイバー犯罪者が約50万以上のStantinkoボットネットを操り、クリプトマイニングモジュールを拡散していることをESETの研究者が突き止めました。本クリプトマイニングモジュールはYouTubeの正当なチャネルになりすまし分析を妨害して検出を回避しています。本記事では、クリプトマイニングの機能や難読化技術について分析しています。

本記事はESET Japanが提供する「ESETブログ」に掲載された「YouTubeを利用しクリプトマイニング(暗号通貨採掘)を行うStantinkoボットネットを発見」を再編集したものです。

YouTubeを悪用した、クリプトマイニング(暗号資産の発掘)モジュールを拡散する「Stantinko」

Stantinkoボットネットを操る攻撃者は、乗っ取ったコンピューターから利益を得るための新しい手段としてツールセットを拡張しています。少なくとも2012年以降からこのボットネットは活動を開始していることが知られており、主にロシア、ウクライナ、ベラルーシ、カザフスタンのユーザーを標的に、約50万以上のボットネットがクリプトマイニングモジュールを拡散しています。仮想通貨モネロ(Monero)は、2019年には為替レートが50~110米ドルで変動していますが、少なくとも2018年8月からこのボットネットが利益を生み出すために利用されています。Stantinkoボットネットは、それ以前にはクリック詐欺、広告の挿入、ソーシャルネットワーク詐欺、パスワードの盗み出しの攻撃を行っていました。

この記事では、Stantinkoのクリプトマイニングモジュールについて説明し、その機能について分析します。

このクリプトマイニングモジュールの最も注目すべき機能は、分析を妨害して検出を回避する難読化です。ソースレベルで無作為に難読化し、Stantinkoのオペレーターが新しい標的毎にこのモジュールをコンパイルしていることから、モジュールの各検体は一意になっています。

今回、このモジュールの難読化技術について説明し、マルウェアアナリスト向けの別の記事でこれらの手法のいくつかに対処するアプローチについて提案します。

Stantinkoは絶えず新しい機能を開発し、独自の難読化ツールとモジュールをさらに巧妙にしています。これらツールやモジュールは高度に難読化されていることから、追加された軽微な機能改善や変更を追跡するのは困難です。そのため、過去の検体と比較して重要な変更についてのみ説明しています。この記事では、現在のクリプトマイニングモジュールについてのみ説明します。

オープンソースのクリプトマイナーの改変

Stantinkoのクリプトマイニングモジュールは、仮想通貨を採掘するため、乗っ取ったマシンのリソースのほとんどを使い果たします。このモジュールは、オープンソースのクリプトマイナーであるxmr-stakを大きく改変したものです。検出を回避する目的で、すべての不要な文字列や特定の機能全体が削除されています。残った文字列や機能は高度に難読化されています。ESETのセキュリティ製品は、このマルウェアをWin{32,64}/CoinMiner.Stantinkoとして検出します。

マイニングプロキシの使用

CoinMiner.Stantinkoはマイニングプールと直接通信するわけではありません。YouTubeの動画の説明文から取得されるIPアドレスのプロキシを介して通信します。YouTubeの動画の説明文にデータを隠す同様の手法は、銀行を標的とするマルウェアであるCasbaneiroでも使用されています。
Casbaneiroが使用するYouTubeは正当なチャネルのように偽装するテクニックにはるかに優れていますが、C&Cを暗号化して保存するという目的は同じです。

これらの動画の説明文は、16進形式のマイニングプロキシのIPアドレスで構成される文字列になっています。たとえば、図1に示すYouTube動画には、「03101f1712dec626」という説明がありますが、これは、16進形式の2つのIPアドレスです。03101f17は、ドットで区切られた4つの10進数である3.16.31[.]23に対応し、12dec626は18.222.198[.]38に対応します。このブログを執筆した時点では、この形式はわずかに調整されています。現在、IPアドレスは「!!!!」で囲まれており、構文解析処理が非常に簡単になっています。これにより、YouTube動画のHTML構造が変更されてパーサーが機能しなくなる変更も防止しています。

図1. マイニングプールと通知するためのクリプトマイニングモジュールのIPアドレスを提供するYouTube動画の説明文の例

以前のバージョンでは、YouTubeのURLはCoinMiner.Stantinkoバイナリにハードコーディングされていました。現在は、このモジュールはコマンドラインのパラメータとして動画の識別子を受け取ります。このパラメータは、https://www.youtube.com/watch?v=%PARAM%の形式でYouTubeのURLを作成するために使用されます。クリプトマイニングモジュールは、バッチファイル(ESETではこのバッチファイルをまだ入手していません)を介して、%TEMP%\%RANDOM%\%RANDOM_GUID%.dllのフォームのローカルファイルシステムの場所からロードされたモジュールを使用して、StantinkoのBEDSコンポーネントまたはrundll32.exe のいずれかによって実行されます。

ESETは、YouTubeに対してこの不正行為を通知しており、これらの動画を含むすべてのチャンネルは削除されています。

クリプトマイニングの機能

今回の分析では、クリプトマイニングモジュールを、異なる機能がある4つの論理部分に分割しました。メイン部分は実際のクリプトマイニングを実行します。モジュールの他の3つの部分は次の追加機能を実行します。

  • 他の(競合する)クリプトマイニングアプリケーションを停止する
  • セキュリティソフトウェアを検出する
  • PCがバッテリーで駆動している場合、またはタスクマネージャーの実行が検出された場合、ユーザーに気づかれることがないように、クリプトマイニング機能を一時停止する

クリプトマイニング

クリプトマイニング機能の中核となるのは、ハッシュ化のプロセスとプロキシとの通信です。マイニングプロキシのリストを取得する方法は上記で説明しています。CoinMiner.Stantinkoは、稼動していることが確認できた最初のマイニングプロキシとの通信を開始します。

プロキシとの通信はTCPで行われます。通信は、円周率の最初の26文字(小数点を含む3,141592653589793238462643)で構成されるキーを使用してRC4で暗号化され、base64でエンコードされます。ESETが確認したすべての検体で同じキーが使用されています。

ハッシュアルゴリズムのコードは、通信を開始する時にマイニングプロキシからダウンロードされ、メモリにロードされます。メモリには直接ロードされる場合もありますが、過去のバージョンでは、最初にディスクにドロップされるライブラリlibcr64.dllからロードされる場合もありました。

実行ごとにハッシュコードをダウンロードする仕組みによって、Stantinkoを悪用するグループはこのコードをオンザフライで変更することが可能です。たとえば、既存の仮想通貨のアルゴリズムの調整に対応したり、実行時に最も収益性の高い仮想通貨を採掘するように、他の仮想通貨を採掘するように切り替えたりすることができます。モジュールの中核部分をリモートサーバーからダウンロードし、メモリに直接ロードする仕組みの主な利点は、コードの中核部分がディスクに保存されないことです。これらのアルゴリズムのパターンは、セキュリティ製品によって簡単に検出されることから、過去のバージョンにはなかった今回の調整は、検出を困難にすることを狙ったものでしょう。

ESETが分析したStantinkoのクリプトマイニングモジュールのすべてのインスタンスは、モネロを採掘していました。これは、マイニングプロキシとハッシュアルゴリズムによって提供されるジョブから推測しました。たとえば、図2は、プロキシの1つによって送信されたジョブを示しています。

{"error":null,"result":{"status":"OK"}} {"method":"job","params":{"blob":"0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018","job_id":"281980000000000a10","target":"67d81500","height":1815711}}

図2.マイニングプールプロキシから受信したマイニングジョブの例

使用されたハッシュアルゴリズムを分析したところ、CryptoNight Rが使用されていることがわかりました。このアルゴリズムを使用する仮想通貨は複数あるため、これだけでは、ある程度絞り込むことができるだけであり、仮想通貨を特定することはできません。提供されたジョブから、ブロックチェーンのブロックの高さが当時1815711であったことが判明したので、専用ブロックエクスプローラーでこの高さとCryptoNight Rを使用して仮想通貨を調べたところ、モネロであることが分かりました。文字列0b0bbfdee1e50567042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664000000a1c8ee5c185ed2661daab9d0c454fd40e9f53f0267fe391bdb4eb4690395deb36018を解剖したところ、前のブロック(67042dcfdfe96018227f25672544521f8ee2564cf8b4c3139a6a88c5f0b32664)のハッシュとタイムスタンプ(1555590859)は、実際に1815711の高さでモネロのブロックチェーンと一致することがわかりました。モネロのソースコードにあるジェネレーター機能を調査すると、ブロブの構造を把握できます。このジェネレーター機能によって、前のブロックのハッシュとタイムスタンプの両方を含むブロックヘッダーと呼ばれる別の構造が明らかになります。

CoinMiner.Stantinkoの他の部分とは異なり、このハッシュアルゴリズムは難読化されていません。難読化するとハッシュ計算の速度が大幅に低下し、全体的なパフォーマンスと収益性が低下するためです。しかし、このマルウェアの作成者は検出につながる文字列やアーティファクトは残さないようにしています。

他のクリプトマイナーの停止

このマルウェアは、他のクリプトマイナーを検索し、実行中のプロセスを列挙します。競合するクリプトマイナーが見つかると、Stantinkoはすべてのスレッドを一時停止します。

CoinMiner.Stantinkoは、特定の文字列または文字列の組み合わせが含まれる場合、そのプロセスをクリプトマイナーと見なしますが、その対象は検体によって異なります。たとえば以下の文字列があると、クリプトマイナーと判断します。

  • minerd
  • minergate
  • xmr
  • cpservice
  • vidserviceとstratum+tcp://
  • stratum://
  • -uとpool
  • "-uとpool
  • "-uとxmr
  • -encodedcommandとpowershell.exe
  • --donate-level
  • regsvr32、/n、/s、および/q
  • application dataとsvchost.exe
  • appdataとsvchost.exe

これらの文字列は、https://github.com/pooler/cpuminer、https://minergate.com/、https://github.com/xmrigの正規のクリプトマイナーを示しています。さらに、興味深いことに、Stantinkoモジュールがベースとしているhttps://github.com/fireice-uk/xmr-stakも対象になっています。これらの文字列は、暗号化機能が含まれる各種のマルウェア検体にも関連します。

興味深いのは、Stantinkoのオペレーターは、過去に競合するコードを削除しようとしたことがわかっていることです。彼らは、競合するコードを除外するために組み込みのスクリプト言語で記述されたスクリプトを組み込んだ正規のAVZ Antiviral Toolkitを利用していました。

検出の防止

CoinMiner.Stantinkoは、マシンに電源が接続されてないことを検出すると、採掘を一時的に停止します。これは、ノートブックコンピューターを対象とした機能であり、バッテリーが急速に消耗することを防ぎ、ユーザーにクリプトマイニングを気づかれることがないようにするためです。

また、タスクマネージャーアプリケーション(procexp64.exe、procexp.exe、またはtaskmgr.exeという名前のプロセス)の実行が検出された場合にも、採掘を一時的に中断します。

また、マルウェアは実行中のプロセスをスキャンして、セキュリティソフトウェアとタスクマネージャーを検出します。プロセス名のCRC-32を計算し、CRC-32チェックサムのハードコーディングされたリストと照合します。このチェックサムは付録に記載しています。一般に、これらのセキュリティ製品のプロセス名はバイナリに含まれていないため、この手法は検出を回避するのに役立ち、プロセス名を直接追加しないことで、ステルス性が強化されています。また、アナリストがこれらのハッシュを解読する必要があるため、マルウェアの作成者が何を求めているかを見つけることも難しくなります。これは技術的にはパスワードのクラックと同じ問題です。ただし、既知のプロセス名のリストを使用すれば、通常は、正確な名前を十分に判別できます。

CRC-32との一致が見つかると、CRCはログファイル(api-ms-win-crt-io-l1-1-0.dll)に書き込まれます。このモジュールにはログファイルに関連する他の機能がないため、ESETがこれまで確認したことのないStantinkoの別のコンポーネントによってこのログファイルは後で抽出されると考えられます。

難読化

クリプトマイニングの機能に加えて、検出を回避して分析を防止するCoinMiner.Stantinkoの難読化技術も注目に値します。これらの手法のいくつかは独自のものであり、フォローアップ記事で今後詳細に説明します。

結論

ESETの今回の調査結果は、Stantinkoを操る犯罪者が、管理下にあるボットネットをさらに活用するべく、拡大していることを示唆しています。このサイバー犯罪者集団は、過去にも、他の犯罪者に販売することを目的に、サーバーの認証情報を大量の収集するためJoomlaやWordPressのWebサイトに対して独自の分散型のディクショナリベースの攻撃を仕掛けています。

このクリプトマイニングモジュールはリモートから管理されており、少なくとも2018年8月以降から拡散され、このブログの執筆時点ではまだ攻撃は継続しています。これは、このサイバー犯罪者集団が利益を上げるために新機能を追加して拡張を続けていることを示しています。このモジュールは、標準の暗号化機能に加えて、いくつかの興味深い難読化技術を採用しています。今後の記事で、この難読化の手法といくつかの対策について紹介する予定です。

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

ESETの検出名

Win32/CoinMiner.Stantinko
Win64/CoinMiner.Stantinko

SHA-1

1,500ハッシュ以上の完全なリストをESETのGitHubリポジトリから入手できます。

00F0AED42011C9DB7807383868AF82EF5454FDD8
01504C2CE8180D3F136DC3C8D6DDDDBD2662A4BF
0177DDD5C60E9A808DB4626AB3161794E08DEF74
01A53BAC150E5727F12E96BE5AAB782CDEF36713
01BFAD430CFA034B039AC9ACC98098EB53A1A703
01FE45376349628ED402D8D74868E463F9047C30

ファイル名

api-ms-win-crt-io-l1-1-0.dll
libcr64.dll
C:\Windows\TEMP\%RANDOM%\%RANDOM_GUID%.dll

ミューテックス名とRC4キー

“3,141592653589793238462643”

マイニングプロキシの構成データが含まれるYouTubeのURL

  • https://www.youtube[.]com/watch?v=kS1jXg99WiM
  • https://www.youtube[.]com/watch?v=70g4kw2iRGo
  • https://www.youtube[.]com/watch?v=cAW1xEpyr7Y
  • https://www.youtube[.]com/watch?v=6SSKQdE5Vjo
  • https://www.youtube[.]com/watch?v=fACKZewW22M
  • https://www.youtube[.]com/watch?v=FDQOa5zCv3s
  • https://www.youtube[.]com/watch?v=TpyOURRvFmE
  • https://www.youtube[.]com/watch?v=2fpiR4NIpsU
  • https://www.youtube[.]com/watch?v=TwnD0Kp_Ohc
  • https://www.youtube[.]com/watch?v=wJsbj8zPPNs

マイニングプロキシのIPアドレス

  • 3.16.150[.]123
  • 3.16.152[.]201
  • 3.16.152[.]64
  • 3.16.167[.]92
  • 3.16.30[.]155
  • 3.16.31[.]23
  • 3.17.167[.]43
  • 3.17.23[.]144
  • 3.17.25[.]11
  • 3.17.59[.]6
  • 3.17.61[.]161
  • 3.18.108[.]152
  • 3.18.223[.]195
  • 13.58.182[.]92
  • 13.58.22[.]81
  • 13.58.77[.]225
  • 13.59.31[.]61
  • 18.188.122[.]218
  • 18.188.126[.]190
  • 18.188.249[.]210
  • 18.188.47[.]132
  • 18.188.93[.]252
  • 18.191.104[.]117
  • 18.191.173[.]48
  • 18.191.216[.]242
  • 18.191.230[.]253
  • 18.191.241[.]159
  • 18.191.47[.]76
  • 18.216.127[.]143
  • 18.216.37[.]78
  • 18.216.55[.]205
  • 18.216.71[.]102
  • 18.217.146[.]44
  • 18.217.177[.]214
  • 18.218.20[.]166
  • 18.220.29[.]72
  • 18.221.25[.]98
  • 18.221.46[.]136
  • 18.222.10[.]104
  • 18.222.187[.]174
  • 18.222.198[.]38
  • 18.222.213[.]203
  • 18.222.253[.]209
  • 18.222.56[.]98
  • 18.223.111[.]224
  • 18.223.112[.]155
  • 18.223.131[.]52
  • 18.223.136[.]87
  • 18.225.31[.]210
  • 18.225.32[.]44
  • 18.225.7[.]128
  • 18.225.8[.]249
  • 52.14.103[.]72
  • 52.14.221[.]47
  • 52.15.184[.]25
  • 52.15.222[.]174

MITREのATT&CK手法

手段 ID 名称 説明
実行 T1085 Rundll32 このモジュールはrundll32.exeによって実行される場合があります。
T1035 サービスの実行 このマルウェアはサービスとして実行される場合があります。
防御システムの回避 T1140 ファイルまたは情報の難読化の解除/デコード このモジュールは、実行処理中にコード内の文字列の難読化を解除します。
T1027 難読化されたファイルまたは情報 このモジュールは、コードと文字列を難読化して、分析と検出を困難にします。
T1102 Webサービス このマルウェアは、YouTube動画の説明文から構成データを取得します。
検出 T1063 セキュリティソフトウェアの検出 このマルウェアは、実行されているセキュリティ製品のリストを取得します。
C&C T1090 接続プロキシ このモジュールは、マイニングプールとの通信でプロキシを使用します。
T1008 フォールバックチャネル 最初のプロキシにアクセスできない場合、モジュールは別に利用可能なマイニングプロキシに接続します。
T1095 標準の非アプリケーションレイヤープロトコル このマルウェアは、通信にTCPを使用します。
T1043 一般的に使用されるポート マルウェアはポート443で通信します。
T1132 データのエンコード モジュールは暗号化してから、base64でネットワークトラフィックをエンコードします。
T1032 標準暗号化プロトコル モジュールは、RC4でトラフィックを暗号化します。
T1071 標準アプリケーションレイヤープロトコル HTTPSを介してYouTube動画の説明文から構成データを取得します。
影響 T1496 リソースのハイジャック このモジュールは、仮想通貨をマイニングします。

付録

CoinMiner.StantinkoによってチェックされるCRC-32チェックサムと、対応するファイル名を以下に示します。

0xB18362C7 afwserv.exe
0x05838A63 ashdisp.exe
0x36C5019C ashwebsv.exe
0xB3C17664 aswidsagent.exe
0x648E8307 avastsvc.exe
0x281AC78F avastui.exe
0xAA0D8BF4 avgcsrva.exe
0x71B621D6 avgcsrvx.exe
0x7D6D668A avgfws.exe
0x1EF12475 avgidsagent.exe
0x010B6C80 avgmfapx.exe
0x6E691216 avgnsa.exe
0xB5D2B834 avgnsx.exe
0x36602D00 avgnt.exe
0x222EBF57 avgrsa.exe
0xF9951575 avgrsx.exe
0x2377F90C avgsvc.exe
0x37FAB74F avgsvca.exe
0xEC411D6D avgsvcx.exe
0x0BED9FA2 avgtray.exe
0x168022D0 avguard.exe
0x99BA6EAA avgui.exe
0x7A77BA28 avguix.exe
0x0D22F74A avgwdsvc.exe
0x98313E09 avira.servicehost.exe
0x507E7C15 avira.systray.exe
0xFF934F08 avp.exe
0x9AC5F806 avpui.exe
0xBD07F203 avshadow.exe
0x64FDC22A avwebg7.exe
0x0BC69161 avwebgrd.exe
0xBACF2EAC cureit.exe
0x8FDEA9A9 drwagntd.exe
0xE1856E76 drwagnui.exe
0xF9BF908E drwcsd.exe
0xC84AB1DA drwebcom.exe
0x183AA5AC drwebupw.exe
0xAC255C5E drwupsrv.exe
0x23B9BE14 dwantispam.exe
0xDAC9F2B7 dwarkdaemon.exe
0x7400E3CB dwengine.exe
0x73982213 dwnetfilter.exe
0x1C6830BC dwscanner.exe
0x86D81873 dwservice.exe
0xB1D6E120 dwwatcher.exe
0xD56C1E6F egui.exe
0x69DD7DB4 ekrn.exe
0xFB1C0526 guardgui.exe
0x5BC1D859 ipmgui.exe
0x07711AAE ksde.exe
0x479CB9C4 ksdeui.exe
0x6B026A91 nod32cc.exe
0xCFFC2DBB nod32krn.exe
0x59B8DF4D nod32kui.exe
0x998B5896 procexp.exe
0xF3EEEFA8 procexp64.exe
0x81C16803 sched.exe
0x31F6B864 spideragent.exe
0x822C2BA2 taskmgr.exe
0x092E6ADA updrgui.exe
0x09375DFF wsctool.exe
この記事をシェア

ランサムウェアのセキュリティ対策に

サイバーセキュリティ
情報局の最新情報を
チェック!