脆弱性攻撃によって拡散中の PlugX マルウェア

ASEC(AhnLab Security Emergency response Center)は中国の遠隔操作プログラムである Sunlogin および AweSun によって遠隔コード実行の脆弱性攻撃を通して PlugX マルウェアがインストールされていることを確認した。

Sunlogin の遠隔コード実行脆弱性(CNVD-2022-10270 / CNVD-2022-03672)は Exploit コードが公開されてから、最近まで様々な攻撃に使用されている。以前 ASEC はブログで Sunlogin RCE 脆弱性によって Sliver C2 と XMRig コインマイナー、そして Gh0st RAT マルウェアが拡散している状況について公開したことがある。Gh0st RAT も中国で開発されたマルウェアであり、主に中国を拠点とする攻撃者が使用する RAT マルウェアである。

AweSun も中国で開発された遠隔操作プログラムで、具体的な脆弱性は確認されていないが、Sunlogin と類似した RCE 脆弱性が公開されたものと推定できる。同じ攻撃者は Sliver C2 をインストールするが、Sunlogin だけでなく AweSun について RCE 脆弱性も攻撃に使用していた。その後は同じ脆弱性攻撃を利用して Paradise ランサムウェアをインストールする事例も確認され、ブログで紹介したこともある。

1. PlugX

PlugX は中国を拠点とした APT 攻撃グループが使用する代表的なバックドアマルウェアの一つである。2008年頃から配布が始まったものと知られており、最近までも様々な機能が追加された変種が攻撃に使用されている。PlugX を攻撃に使用した APT 攻撃グループは、代表的に Mustang Panda、Winnti、APT3、APT41 などが存在し、大半が中国を拠点にしていると知られている。[1]

PlugX はモジュールベースのマルウェアで、それぞれの機能を担う様々なプラグインをサポートしている。すなわち PlugX を使用する攻撃者は、システム制御や情報窃取などの特定の機能を担うプラグインを利用して、自由に不正な振る舞いを実行することができる。

PlugX の他の特徴としては DLL Side-Loading 方式を利用する点があげられる。DLL Side-Loading 方式は、正常なプログラムと同じパスに不正な DLL をインストールし、正常なプログラムを実行する。そして、その正常なプログラムによって不正な DLL がロードされ、不正なルーティンを実行させる方式である。不正な振る舞いを実行する主体が正常なプログラムになるため、正常なプログラムの振る舞いとして認識され、セキュリティ製品の検知を回避するために使用される。

これによって PlugX は主に圧縮ファイルや Dropper 形態で拡散しているが、最終的には同じパスに正常な EXE 実行ファイルと DLL Side-Loading に使用される名前を持った不正なローダー(Loader) DLL、そしてエンコードされたデータファイルが生成される。実行ファイルは同じパスに存在する Loader DLL をロードして実行され、Loader DLL は同じパスに位置するデータファイルを読み込んで復号化し、メモリ上で実行する。このようなプロセスを経て最終的にメモリ上で動作するマルウェアが PlugX である。

2. 脆弱性攻撃によってインストールされる PlugX

ASEC では、脆弱性がパッチされていないシステムや不適切に設定されたシステムを対象にする攻撃をモニタリングしており、最近 PlugX が Sunlogin および AweSun の RCE 脆弱性攻撃によってインストールされていることを確認した。

当社 ASD(AhnLab Smart Defense)ログにより、脆弱性攻撃を通して実行された PowerShell コマンドが esetservice.exe という名前のファイルを生成したことを確認した。

Figure 1.  脆弱性攻撃を通してマルウェアをダウンロードするログ

esetservice.exe は実際に ESET 社の HTTP Server Service プログラムであり、正常なファイルである。

Figure 2. ダウンロードされた ESET 社の HTTP Server Service プログラム

関連ログをさらに確認した結果、攻撃者は esetservice.exe の他にも http_dll.dll という名前のファイルを追加でダウンロードしていた。以下は攻撃者が Sunlogin 以外に AweSun 脆弱性攻撃も同時に使用していたことを示すために、他のシステムで確認したログである。

Figure 3. ダウンロードされた追加マルウェア

2つのファイルの関連を調査していたところ、「esetservice.exe」プログラムが追加で引数なしに実行される場合、同じパスに位置する「http_dll.dll」ファイルをロードする機能が存在していることが確認された。これは典型的な DLL Side-Loading 方式で、PlugX はこのような DLL Side-Loading 方式を使用する代表的なマルウェアである。

Figure 4. 同じパスに存在する http_dll.dll ファイルをロードするルーティン

PlugX は正常な exe プログラムと Loader の役割を担う DLL、そして実際のマルウェアがエンコードされているデータファイルを一つにまとめて配布されている。実際のコード解析上では「http_dll.dll」が同じパスに存在する「lang.dat」ファイルを読み込んで復号化し、実行するルーティンが確認された。

