Winnti Group、香港の大学に対して新たな攻撃を実行

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はキヤノンマーケティングジャパンが提供する「マルウェア情報局」に掲載された「Winnti Groupが香港の大学に仕掛けた新たな攻撃」を再編集したものです。

 2019年11月、Winnti Groupが香港の2つの大学に対して攻撃を実行したことをESETが発見しました。今回、ESETはShadowPadバックドアの新しい亜種を検出しました。ShadowPadは、Winnti Groupが主要な攻撃ツールとして使用しているバックドアです。この新しい亜種は新しいランチャーを使用して展開され、多くのモジュールを埋め込みます。Winntiマルウェアも、ShadowPadが検出される数週間前にこれらの大学で検出されました。

 Winnti Groupは、少なくとも2012年から活動しています。ビデオゲームおよびソフトウェア業界にトロイの木馬(CCleaner、ASUS LiveUpdateやいくつかのビデオゲームなど)を配布し、大規模なサプライチェーン攻撃を仕掛け、多くのユーザーのセキュリティを侵害しています。また、ヘルスケアおよび教育業界のさまざまな標的も攻撃しています。

 ESETの研究者は最近、アジアのビデオゲーム業界を標的にしたサプライチェーン攻撃について説明したブログに続いて、Winnti Groupが使用している攻撃ツールに関する最新情報を説明したホワイトペーパーを公開しました。さらに、Microsoft SQL Serverをターゲットとするskip-2.0という名前の新しいバックドアに関するブログも公開しています。

 ここでは、ShadowPadの新しい亜種の技術的な要素について詳しくお伝えします。

「Winnti Group」の名称について:

「Winnti Group」という名前は、2013年にKasperskyが最初に特定した名前です。Winntiはマルウェアの系統でもあることから、攻撃の背後にある悪意のある組織について言及するときは、常にWinnti Groupと記述しています。2013年以来、WinntiはWinnti Groupが使用している数多くのマルウェアのひとつにすぎないことが実証されています。

香港の複数の大学で見つかったShadowPad

 2019年11月、ESETの機械学習エンジンであるAugurは、香港の2つの大学にある複数のコンピューターで悪意のある特殊な検体を検出しました。この2つの大学のコンピューターからは、10月末にすでにWinntiマルウェアが検出されてました。Augurによって検出された疑わしい検体は、実際には新しい32ビットのShadowPadランチャーでした。これらの大学で見つかったShadowPadとWinntiの両方の検体には、これらの大学名を含む攻撃IDとC&CのURLが含まれていることから、標的型攻撃であることがわかりました。

 攻撃者が使用したC&CのURLの形式から、ShadowPadとWinntiの同じ亜種を使用した攻撃によりセキュリティが侵害された香港の大学は、ほかにも少なくとも3つあると考えられます。

 Winnti Groupによる香港の大学に対する攻撃は、香港の逃亡犯条例改正案に対して2019年6月に始まった市民の抗議活動に関連して行なわれています。この法案は2019年9月に撤回されましたが、抗議行動は続き、本当の民主主義と香港警察の調査が要求されました。これらの抗議については、香港の大学の学生が支持しており、街頭には数十万人ものデモ隊が集結し、抗議者は複数の大学のキャンパスを占拠しました。

 ESETは、攻撃を大学に連絡し、必要な情報とセキュリティ侵害を修復するための支援を行ないました。

更新されたランチャー

 従来のShadowPadの亜種とは異なり(Winnti Groupが使用している攻撃ツールに関するESETのホワイトペーパーを参照)、このランチャーはVMProtectを使用して難読化されていません。さらに、暗号化されたペイロードが、オーバーレイに埋め込まれることも、COM1:NULL.datの代替データストリームに配置されることもありません。また、攻撃を受けたユーザーマシンのシステムドライブのボリュームIDから派生するキーを使用する通常のRC5暗号化(PortReuseバックドア、skip-2.0および一部のShadowPadの亜種で確認されている手法)も存在しません。この亜種のランチャーは、非常にシンプルです。

DLLのサイドローディング

 このランチャーは、hpqhvsei.dllという名前の32ビットのDLLです。これは、hpqhvind.exeによってロードされる正規のDLLの名前です。この実行可能ファイルはHPが提供しているものであり、通常、「HP Digital Imaging」と呼ばれる印刷およびスキャンソフトウェアと一緒にインストールされます。今回のケースでは、攻撃者によっては、正規のhpqhvind.exeと悪意のあるhpqhvsei.dllが一緒にC:\Windows\Tempにドロップされています。

 このランチャーをドロップして実行するコンポーネントをESETは入手していませんが、これらのファイルが存在していることから、DLLサイドローディングによってこのランチャーが初めて実行されると考えられます。

 hpqhvind.exeの起動時に悪意のあるDLLがロードされると、そのDLLMain関数が呼び出され、オフセット0x10BAにある次のバイトシーケンスについて親プロセスをチェックします。


