この数か月間、サーバーリーズンのNocturnusチームはEvilnumという集団の活動を調査してきました。2018年に初めて登場して以降、Evilnumはさまざまな活動を続けており、最近のレポートによると、JavaScriptとC#で記述された各種コンポーネントおよびGolden ChickensというMalware-as-a-Service(MaaS=クラウドサービスとして提供されるマルウェア)プロバイダから購入したツールを使用しています。

広範囲に実施されるフィッシング作戦とは対照的に、この集団の作戦は標的をかなり絞り込んでいる模様です。Know Your Customer(KYC)規制に従って取引が実行されるときに顧客から提供される情報を含む文書を悪用することにより、フィンテック市場を標的としています。最初の発見以来、この集団の主な標的は英国とEU各国のさまざまな企業でした。

数週間前から、Nocturnusチームは、以前に確認された戦術からの注目すべき変更点を含む、同集団による新しい活動を確認しています。これらの亜種には、感染チェーンと持続性に関連する変更、時間経過とともに拡大する新しいインフラストラクチャ、NocturnusチームでPyVil RATと呼んでいるPythonスクリプトで記述された新しいリモートアクセス型トロイの木馬(RAT)の使用が含まれています。

PyVil RATにはさまざまな機能があり、攻撃者がデータを漏洩させたり、キーロギングやスクリーンショットを実行したり、資格情報を窃取するためにLaZagneなどのツールを追加で展開させさせたりすることが可能です。

本稿では、Evilnum集団の最近の活動について詳しく解説し、その新しい感染チェーンとツールを探ります。

主な調査結果

  • Evilnum:サイバーリーズンのNocturnusチームは、さまざまなツールを用いて、過去2年間活動を続けているEvilnum集団の作戦を追跡しています。
  • 標的は金融業界:この集団の標的はフィンテック企業であることが判明しており、感染の足掛かりとしてKnow Your Customer(KYC)手続きを悪用しています。
  • 新しいトリック:この調査では、以前に確認された感染チェーン、持続性、インフラストラクチャ、ツールとは、以下の点が異なっていることが判明しました。
  • 正規の実行可能ファイルの改変バージョンを、セキュリティツールによる検出を回避するために採用。
  • 感染チェーンをバックドア機能を持つJavaScriptのトロイの木馬からマルチプロセスのペイロード配信手順にシフト。
  • PyVil RATと呼ばれる新たに発見されたRAT。これはPythonスクリプトで記述されており、py2exeでコンパイルされ、機能拡張のために新しいモジュールをダウンロードする機能を備えています。

攻撃者集団の概要

Evilnumは、主に英国およびEU諸国に拠点を置くフィンテック企業が標的であると報告されています。この集団のメインの目的は、感染した標的をスパイし、パスワード、文書、ブラウザのCookie、電子メールの資格情報などの情報を窃取することです。

過去の報告にあるように、Evilnumは独自のツール以外にGolden Chickensのツールを展開しているケースもあることが確認されています。Golden Chickensは、FIN6やCobalt Groupといった集団による使用が確認されているMalware-as-a-Service(MaaS)プロバイダです。Evilnumが使用しているツールには、More_eggsTerraPreterTerraStealerTerraTVなどがあります。

Evilnumの活動が最初に確認されたのは2018年、当時は悪名高いJavaScriptのトロイの木馬の最初のバージョンを使用していました。このスクリプトは、GitHub、DigitalPoint、Redditなどのサイトから、この目的のために作成された特定のページをクエリすることにより、C2アドレスを抽出します。この手法により、リクエストは正当な既知のサイトに対して行われるため、攻撃者は通信をマスクしたまま、展開されたエージェントのC2アドレスを簡単に変更できます。

その後、Evilnumはさまざまな攻撃で何度も言及されてきましたが、そのたびに、ツールセットを新しい機能でアップグレードとともに、新しいツールを武器に追加しています。

