Zscaler book

Learn how Zscaler enables work-from-anywhere.

Download the eBook today

Zscaler book

Learn how Zscaler enables work-from-anywhere.

Download the eBook today

ブログ > セキュリティリサーチ

インドの政府機関や金融機関に対する、JsOutProx RATを使用した標的型攻撃

公開日:

著者:

Sudeep Singh

カテゴリ:

暗号化回避/ステルスマルウェア

インドの政府機関や金融機関に対する、JsOutProx RATを使用した標的型攻撃

サイバー犯罪者が特定の国や地域を標的にするのは珍しいことではなく、この戦略はよく採用されます。

ThreatLabZは2020年4月に、インドの政府機関や金融機関に対する複数の標的型攻撃を確認しました。RBI(Reserve Bank of India、インド準備銀行)、IDBI銀行、NABARD(National Bank for Agricultre and Rural Development、全国農業農村開発銀行)のDOR(Department of Refinance、借り換え部門)などの組織に、、JavaScriptやJavaベースのバックドアを含むアーカイブファイルが添付された電子メールが送信されました。

JavaScriptベースのバックドアを詳しく分析したところ、Yoroiによって指摘されていた、2019年12月の攻撃で初めて使用されたJsOutProx RATと関連性があることがわかりました。

この攻撃では、JavaベースのRATが、今回のJavaScriptベースのバックドアと同様の機能を備えていました。

このブログでは、この標的型攻撃における電子メール攻撃ベクトルを紹介し、確認されたバックドアを技術分析し、この攻撃についてのゼットスケーラーの対応について説明します。

 

電子メールの分析

NABARDの関係者に送信されたメールに、以下の不正アーカイブファイルが添付されていました。

 

NABARDのメール

図1:不正添付ファイル付きでNABARDに送信されたメール

メールの添付ファイルの名前は、KCC_Saturation_letter_to_all_StCBs_RRBs_pdf.zipです。

このアーカイブには、不正行為を実行するHTAファイルが含まれています。

HTAファイルのMD5ハッシュ:23b32dce9e3a7c1af4534fe9cf7f461e

このメールのテーマは、KCC飽和攻撃と関連性のあるものであり、KCC(Kisan Credit Card)スキームと関連性のあるこの攻撃については、NABARDの公式Webサイトで詳しく説明されています。

攻撃者がこのテーマを利用したのは、DORと関連性のある、正当なメールであると思わせるためです。

我々は、このメールの以下に示すヘッダから、ポーランドのホスティングプロバイダであるhosteam.plが送信元であることを突き止めました。

X-Auth-ID: [email protected]

Received: by smtp10.relay.iad3b.emailsrvr.com (Authenticated sender: syeds-AT-rockwellinternationalschool.com) with ESMTPSA id 0928BE00BD;

         Mon, 20 Apr 2020 21:33:53 -0400 (EDT)

X-Sender-Id: [email protected]

Received: from WINDEB0UPGVCUK (unused-31-133-6-113.hosteam.pl [31.133.6.113])

         (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384)

         by 0.0.0.0:465(trex/5.7.12);

         Mon, 20 Apr 2020 21:34:40 -0400

図2に示すように、これと同じHTMLアプリケーション(HTA)ファイルが、IDBI銀行に送信されたアーカイブ添付ファイルにも含まれていました。

IDBIのメール

図2:不正添付ファイル付きでIDBI銀行に送信された電子メール

このメールヘッダと以前のメールの送信に使用されたインフラストラクチャを手掛かりに、我々は、これらの攻撃のいくつものインスタンスを識別し、同じサイバー犯罪者が関与しているという結論を得ることができました。

図3に、RBIに送信された、Javaベースのバックドアを含むアーカイブファイルが添付されたメールを示します。

RBIのメール

図3:不正添付ファイル付きでRBIに送信されたメール

図4に、Javaベースのバックドアを含むアーカイブファイルのAIC(Agricultur Insurance Company of India、インド農業保険会社)への送信に使用されたメールを示します。

 

AIC of India

図4:不正添付ファイル付きでAIC Indiaに送信されたメール

メールはヒンディー語で書かれています。

上記のいずれの場合も、Javaベースのバックドアのハッシュは同じであり、使用されたファイル名だけが異なるものでした。

JARファイルのハッシュ:0ac306c29fde5e710ae5d022d78769f6

 

JsOutProxの技術分析

HTAファイルのMD5ハッシュ:23b32dce9e3a7c1af4534fe9cf7f461e

このHTAファイルが実行されると、ウィンドウに意味のないデータが点滅表示され、その後にウィンドウが自動的に閉じられます。

