サイバー犯罪者が特定の国や地域を標的にするのは珍しいことではなく、この戦略はよく採用されます。
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の関係者に送信されたメールに、以下の不正アーカイブファイルが添付されていました。
図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銀行に送信されたアーカイブ添付ファイルにも含まれていました。
図2:不正添付ファイル付きでIDBI銀行に送信された電子メール
このメールヘッダと以前のメールの送信に使用されたインフラストラクチャを手掛かりに、我々は、これらの攻撃のいくつものインスタンスを識別し、同じサイバー犯罪者が関与しているという結論を得ることができました。
図3に、RBIに送信された、Javaベースのバックドアを含むアーカイブファイルが添付されたメールを示します。
図3:不正添付ファイル付きでRBIに送信されたメール
図4に、Javaベースのバックドアを含むアーカイブファイルのAIC(Agricultur Insurance Company of India、インド農業保険会社)への送信に使用されたメールを示します。
図4:不正添付ファイル付きでAIC Indiaに送信されたメール
メールはヒンディー語で書かれています。
上記のいずれの場合も、Javaベースのバックドアのハッシュは同じであり、使用されたファイル名だけが異なるものでした。
JARファイルのハッシュ:0ac306c29fde5e710ae5d022d78769f6
HTAファイルのMD5ハッシュ:23b32dce9e3a7c1af4534fe9cf7f461e
このHTAファイルが実行されると、ウィンドウに意味のないデータが点滅表示され、その後にウィンドウが自動的に閉じられます。
このHTAファイルには、図5のファイルヘッダに示すように、mshtaによって実行されるJavaScriptが含まれています。
図5:ファイルのHTAヘッダ
JavaScriptの先頭には、図6に示すような、エンコードされた文字列の長い配列があります。
図6:エンコードされた文字列の長い配列
この文字列の配列は、JavaScriptのさまざまな場所で参照され、実行時にランタイムでbase64でデコードされ、RC4で復号化されます。
このHTAファイルのJavaScriptコードは、図7に示すように、高度に難読化されています。
図7:高度に難読化されたJavaScriptコード
文字列のデコードと解読のルーチンを図8に示します。
図8:文字列のデコードと解読のルーチン
文字列復号化ルーチンを分析したところ、RC4アルゴリズムが使用されていることがわかりました。
この文字列復号化のプロセスを要約すると、以下のようになります。
このJavaScriptのすべての文字列を復号化したところ、図9に示すメインの構成を確認できまました。
図9:JsOutProxバックドアのメインの構成ファイル
上記の構成ファイルの重要なパラメータの一部を以下に示します。
このスクリプトは図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ヘッダに設定されます。
図13:C2サーバに送信される最初のHTTP POST要求
バックドアとC2サーバの間のコマンドアンドコントロール通信は、HTTP要求と応答でCookieを使用して同期されます。
Cookieの最後のフィールドは、クライアントコマンドのタイプを表します。
たとえば、Cookieが以下の場合
Cookie: _giks=46464646464646465f7c5f65363261396233322d323434352d346166612d393233622d3836653530306530363665655f7c5f486f73746e616d655f7c5f41646d696e6973747261746f725f7c5f4f535f4e616d655f7c5f56657273696f6e5f7c5f5661737465725f7c5f70696e67
次に、以下のクライアントコマンドが確認されました。
図14に、すべてのコマンドを処理する、コード内のメインサブルーチンを示します。
図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を呼び出す。 |
JARファイルのMD5ハッシュ:0ac306c29fde5e710ae5d022d78769f6
ここでは、JARファイルは高度に難読化されています。JARファイルの構造を図15に示します。
図15:JARファイルの構造
このJARファイルには、「jkgdlfhggf.bvl」という名前のAESで暗号化されたリソースがあります。
図16に示すように、このリソースは実行時に読み込まれ、復号化されます。
図16:ステージ1のリソース復号ルーチン
このリソースが別のJARファイルに復号化され、jhkgdldsgf.jarという名前でマシンの%appdata%ディレクトリにドロップされます。
ドロップされるJARファイルには、このJavaベースのバックドアのすべての機能が含まれています。図17に、JARファイルの主な構造を示します。
図17:JavaベースのバックドアのJARファイルの構造
このJARファイル内のすべての文字列は、Allatoriと呼ばれる難読化ツールによって難読化されています。文字列復号化ルーチンを、図18に示します。
図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
図20に、Zscaler Cloud SandboxによってJavaベースのバックドアが検知された例を示します。
図20:Zscaler Cloud SandboxによるこのJavaベースのバックドアの検知
図21に、Zscaler Cloud SandboxによってJsOutProx RATを含むHTAベースのバックドアが正常に検知された例を示します。
図21:Zscaler Cloud SandboxによるHTAベースのバックドアの検知
このサイバー犯罪者は、インド国内の組織に関心を持っており、メールの内容を見ると、標的となったそれぞれの組織に関連性のあるトピックについての十分な知識があることがわかります。2019年12月に活動が1度だけ確認されたことがあるJsOutProxなどのように、この攻撃で使用されたバックドアは、それほど馴染みのあるものではありません。
ゼットスケーラーのThreatLabZチームは、お客様の安全を確保するため、この攻撃はもちろん、他の攻撃についても監視を継続します。
戦術 |
技術 |
難読化 |
|
ソフトウェアパッキング |
T1045 |
持続性 |
レジストリ実行キー / スタートアップフォルダ - T1060 |
画面キャプチャ |
T1113 |
システムのシャットダウン / 再起動 |
T1529 |
Mshta |
T1170 |
ファイルとディレクトリの発見 |
T1083 |
使用されることが少ないポート |
T1065 |
WMI(Windows Management Instrumentation) |
T1047 |
ハッシュ
23b32dce9e3a7c1af4534fe9cf7f461e – HTAファイル(JSOutProx)
0ac306c29fde5e710ae5d022d78769f6 – Javaベースのバックドア
ネットワーク指標
scndppe[.]ddns[.]net:9050
backjaadra[.]ddns[.]net:8999