典型的なEvilnumの初期感染ベクターは、運転免許証、クレジットカード、公共料金の請求書など、さまざまな文書の写真に偽装したLNKファイルを含むZIPアーカイブの配信を目的としたスピアフィッシングメールから始まります。これらの文書は窃取されたものである可能性が高く、実際の個人の所有物です。

LNKファイルを開くとJavaScriptのトロイの木馬が展開されます。これによりLNKファイルが実際の画像ファイルに置き換えられ、この操作全体がユーザーから見えなくなります。

本稿で説明するように、現在までにJavaScriptのトロイの木馬は6つの亜種が出回っており、それぞれにわずかな変更が加えられていますが、コア機能は変わっていません。JavaScriptエージェントには、ファイルのアップロードとダウンロード、Cookieの窃取、ウイルス対策情報の収集、コマンドの実行などの機能があります。

以前の調査で説明したように、JavaScriptコンポーネントに加え、この集団は以前のJavaScriptコンポーネントと同様の機能をもつC#のトロイの木馬を展開していることが確認されています。


以前の感染チェーン

新しい感染チェーン

以前、Evilnumの感染チェーンは、画像に偽装したLNKファイルを含むzipアーカイブを配信するスピアフィッシングメールを足掛かりとしていました。これらのLNKファイルは、上記で説明したさまざまなバックドア機能を持つJavaScriptのトロイの木馬を投下します。

最近数週間で、この感染手順の変更が確認されました。まず、zipアーカイブで4つの異なるLNKファイルを配信してJPGファイルに置き換えるのではなく、1つのファイルのみがアーカイブされています。このLNKファイルはPDFに偽装し、その内容には公共料金の請求書、クレジットカードの写真、運転免許証の写真など、いくつかの文書が含まれています。


ZIPのLNKファイル

以前のバージョンと同様に、LNKファイルが実行されると、JavaScriptファイルがディスクに書き込まれて実行され、LNKファイルをPDFに置き換えます。


PDFのKYC文書の例

複数の機能を備えていた以前のバージョンとは異なり、このバージョンのJavaScriptは主にドロッパーとして機能し、C2通信機能を持ちません。このJavaScriptはこの新しい感染チェーンの第一段階であり、Nocturnusチームの研究者がPyVil RATと呼んでいる、Pythonで記述されてpy2exeでコンパイル済みのRATペイロードの配信で次の段階に達します。


初期感染のプロセスツリー

サイバーリーズンでは、プロセスツリーとLNKファイルからのJavaScriptの抽出を可視化することができました。


サイバーリーズンで可視化した初期感染のプロセスツリー

JavaScriptは、END2という文字列を含むすべての行(スクリプトではコメント化されています)を一時フォルダの0.jsという名前のファイルに出力することによって抽出され、LNKは一時フォルダに1.lnkとしてコピーされます。


埋め込まれているJSスクリプトの抽出

JavaScriptファイルは、以前のバージョンと同様のパスを使用してバイナリを投下します(”%localappdata%\\Microsoft\\Credentials\\MediaPlayer\\”)。


JSファイルのスニペット

スクリプトがLNKファイルを実際のPDFに置き換えた後、JSファイルは%localappdata%\Microsoft\Credentials\MediaPlayer\VideoManager\media.jsにコピーされ、再度実行されます。

このスクリプトの2回目の実行では、LNKファイル内に埋め込まれているddpp.exeという名前の実行可能ファイルが抽出され、%localappdata%\Microsoft\Credentials\MediaPlayer\ddpp.exeに保存されます。

マルウェアが持続性を保つためにRunレジストリキーを使用していた以前のバージョンとは異なり、この新しいバージョンでは、Dolby Selector Taskという名前でddpp.exeのスケジュールされたタスクが作成されます。


ddpp.exeのスケジュールされたタスク

このスケジュールされたタスクでは、ペイロード取得の第2段階が開始します。


ダウンローダーのプロセスツリー

サイバーリーズンでは、ペイロードが資格情報をダンプしようとしていることを確認しています。


サイバーリーズンで確認したダウンローダーのプロセスツリー