このHTAファイルには、図5のファイルヘッダに示すように、mshtaによって実行されるJavaScriptが含まれています。

HTAヘッダ

図5:ファイルのHTAヘッダ

JavaScriptの先頭には、図6に示すような、エンコードされた文字列の長い配列があります。

エンコードされた文字列の配列

図6:エンコードされた文字列の長い配列

この文字列の配列は、JavaScriptのさまざまな場所で参照され、実行時にランタイムでbase64でデコードされ、RC4で復号化されます。

このHTAファイルのJavaScriptコードは、図7に示すように、高度に難読化されています。

難読化されたJavaScriptコード

図7:高度に難読化されたJavaScriptコード

文字列のデコードと解読のルーチンを図8に示します。

文字列のデコードと復号化のルーチン

図8:文字列のデコードと解読のルーチン

文字列復号化ルーチンを分析したところ、RC4アルゴリズムが使用されていることがわかりました。

この文字列復号化のプロセスを要約すると、以下のようになります。

  1. この文字列復号化ルーチンは、b(‘0x4’, ‘qP52’) というようなコールによって呼び出されます。最初のパラメータは、JavaScriptの最初に宣言された長い配列内のエンコードされた文字列のインデックスです。2番目のパラメータは、RC4復号化キーです。
  2. JavaScript関数atob()を使用して、文字列がbase64にデコードされる。
  3. forループを使用してS-boxが生成され、シーケンス0x0~0x100が生成される。
  4. 復号化キーを使用してS-boxが並べ替えられる。
  5. 並び替えられたS-boxは、暗号化された文字列のXOR復号化の実行に使用される。

このJavaScriptのすべての文字列を復号化したところ、図9に示すメインの構成を確認できまました。

JSOutProxの構成ファイル

図9:JsOutProxバックドアのメインの構成ファイル

上記の構成ファイルの重要なパラメータの一部を以下に示します。

  1. BaseURL:C2通信のURL。この場合は、動的DNS(* .ddns.net)と非標準ポートを使用する。
  2. Delimiter:システムに関する情報を持ち出す際に使用する区切り文字。
  3. SleepTime:実行を遅延させる必要がある期間
  4. Delay:SleepTimeパラメータと同様
  5. Tag:持ち出し時にデータに付加される一意のインジケータ。この場合、このタグはVaster。このJavaScriptベースのバックドアが2019年12月に初めて発見された時には、このタグの値はJsOutProxだった。
  6. IDPrefix:このパラメータは、初期化時にバックドアからC2サーバに送信されるHTTP POST要求で設定されるCookie名に対応する。
  7. RunSubKey:マシンに常駐するために使用するWindowsレジストリキー。

このスクリプトは図10に示すように、mshta、wscript、またはASPサーバのいずれによって実行されるかをチェックします。

実行のソースをチェックする

図10:実行のソースのチェック

これは、このスクリプトがWebサーバを含むさまざまな環境で実行できることも示しています。2019年12月に確認されたJsOutProxの最初のインスタンスは、JavaScriptファイルでしたが、2020年4月に確認されたインスタンスは、HTAファイルで、難読化されたJavaScriptコードが埋め込まれていました。このように、このサイバー犯罪者が実際にさまざまな方法を使用してバックドアを展開しているのを我々は観察しています。

図11に示すように、このスクリプトは、実行を遅延する機能も備えています。

実行遅延メソッド

図11:実行の遅延

init() は初期化ルーチンで、図12に示すように、システムからさまざまなタイプの情報を収集し、HTTP POST要求に入れてC2サーバに送信します。

初期化ルーチン

図12:メインの初期化ルーチン

init() ルーチンで収集される個々のフィールドは以下のとおりです。

Volume serial number:volumeSerialNumberフィールドを調べ、WMIクエリ「select * from win32_logicaldisk」を使用してボリュームシリアル番号を取得する。

UUID:これは、スクリプト内のgetUUID関数を使用してランダムに生成されます。使用されるUUIDの形式は、xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxです。

ComputerName:マシンのホスト名

UserName:このスクリプトが実行中のマシンのユーザ名

OS caption:この値は、Captionフィールドを調べ、WMIクエリ「select * from win32_operatingsystem」を使用して取得される。

OS version:この情報もOS captionと同様に、WMIクエリを使用して収集されます。

Tag:バックドアの構成で定義されたタグ。この場合、このタグはVaster。

最後のキーワードは「ping」で、これはreceive() メソッドによって追加されます。