85 C0 ; test eax, eax
0F 84 ; jz

 親プロセスがhpqhvind.exeであれば、このバイトシーケンスは、この正確な場所にあり、悪意のあるDLLによって、メモリにある親プロセスにパッチが適用されます。0x10BAの元の命令を、ランチャーに埋め込まれた暗号化されたペイロードを解読して実行するhpqhvsei.dllの関数のアドレスへの無条件の飛び越し(jmp – 0xE9)に置き換えます。

 親プロセスにパッチを適用する逆コンパイルされた関数を図1に示します。hpqhvsei.dllがhpqhvind.exeではないプロセスによって読み込まれた場合、悪意のあるコードは復号化されることも実行されることもありません。

図1 親プロセスにパッチを適用する逆コンパイルされた関数

 元のhpqhvind.exeとパッチが適用されたhpqhvind.exeの違いを図2に示します。

図2 元のhpqhvind.exe(左)とパッチを適用した(右)hpqhvind.exeの違い

 パッチが適用されるコード部分は、hpqhvind.exeの主要な関数の最初にあります。図2に示すように、パッチが適用されるコードは、hpqhvsei.dllをロードするコードの直後にあります。これは、ペイロードの復号化と実行を行なう関数が、悪意のあるDLLをロードした直後に実行されることを意味します。

ペイロードの復号化

 暗号化されたペイロードは、hpqhvsei.dllの.rdataセクションにあり、復号化アルゴリズムは図3に示すように、XORキーが各反復で更新されるXORループです。

図3 ペイロード復号化ループの擬似コード

 復号化されたペイロードは、ShadowPadを初期化する通常のシェルコードです(逆アセンブリを妨げる偽の条件付き飛び越しを使用して難読化されています)。

常駐化

 ペイロードが復号化されると、ShadowPadのシェルコードが実行されます。まず、メモリ内でパッチが適用された親プロセス(この場合はhpqhvind.exe)を、構成文字列プールで指定されたディスクのパスに書き込むことにより、システムに常駐します。ESETの調査では、このパスはC:\ProgramData\DRM\CLR\CLR.exeでした。次に、CLR.exeの実行を担当するclr_optimization_v4.0.30229_32という名前のサービスを作成します。疑いをもたれないように、このサービス名と実行可能ファイル名は、Microsoft .NET最適化サービスの名前を模倣しています。

 完全なステージングプロセスを図4にまとめます。各矢印の番号は、イベントの時系列に対応しています。

図4 ShadowPadのステージングプロセス

モジュール

 ShadowPadは、マルチモジュールバックドアです。モジュールは、Rootモジュールから循環リストを使用して参照されます。このリストから、モジュールアドレス、UNIXタイムスタンプ(恐らくモジュールのコンパイルプロセスで自動的に埋め込まれたもの)、およびモジュール識別子を抽出できます。モジュール自体から、開発者がモジュールに付けた名前も抽出できます。このバージョンには、次の表に示す17個のモジュールが組み込まれています。

ID 名前 タイムスタンプ 説明
100 Root Thu 24 Oct 2019 12:08:27 PM UTC 最初のシェルコード。
101 Plugins Thu 24 Oct 2019 12:07:02 PM UTC 他のモジュールにAPIを提供し、モジュールをロードします。
102 Config Thu 24 Oct 2019 12:07:09 PM UTC 暗号化された構成文字列プールを処理します。
103 Install Thu 24 Oct 2019 12:07:46 PM UTC 常駐化。
104 Online Thu 24 Oct 2019 12:07:17 PM UTC C&Cサーバーとの全体的な通信。
106 ImpUser Thu 24 Oct 2019 12:07:24 PM UTC トークンを複製し、ユーザーのなりすましを行ないます。
200 TCP Thu 24 Oct 2019 12:01:01 PM UTC TCP通信。
202 HTTPS Thu 24 Oct 2019 12:01:15 PM UTC HTTPS通信。
207 Pipe Thu 24 Oct 2019 12:01:35 PM UTC 名前付きパイプを処理します。
300 Disk Thu 24 Oct 2019 12:02:29 PM UTC ファイルシステムの操作。
301 Process Thu 24 Oct 2019 12:02:36 PM UTC プロセスの処理。
302 Servcie Thu 24 Oct 2019 12:02:45 PM UTC サービスの処理。
303 Register Thu 24 Oct 2019 12:02:52 PM UTC レジストリの操作。
304 Shell Thu 24 Oct 2019 12:03:00 PM UTC コマンドラインの操作。
306 Keylogger Thu 24 Oct 2019 12:03:16 PM UTC ファイルシステムへのキーロギング。
307 Screen Thu 24 Oct 2019 12:03:25 PM UTC スクリーンショットの取得。
317 RecentFiles Thu 24 Oct 2019 12:04:44 PM UTC 最近アクセスしたファイルをリストします。