DDPP.EXE:トロイの木馬型プログラム

実行可能ファイルddpp.exeは、悪意のあるコードを実行するように変更されたバージョンのJava(™) Web Start Launcherである模様です。


ddpp.exeのアイコン

マルウェアの実行可能ファイルとOracleのオリジナルの実行可能ファイルを比較すると、両ファイル間で同様のメタデータを確認できます。一見したところでの大きな違いは、Oracleのオリジナルの実行可能ファイルは署名付きですが、マルウェアには署名がありません。


ddpp.exeファイルのプロパティ


オリジナルのjavaws.exeファイルのプロパティ

Intezerエンジンによると、マルウェアの実行可能ファイルとOracle Corporationの正規ファイルには、共通のコードが大量にあります。


Intezerで分析されたddpp.exeコードの再利用

DDPP.EXEの機能

実行可能ファイルddpp.exeは、感染の次の段階のダウンローダーとして機能します。

これは次の3つの引数を持つスケジュールされたタスクによって実行されます。

  • 感染したマシンのエンコードされたUUID
  • インストールされているウイルス対策製品のエンコードされたリスト
  • 数字の0


ddpp.exeのスケジュールされたタスクの引数

ddpp.exeが実行されると、シェルコードが解凍されます。


ddpp.exeの実行によるシェルコードの受け渡し

シェルコードは、GETリクエストを使用してC2に接続し、上記で説明した3つの受信パラメーターをURIで送信します。次に、マルウェアは、fplayer.exeとしてディスクに保存されて新しいスケジュールされたタスクを使用して実行される、別の暗号化された実行可能ファイルを受信します。


HTTPを介したddpp.exeのC2通信

FPLAYER.EXE

fplayer.exeはもう1つのダウンローダーとして機能します。ダウンロードされたペイロードはfplayer.exeによってメモリにロードされ、ファイルレスRATとして使用されます。ファイルは%localappdata%\microsoft\media player\player\fplayer.exeに保存され、Adobe Update Taskという名前のスケジュールされたタスクで実行されます。


fplayer.exeのスケジュールされたタスク

fplayer.exeもいくつかの引数で実行されます。

  • 感染したマシンのエンコードされたUUID
  • 後の段階でPyVil RATが使用する3つの引数
  • “-m”:スケジュールされたタスクの名前
  • “-f”:PyVil RATに残りの引数を構文解析するように指示
  • “-t”:スケジュールされたタスクをアップデート


fplayer.exeのスケジュールされたタスクの引数

ddpp.exeと同様に、fplayer.exeはStereoscopic 3D Driver Installerの改変バージョンである模様です。


fplayer.exeのアイコン

ここでも、ファイル間で同様のメタデータを確認していますが、Nvidiaのオリジナルの実行可能ファイルは署名付きですが、マルウェアには署名がありません。


fplayer.exeファイルのプロパティ


オリジナルのnvStinst.exeファイルのプロパティ

今回も、IntezerエンジンによるとNvidia Corporationとコードの類似率が高くなっています。


Intezerで分析されたfplayer.exeコードの再利用

fplayer.exeが実行されると、シェルコードが解凍されます。


fplayer.exeの実行によるシェルコードの受け渡し

シェルコードはGETリクエストを使用してC2に接続し、今回はエンコードされたUUIDのみをURIで送信します。fplayer.exeは、%localappdata%\Microsoft\Media Player\Player\devAHJE.tmpとして保存されるもう1つの暗号化された実行可能ファイルを受信することが確認されています。


fplayer.exeのC2通信

このプロセスでは、受信した実行可能ファイルを復号化し、それをメモリにマップして受け渡します。

復号化されたファイルは、コンパイル済みのpy2exe実行可能ファイルです。py2exeは、PythonスクリプトをMicrosoft Windowsの実行可能ファイルに変換するPythonの拡張機能です。

PyVil:新しいPython RAT