3. PlugX Dropper および Loader 解析

PlugX マルウェアを解析していたところ、VirusTotal で同じ「esetservice.exe」および「http_dll.dll」ファイルを攻撃に使用したマルウェアが確認された。このマルウェアは WinRar Sfx フォーマットの Dropper マルウェアで、実行すると「esetservice.exe」、「http_dll.dll」、そして「lang.dat」ファイルを生成して、「esetservice.exe」を実行し、最終的に PlugX が実行されるようにする。この Dropper は上記で扱った脆弱性攻撃で確認されたものではないが、PlugX の C&C アドレスと脆弱性攻撃に使用されたダウンロードアドレスが同じであることから見て、同じ攻撃者によるものであると推定できる。

PlugX Dropper は正常なプログラムのパスに偽装して、マルウェアを「C:\ProgramData\Windows NT\Windows eset service」パスに生成する。そしてユーザーの目につかないようにするため、隠し属性を付与する。

Figure 5. 偽装パスに生成された PlugX マルウェア

「esetservice.exe」が実行されると、同じパスに位置する「http_dll.dll」をロードして、これによって「http_dll.dll」の DllMain() 関数が実行される。DllMain() は「lang.dat」ファイルをロードする機能を担う関数を直接実行する代わりに、以下のように「esetservice.exe」のコードを修正し、「esetservice.exe」が「http_dll.dll」をロードした直後に直接「http_dll.dll」の Loader ルーティンに分岐するようにパッチする。

Figure 6. ローダー関数を実行するようにパッチされたコード

このルーティンは同じパスに位置する「lang.dat」ファイルをロードし、メモリ上で実行する機能を担っている。「lang.dat」ファイルの初めはシェルコードであり、このコードが実行されると一緒に保存されている PlugX を復号化してメモリ上で実行する。

Figure 7. シェルコードとエンコードされた PlugX が保存されている lang.dat ファイル

4. PlugX の解析

上記でも扱ったように、PlugX は十数年以上アップデートされ続けているマルウェアであるため、最近までにも様々な変種が確認されている。2020年 Dr.Web では様々な PlugX 変種をカテゴライズし、レポートを公開したことがある。[2] 最近では2022年に Security Joes 社が直近で確認された PlugX 変種について取り扱った。現在の解析対象になっている PlugX は Dr.Web レポートの BackDoor.PlugX.38 変種とほぼ類似しており、設定データを除外すると、直近で公開された Security Joes のレポートで扱われた PlugX と同じであると推定される。[3]

攻撃に使用された PlugX は引数によって様々なモードを提供している。以下は現在の解析対象である PlugX を実行した際に確認されるプロセスツリーであり、「100」、「200」、「201」、「209」の4つのモードが順番に実行されたことがわかる。

Figure 8. プロセスツリー

PlugX Dropper の初回実行時に「%PUBLIC%\Downloads\」パスに「esetservice.exe」、「http_dll.dll」、「lang.dat」ファイルを生成し、「esetservice.exe」を実行する。「esetservice.exe」プロセスによってロードされて実行される PlugX は WMi の Win32_Process クラスの create メソッドを使用して引数「100」を与え、自身を再実行させる。

引数「100」を受け取って実行する場合は、UAC Bypass プロセスを実行するが、これより前に、まずインジェクションプロセスを実行する。インジェクション対象プロセスは「runonce.exe」であり、シェルコードをインジェクションする。インジェクションされたシェルコードは ICMLuaUtil インターフェイスを悪用し、UAC を回避し、管理者権限で実行する機能を担っている。これを通して「esetservice.exe」は管理者権限で実行され、その後のサービスで自身を登録し、引数を「200」で設定する。ここまでのプロセスが終わると、再度インジェクション対象のプロセスである「runonce.exe」を引数201を与えて実行して自身をインジェクションし、「runonce.exe」はプラグインを担当するプロセス「msiexec.exe」を引数「209」を与えて実行およびインジェクションする。上記の過程はそれぞれ引数別に実行されるモードが異なることを意味するが、整理すると以下の通りになる。

引数 モード
引数なし 初回実行段階
100 UAC 回避段階
200 インジェクション段階
201 メインループ #1
202 メインループ #2
209 プラグインモード
300 自己削除
Table 1. 実行モード

「lang.dat」ファイルにはシェルコードおよびエンコードされた PlugX 以外にも設定データが含まれている。設定データもエンコードされて存在し、PlugX は実行中のデータをデコードし、C&C アドレスのような設定情報を獲得する。C&C サーバーのアドレスは4つ存在し、それぞれ以下の通りになる。