これらの値はすべて、区切り文字「_|_」で区切られて連結され、16進数でエンコードされて、図13に示すように、C2サーバに送信されるHTTP POST要求の「_giks」と呼ばれるCookieヘッダに設定されます。

HTTP POST要求

図13:C2サーバに送信される最初のHTTP POST要求

バックドアとC2サーバの間のコマンドアンドコントロール通信は、HTTP要求と応答でCookieを使用して同期されます。

Cookieの最後のフィールドは、クライアントコマンドのタイプを表します。

たとえば、Cookieが以下の場合

Cookie: _giks=46464646464646465f7c5f65363261396233322d323434352d346166612d393233622d3836653530306530363665655f7c5f486f73746e616d655f7c5f41646d696e6973747261746f725f7c5f4f535f4e616d655f7c5f56657273696f6e5f7c5f5661737465725f7c5f70696e67

次に、以下のクライアントコマンドが確認されました。

  1. Cookieが16進数でデコードされる:FFFFFFFF_|_e62a9b32-2445-4afa-923b-86e500e066ee_|_Hostname_|_Administrator_|_OS_Name_|_Version_|_Vaster_|_ping
  2. デコードされたコンテンツが区切り文字「_|_」で区切られる:['FFFFFFFF', 'e62a9b32-2445-4afa-923b-86e500e066ee', 'Hostname', 'Administrator', 'OS_Name', 'Version', 'Vaster', 'ping']
  3. 上記のリストから最後のフィールドを抽出する。この場合のコマンドは、ping。

図14に、すべてのコマンドを処理する、コード内のメインサブルーチンを示します。

JSOutProxのC2コマンド

図14:JsOutProxのC2コマンドハンドラサブルーチン

コマンドの説明を以下の表に示します。

 

コマンド

定義

upd

スクリプトをダウンロードして実行する

rst

スクリプトを再起動する

l32

rstコマンドと類似

dcn

実行を終了する

rbt

システムを再起動する

shd

システムをシャットダウンする

lgf

システムをシャットダウンする

ejs

eval()を使用して、サーバから送信されたJavaScriptを実行する

evb

ActiveXObjectを使用して、サーバから送信されたVBScriptを実行する

uis

バックドアをアンインストールする。

ins

バックドアをインストールする。

fi

ファイルプラグインを呼び出す。

do

ダウンロードプラグインを呼び出す。

sp

ScreenPShellPluginを呼び出す。

cn

ShellPluginを呼び出す。

 

Javaベースのバックドアの技術分析

JARファイルのMD5ハッシュ:0ac306c29fde5e710ae5d022d78769f6

ここでは、JARファイルは高度に難読化されています。JARファイルの構造を図15に示します。

ステージ1のJARファイル構造

図15:JARファイルの構造

このJARファイルには、「jkgdlfhggf.bvl」という名前のAESで暗号化されたリソースがあります。

図16に示すように、このリソースは実行時に読み込まれ、復号化されます。

ステージ1リソース復号化

図16:ステージ1のリソース復号ルーチン

このリソースが別のJARファイルに復号化され、jhkgdldsgf.jarという名前でマシンの%appdata%ディレクトリにドロップされます。

ドロップされるJARファイルには、このJavaベースのバックドアのすべての機能が含まれています。図17に、JARファイルの主な構造を示します。

ステージ2のJARファイル構造

図17:JavaベースのバックドアのJARファイルの構造

このJARファイル内のすべての文字列は、Allatoriと呼ばれる難読化ツールによって難読化されています。文字列復号化ルーチンを、図18に示します。

ステージ2の文字列復号化ルーチン

図18:文字列復号化ルーチン

この文字列復号化ルーチンには、以前のブログで解説したように、Python実装も含まれています。

JARファイルは、C&Cサーバ(scndppe.ddns.net)にポート9050で接続します。

このJavaベースのバックドアは、モジュール構造で、いくつかのプラグインが含まれています。図19に、メインのネットワークコントローラのコードを示します。このコードは、C&C通信を処理し、さらに処理するためのコマンドを対応するプラグインにディスパッチします。

ネットワークコントローラのコマンド

図19:ネットワークコントローラのコマンドハンドラ

コントローラは、コマンドと、そのコマンドのパラメータを表す文字列の配列を受け取ります。

C&Cコマンドはそれぞれ、サーバから送信されたコマンドを実行するプラグインを呼び出すために使用されます。

 

コマンド

呼び出されるプラグイン

sc

画面プラグイン

aut

ログプラグイン

cm

コマンドプラグイン

dn

ダウンローダプラグイン

fm

ファイルマネージャプラグイン

st

スタートアッププラグイン

ln.t