py2exe内のPythonコードは、既存のツールを使用したペイロードの逆コンパイルを防ぐために、追加のレイヤーで難読化されています。メモリダンプにより、Pythonコードの第一レイヤーを抽出することができました。コードの最初の部分では、Pythonコードの第二レイヤーをデコードして解凍しています。


難読化解除コードの第一レイヤー

Pythonコードの第二レイヤーでは、メインのRATとインポートされたライブラリをデコードしてメモリにロードします。


コードの第二レイヤーのスニペット:Pythonライブラリの抽出

PyVil RATには、次のようないくつかの機能があります。

  • キーロガー
  • cmdコマンドの実行
  • スクリーンショット
  • 追加機能のPythonスクリプトのダウンロード
  • 実行可能ファイルの投下とアップロード
  • SSHシェルを開く
  • 以下の情報の収集:
     − インストールされているウイルス対策製品
     − 接続されているUSBデバイス
     − Chromeのバージョン

PyVil RATのグローバル変数により、このマルウェアの機能が明確にわかります。


PyVil RATの機能を示すグローバル変数

PyVil RATには、マルウェアのバージョン、C2ドメイン、C2との通信時に使用するユーザーエージェントを保持する構成モジュールがあります。


構成モジュール

PyVil RATのC2通信はPOST HTTPリクエストを介して行われ、base64でエンコードされたハードコードキーを使用してRC4で暗号化されます。


RC4キー


感染したマシンからC2に送信されるデータ漏洩

この暗号化されたデータには、マシンと構成から収集されたJson形式のさまざまなデータが含まれます。


復号化されてC2に送信されるJSONの1つ

フィールド 用途
type 不明
xmode 不明
req_type リクエストの種類
svc_ver 構成のマルウェアのバージョン
ext_ver マルウェアがダウンロードする可能性のある実行可能ファイルのバージョン(-2は実行可能ファイルのフォルダが存在しないことを意味します)
ext_exists 特定の実行可能ファイルが存在するかどうかをチェック 
svc_name C2によってマルウェアを識別するために使用される名前である模様
ext_uuid エンコードされたマシンのUUID
svc_uuid マシンのUUID
host ホスト名
uname ユーザー名
ia ユーザーが管理者かどうか
wv Windowsのバージョン
dt 現在の日時
avs インストールされているウイルス対策製品のリスト
gc 異なる構成の辞書
sc_secs_min スクリーンショット送信間隔の最小スリープ時間
sc_secs_max スクリーンショット送信間隔の最大スリープ時間
kl_secs_min キーロギングデータ送信間隔の最小スリープ時間
kl_secs_max キーロギングデータ送信間隔の最大スリープ時間
kl_run キーロガーがアクティブ化されているかどうか
klr キーロガーがアクティブ化されているかどうか
tc USBが接続されているかどうか
cr chrome.exeが実行されているかどうか
ct 実行するダウンロード済みモジュールのタイプ:実行可能モジュールまたはPythonモジュール
cn ctに対応するモジュール名
imp ダウンロードしたモジュールを実行(ctに対応)
pwds 抽出したパスワード
cooks Cookie情報

C2通信に使用されるフィールド

PyVil RATの分析中に何度か、マルウェアは実行する新しいPythonモジュールをC2から受信しました。このPythonモジュールは、Evilnumが過去に使用したLaZagne Projectのカスタムバージョンです。このスクリプトはパスワードをダンプし、Cookie情報を収集してC2に送信しようとします。


復号化されてC2に送信されたLaZagneの出力

インフラストラクチャの拡大

この集団の以前のキャンペーンで、EvilnumのツールはC2との通信にドメインを使用せず、IPアドレスのみを使用していました。ここ数週間で、Evilnumのインフラストラクチャの成長に関して興味深い傾向が見られました。

Evilnumが過去数週間に構築した同集団の新しいインフラストラクチャを追跡することにより、拡大傾向が確認されました。C2 IPアドレスは数週間ごとに変更されますが、このIPアドレスに関連付けられているドメインのリストは成長を続けています。数週間前、マルウェアに関連付けられた3つのドメインが同じIPアドレスに解決されました。