表1 このShadowPadバージョンで使用されるモジュール

 RecentFilesを除き、これらのモジュールは、KasperskyAvastによってすでに言及されています。「Servcie」のスペルにミスがあることに注意してください。

 すべてのモジュールのタイムスタンプの範囲は短い時間に集中していることから、ビルドフレームワークを使用してこれらのモジュールをコンパイルしており、これらのモジュールがランチャー自身の数時間前にビルドされていると考えられます。コンパイルタイムスタンプはThu Oct 24 14:10:32 2019です。このコンパイルタイムスタンプはこの攻撃の2週間前であることから、攻撃者によって改竄はされていないでしょう。

 また、この亜種に組み込まれているモジュール数は、ESETの過去のホワイトペーパーで説明した亜種に組み込まれているモジュール数(8~10モジュール)よりもはるかに多く(17)なっていることにも注意してください。

 デフォルトでは、キーロガーモジュール(306、Avastが過去に文書化)を使用して、すべてのキーストロークが記録され、ファイル%APPDATA%\PAGM\OEY\XWWEYG\WAOUEとしてディスクに保存されます。このログファイルは、モジュールの静的な文字列を暗号化するために使用されるのと同じアルゴリズムを使用して暗号化されます。デフォルトでこのモジュールを使用していることから、攻撃者はユーザーのマシンから情報を盗み出すことに関心があると考えられます。対照的に、ESETのホワイトペーパーで説明した亜種には、キーロガーモジュール自体が組み込まれていません。

構成

 ShadowPadの以前の亜種と同様に、Configモジュール(102)には、他のモジュールからアクセスできる暗号化された文字列プールが含まれています。この文字列プールが完全に復号化されてメモリに保存されることはありません。対象のフィールドは必要に応じて復号化され、すぐに解放されて使用できなくなります。構成サイズは2180バイトで、暗号化された文字列はオフセット0x84にあります。文字列の復号化に使用されるアルゴリズムは、モジュールの静的文字列の復号化に使用されるアルゴリズムと同じです。文字列プールの復号化されたコンテンツは次のとおりです。


0x84: 2019/11/7 16:28:36
0x99: CAMPAIGN_ID_REDACTED
0xa1: %ALLUSERSPROFILE%\DRM\CLR\CLR.exe
0xc5: clr_optimization_v4.0.30229_32
oxe6: clr_optimization_v4.0.30229_32
0x107: clr_optimization_v4.0.30229_32
0x128: SOFTWARE\Microsoft\Windows\CurrentVersion\Run
0x158: CLR
0x15e: %ProgramFiles%\Windows Media Player\wmplayer.exe
0x197: %windir%\system32\svchost.exe
0x1b7: TCP://b[redacted].dnslookup.services:443
0x1db: UDP://b[redacted].dnslookup.services:443
0x202: SOCKS4
0x21e: SOCKS5

 この攻撃(キャンペーン)のIDはオフセット0x99にあり、標的の大学の名前になっています。ShadowPadとWinntiの場合には、標的に関連する攻撃IDが設定されることが非常に多くあります。

 興味深いことに、この構成のオフセット0x84にあるタイムスタンプは、モジュールのタイムスタンプとローダーのコンパイルタイムスタンプよりも後になっています。これは、この構成がビルド後に検体に手動で追加されたことを示唆しています。おそらく偶然ですが、構成内の日付は、標的の大学でこの検体が最初に検出された日付と一致しています。

ネットワーク通信

 ShadowPadがシステムにインストールされると、非表示にされ一時停止されているMicrosoft Windows Media Playerプロセス(wmplayer.exe)を開始し、このプロセスに自身を挿入します。wmplayer.exeへのパスは、Configモジュールによって指定されます。

 ShadowPadがwmplayer.exeに挿入されると、オンラインモジュールは構成で指定されたURLを使用してC&Cサーバーに接続します。その後、ファイアウォールルールを更新した後、ポート13567で接続データの受信を開始します。

レジストリキー:
HKLM\SYSTEM\ControlSet001\services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\{816381AB-1400-45E5-B560-B8E11C5988CF}

値:
v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|Profile=Public|LPort=13567|Name=Network Discovery (TCP)|

 その後、通信は、Kasperskyによって文書化されているTCPモジュール(200)によって処理されます。

同時に存在していたWinntiマルウェア

 ShadowPadに加えて、Winntiマルウェアは10月末(ShadowPadが検出される2週間前)にこれら2つの大学の一部のマシンでファイルC:\Windows\System32\oci.dllで見つかり、ESET製品によってWin64/Winnti.CAとして検出されています。

 Winntiマルウェアには通常、攻撃IDとC&CのURLを指定する構成が含まれています。すべてのマシンで、攻撃IDは標的の大学名と一致しており、C&CのURLは以下のようになっていました。