実行を終了する基本プラグイン

ln.rst

実行をリスタートする基本プラグイン

 

次に、このJavaベースのバックドアの2つのメインのプラグインと、それらのプラグインによって処理されるコマンドについて説明します。

ファイルマネージャプラグイン:このプラグインは、攻撃者がリモートで実行できる、ファイルシステム関連のすべてのアクションを処理します。このプラグインは複数のコマンドをサポートしており、以下の表に主なコマンドを示します。

 

プラグインコマンド

目的

Fm.dv

システムドライブ(CDドライブを含む)のリストを取得する

Fm.get

ディレクトリ内のファイルとフォルダのリストを取得する

Fm.nd

新しいディレクトリを作成する

Fm.e

Runtime.getRuntime().exec()を使用してコマンドを実行する

Fm.es

OSのタイプに基づいて新しいシステムシェルを開始する

Fm.cp

あるファイルの内容を別のファイルにコピーする

Fm.chm

chmodコマンドを使用してファイルパーミッションを変更する(LinuxとMacの場合のみ)

Fm.mv

ファイルをある場所から別の場所に移動する。

Fm.del

ファイルを削除する。

Fm.ren

ファイル名を変更する

Fm.chmod

chmコマンドと同様

Fm.down

ファイルをシステムからダウンロードする。ダウンロード前に、ファイルの内容はGzipで圧縮され、Base64でエンコードされる。

Fm.up

ファイルをシステムにアップロードする。ファイルシステムにドロップする前に、ファイルの内容はGzipで解凍され、Base64でデコードされる。

 

画面プラグイン:このプラグインは、java.Awt.Robotクラスを使用して、マシンにおけるすべてのマウスとキーボードのシミュレーションを実行し、画面キャプチャも取得します。このプラグインのコマンドの詳細を以下の表に示します。

 

プラグインコマンド

目的

sc.op

画面サイズの幅と高さの情報を取得する

sc.ck

ダブルクリック、上スクロール、下スクロールなどのマウス操作をシミュレーションする

sc.mv

マウスカーソルを指定した座標に移動する

sc.cap

画面キャプチャを取得する

sc.ky

キーストロークをマシンに送信する

 

永続性:システムの再起動時にこのJARファイルが自動的に実行されるようにするために、ウィンドウ実行レジストリキーが以下のように作成されます。

HKCU\Software\Microsoft\Windows\CurrentVersion\Run /v jhkgdldsgf /d '\'C:\Program Files\Java\jre1.8.0_131\bin\javaw.exe\'-jar \'C:\Users\user\AppData\Roaming\jhkgdldsgf.jar\''/f

 

Zscaler Cloud Sandboxによる検知

図20に、Zscaler Cloud SandboxによってJavaベースのバックドアが検知された例を示します。

Zscaler Cloud SandboxによるJavaベースのバックドアの検知

図20:Zscaler Cloud SandboxによるこのJavaベースのバックドアの検知

図21に、Zscaler Cloud SandboxによってJsOutProx RATを含むHTAベースのバックドアが正常に検知された例を示します。

Zscaler Cloud SandboxによるHTAベースのバックドアの検知

図21:Zscaler Cloud SandboxによるHTAベースのバックドアの検知

 

まとめ

このサイバー犯罪者は、インド国内の組織に関心を持っており、メールの内容を見ると、標的となったそれぞれの組織に関連性のあるトピックについての十分な知識があることがわかります。2019年12月に活動が1度だけ確認されたことがあるJsOutProxなどのように、この攻撃で使用されたバックドアは、それほど馴染みのあるものではありません。

ゼットスケーラーのThreatLabZチームは、お客様の安全を確保するため、この攻撃はもちろん、他の攻撃についても監視を継続します。

 

MITRE ATT&CKのTTPマッピング

戦術

技術

難読化

難読化されたファイルまたは情報 - T1027

ソフトウェアパッキング

T1045

持続性

レジストリ実行キー / スタートアップフォルダ - T1060

画面キャプチャ

T1113

システムのシャットダウン / 再起動

T1529

Mshta

T1170

ファイルとディレクトリの発見

T1083

使用されることが少ないポート

T1065

WMI(Windows Management Instrumentation)

T1047

 

IOC(Indicator of Compromise、侵害の指標)

ハッシュ

23b32dce9e3a7c1af4534fe9cf7f461e – HTAファイル(JSOutProx)

0ac306c29fde5e710ae5d022d78769f6 – Javaベースのバックドア

ネットワーク指標

scndppe[.]ddns[.]net:9050

backjaadra[.]ddns[.]net:8999



お勧めのブログ