ドメイン 解決されたIP
crm-domain[.]net 5.206.227[.]81
telecomwl[.]com
leads-management[.]net

その後まもなく、3つのドメインすべてのC2 IPアドレスが変更されました。さらに、3つの新しいドメインが同じIPアドレスで登録され、マルウェアによって使用されました。

ドメイン 解決されたIP
crm-domain[.]net 185.236.230[.]25
telecomwl[.]com
leads-management[.]net
voipssupport[.]com
voipasst[.]com
voipreq12[.]com

数週間後、この変更が再び行われました。数日の間にすべてのドメインの解決アドレスが変更され、3つの新しいドメインが追加されました。

ドメイン 解決されたIP
crm-domain[.]net 193.56.28[.]201
telecomwl[.]com
leads-management[.]net
voipssupport[.]com
voipasst[.]com
voipreq12[.]com
telefx[.]net
fxmt4x[.]com
xlmfx[.]com


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

結論

本稿では、認知度を上げ始めているEvilnumという脅威アクターによる新たな感染チェーンの調査を行いました。

2018年に最初に報告されてから現在まで、EvilnumのTTPはさまざまなツールによって進化しており、引き続きフィンテックを標的としています。

Evilnumは、JavaScriptやC#のトロイの木馬、Golden ChickensからMalware-as-a-Serviceとして購入したマルウェア、その他の既存のPythonツールなど、その進化の過程でさまざまな種類のツールを採用してきました。各種の変更はありましたが、標的とするフィンテック企業への最初の足掛かりを得る主な方法は変わらず、偽のKnow your customer(KYC)文書で金融業界の従業員をだましてマルウェアを起動しています。

最近の数週間で感染手順に大きな変化が見られており、JavaScriptのバックドア機能から離れて、JavaScriptを全面的に新しいツールの第一段階のドロッパーとして利用しています。感染段階では、Evilnumは正規の実行ファイルを改変したバージョンを利用し、ステルス性を維持してセキュリティツールによって検出されないようにしています。

この集団はNocturnusチームの研究者がPyVil RATと呼んでいる新しいタイプのPython RATを展開しています。このRATは、情報収集、スクリーンショット、キーログデータの入手を行い、SSHシェルを開いて新しいツールを展開する機能を備えています。

LaZagneなどのPythonモジュールや実行可能ファイルを新しいツールとして展開できるため、必要に応じて攻撃用の機能を追加できます。この戦術とツールの革新によりEvilnumは気付かれずにいることができ、Evilnum集団の武器が成長し続けることで将来的にさらに多くの事例が発生するものと予測されます。

MITRE ATT&CK FOR MOBILEに基づくテクニックの分類

最初のアクセス
スピアフィッシングリンク

実行
ユーザー実行
Windowsコマンドシェル
JavaScript/JScript

持続性
スケジュールされたタスク

権限のエスカレーション
スケジュールされたタスク

防御の回避
ファイルまたは情報の難読化解除/デコード
偽装
難読化されたファイルまたは情報

資格情報へのアクセス
パスワードストアからの資格情報
Webブラウザからの資格情報
OS資格情報のダンプ
キーロギング
WebセッションのCookieの窃取

検出
プロセスの検出
セキュリティソフトウェアの検出
システム情報の検出

情報収集
キーロギング
スクリーンキャプチャ

コマンド&コントロール
データのエンコード
Ingressツール転送
アプリケーション層プロトコル
暗号化されたチャネル

抽出
C2チャネルを介した抽出

ホワイトペーパー「MITRE ATT&CKを使用してクローズドループ式のセキュリティプロセスを作成する5つの段階」

このホワイトペーパーでは、MITER ATT&CKを使用してクローズドループの戦術的なセキュリティ対策を実施するために参考にすべき、重要な5つの段階について説明します。
https://www.cybereason.co.jp/product-documents/white-paper/3259/

ホワイトペーパー「MITRE ATT&CKを使用してクローズドループ式のセキュリティプロセスを作成する5つの段階」