Figure 9. 復号化された設定データ
  • cdn.imango[.]ink:443
  • api.imango[.]ink:443
  • api.imango[.]ink:53
  • cdn.imango[.]ink:53

PlugX がサポートするコマンドは Dr.Web から公開されたレポートの BackDoor.PlugX.38 バージョンとほぼ同じであるが、0x0B、0x0C 項目、すなわち2つのコマンドが追加された点が差異である。

コマンド 機能
0x01 収集された情報の伝達
0x02 コマンド再リクエスト
0x03 プラグイン関連
0x04 接続再設定
0x05 自己削除
0x06 設定データのアップロード
0x07 設定データのアップロード
0x08 実質的な機能は担当しない
0x09 実質的な機能は担当しない
0x0A PING (伝達されたアドレスに対して53番ポートへ)
0x0B 外部からファイルをダウンロードおよび実行
0x0C サービス開始
Table 2. C&C コマンド

PlugX がサポートするプラグインも、従来の BackDoor.PlugX.38 バージョンと比較してクリップボード情報の窃取および RDP の伝播を担う2つの追加プラグインが含まれている。関連した内容は2022年12月に公開された Security Joes 社のレポートに含まれている。

プラグイン Date Time Stamp 機能
Disk 0x20120325 ファイル関連タスク(ファイル照会 / 読み込み / 書き込み、プロセスの実行など)
KeyLog 0x20120324 キーロガー
Nethood 0x20120215 ネットワーク共有リソース情報の照会
Netstat 0x20120215 TCP / UDP 接続テーブルの照会および TCP エントリ設定
Option 0x02120128 ワークステーションタスク
PortMap 0x02120325 具現されていない
Process 0x20120204 プロセス / モジュールの照会、プロセスの終了
RegEdit 0x20120315 レジストリ関連タスク(照会、生成、削除など)
Screen 0x20120220 スクリーンショットキャプチャおよびリモートデスクトップ
Service 0x20120117 サービス関連タスク(照会、制御、削除など)
Shell 0x20120305 遠隔制御シェル(パイプ通信)
SQL 0x20120323 SQL 関連タスク (情報照会、コマンド実行など)
Telnet 0x20120225 TELNET サーバーで動作
ClipLog 0x20190417 クリップボード情報の窃取
RDP 0x20190428 RDP 共有フォルダーを利用した伝播
Table 3. PlugX がサポートするプラグイン

窃取したデータが保存される位置はマルウェアごとに異なると推定される。例えば従来のレポートとは異なり、窃取したクリップボードデータはインストールパス内の「clang.aif」ファイルに、キーロガーデータは「ksys.aif」ファイルに保存される。

Figure 10. 窃取したクリップボードおよびキーロガーデータが保存されるファイル

5. 結論

最近、パッチされていない脆弱なソフトウェアを対象に、様々なマルウェアをインストールする事例が確認されている。脆弱性攻撃を通してインストールされるマルウェアとしては Sliver、Paradise ランサムウェアおよびコインマイナーマルウェアがあるが、最近では PlugX バックドアを配布する事例も確認されている。

PlugX は中国を拠点とした APT 攻撃グループが使用する代表的なバックドアマルウェアの一つであり、最近までも様々な機能が追加され、攻撃に使用され続けている。バックドアである PlugX がインストールされると、攻撃者はユーザーに気づかれることなく感染システムについての制御権を獲得し、これによってユーザーのキー入力情報およびスクリーンショットキャプチャを含んだ情報窃取、追加マルウェアのインストールのような様々な不正な振る舞いを実行することができる。

ユーザーはインストールされたソフトウェアの最新バージョンをパッチして、脆弱性攻撃を事前に防止しなければならない。また、V3 を最新バージョンにアップデートしてマルウェアへの感染を事前に遮断できるように注意を払わなければならない。

ファイル検知
– Malware/Win.Generic.C5387131 (2023.02.24.00)
– Trojan/Win.Loader.C5345891 (2022.12.30.02)
– Data/BIN.Plugx (2023.03.03.03)

ビヘイビア検知
– Malware/MDP.Download.M1197

IOC
MD5

– 709303e2cf9511139fbb950538bac769
– d1a06b95c1d7ceaa4dc4c8b85367d673
– d973223b0329118de57055177d78817b

ダウンロードアドレス
– hxxp://api.imango[.]ink:8089/http_dll.dll
– hxxp://api.imango[.]ink:8089/esetservice.exe

C&C アドレス
– cdn.imango[.]ink:443
– api.imango[.]ink:443
– api.imango[.]ink:53
– cdn.imango[.]ink:53

関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム「AhnLab TIP」サブスクリプションサービスを通して確認できる。

Categories:マルウェアの情報

Tagged as:

5 3 votes
評価する
Subscribe
Notify of
guest

0 コメント
Inline Feedbacks
View all comments