・w[redacted].livehost.live:443
・w[redacted].dnslookup.services:443

 上記のredactedの部分は標的の大学名です。

C&CのURL形式

 WinntiとShadowPadの両方で使用されるC&CのURLは、[backdoor_type][target_name].domain.tld:443のスキームに準拠していることがわかります。[backdoor_type]には、1文字が指定され、Winntiマルウェアの場合は「w」で、ShadowPadの場合は「b」が指定されます。

 この形式から、3つの香港の大学名を含むいくつかのC&CのURLを見つけることができました。分析した検体で見つかった攻撃IDは、C&Cサーバーのサブドメイン部分と一致しており、これらの検体が実際にこれらの大学を標的にしていることを示しています。

結論

 Winnti Groupは、今なお、香港の大学に対して、主力のバックドアのひとつであるShadowPadを積極的に使用しています。この攻撃では、ShadowPadとPortReuseバックドアおよびskip-2.0で使用されていたVMProtectedランチャーが、簡易なものに置き換えられました。これらの検体は、これらの香港の大学で検出されただけでなく、大学名に一致する攻撃IDが使用され、大学名を含むC&CのURLが使用されていることから、この攻撃が標的型であることを示しています。

 ESETは、Winnti Groupの最新の活動状況を今後も監視し、ブログで関連情報を公開していきます。お問い合わせがございましたら、threatintel@eset.comまでご連絡ください。

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

ESETの検出名

Win32/Shadowpad.C trojan
Win64/Winnti.CA trojan

ファイル名

%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll
%ALLUSERSPROFILE%\DRM\CLR\CLR.exe
C:\windows\temp\hpqhvsei.dll
C:\windows\temp\hpqhvind.exe
%ALLUSERSPROFILE%\DRM\CLR\hpqhvsei.dll
%SYSTEM32%\oci.dll
%APPDATA%\PAGM\OEY\XWWEYG\WAOUE

サービスの表示名

clr_optimization_v4.0.30229_32

C&Cサーバー

b[org_name].dnslookup[.]services:443
w[org_name].livehost[.]live:443
w[org_name].dnslookup[.]services:443

ShadowPadランチャー

 標的となった大学名が公開されないように、類似する検体を示します。

693f0bd265e7a68b5b98f411ecf1cd3fed3c84af

MITRE ATT&CKの手法

手法 ID 名称 説明
常駐化 T1050 新しいサービス ShadowPadはclr_optimization_v4.0.30229_32と呼ばれるサービスとして常駐します。
防御システムの回避 T1073 DLLサイドローディング ShadowPadのランチャーは、DLLサイドローディングを介して正規の実行可能ファイルによりロードされます。
T1055 プロセスの挿入 ShadowPadはwmplayer.exeプロセスに挿入されます。
T1140 ファイルや情報の難読化解除/復号化 ShadowPadランチャーはXORを使用してペイロードを解読します。ShadowPadは、独自のアルゴリズムを使用して文字列と構成を解読します。
T1027 難読化されたファイルまたは情報 ShadowPadのシェルコードはXORでエンコードされており、偽の条件付き飛び越しを使用して逆アセンブリを防止します。ShadowPadの文字列と構成は暗号化されています。APIハッシュも使用されます。
T1143 非表示ウィンドウ ShadowPadは、非表示ウィンドウで開始されるwmplayer.exeプロセスに挿入されます。
検出 T1010 アプリケーションウィンドウの検出 ShadowPadのキーロギングモジュールは、アプリケーションウィンドウをリストします。
T1083 ファイルとディレクトリの検出 ShadowPadのRecentFilesモジュールには、最近アクセスしたファイルが一覧表示されます。
C&C T1071 標準アプリケーションレイヤープロトコル ShadowPadは、C&C通信にHTTPおよびHTTPSを使用できます。
T1043 多く使用されるポート ShadowPadはTCP:443とUDP:443を使用します。
T1065 あまり使用されないポート ShadowPadはポート13567で受信します。
T1095 標準の非アプリケーションレイヤープロトコル ShadowPadは、C&C通信にUDPおよびTCPを使用できます。
T1024 独自の暗号プロトコル ShadowPadは、C&C通信に独自の暗号化プロトコルを使用します。
収集 T1056 入力の取得 ShadowPadにはキーロギングモジュールがあります。
T1113 画面の取得 ShadowPadにはスクリーンショットモジュールがあります。
情報の盗み出し T1022 データ暗号化 キーロギングモジュールによって記録されたキーストロークは、暗号化されてディスクに保存されます