ランサムウェア

USBデバイスに潜む―中国のPlugXマルウェアは今も現役

Clock Icon 4 min read

This post is also available in: English (英語)

概要

最近、Unit 42のインシデントレスポンスチームがBlack Bastaによる侵害に対応したところ、被害者のマシンからGootLoader マルウェア、Brute Ratel C4レッドチームツール、古いPlugX マルウェアサンプルなど、複数のツールとマルウェアサンプルが発見されました。なかでも私たちの注目を引いたのがPlugXマルウェアでした。PlugXマルウェアは、フロッピードライブ、サムドライブ、フラッシュドライブなどのリムーバブルUSBメディアデバイスに感染し、それらの感染デバイスを挿入したべつのシステムへ感染を広げます。

さらにこのPlugXマルウェアは、本稿執筆時点で最新のWindowsオペレーティングシステム(OS)に対しても有効な斬新な手口を使ってUSBデバイス内に脅威アクターのファイルを隠します。この悪意のあるファイルは、Unix系(*nix)のOS上か、フォレンジックツールでUSBデバイスをマウントした場合にのみ閲覧できます。

また、USBデバイスに感染し、ホストからAdobe PDFファイルとMicrosoft WordファイルをすべてコピーするPlugXと似た亜種もVirusTotal上で見つかっています。この亜種は、自身が作成したUSBデバイス上の隠しフォルダ内にコピーしたファイルを格納します。

PlugXは、中国とつながりのある複数のグループのほか、複数のサイバー犯罪グループが使用する第2段階のインプラントです。10年以上前から存在し、2015年に発生した米国政府人事管理局(OPM)の情報漏えい事件をはじめ、注目を集めたサイバー攻撃でも観測されてきました。モジュール式のマルウェアフレームワークを持ち、長年、機能を拡張しながらの提供が続いています。

パロアルトネットワークスのお客様は、Cortex XDRWildFireを通じ、本稿で取り上げた種類の脅威からの保護を受けています。

関連するUnit 42のトピック PlugX, Brute Ratel C4

はじめに

今回のGootLoaderやBrute Ratel C4、PlugXのように、調査のなかで複数のマルウェアサンプルが見つかることは珍しくありません。多数の脅威アクターが同じ標的を侵害し、被害を受けたマシン上に共存することがあります。

これらのマルウェアサンプルが単一グループの残したものか複数のグループが残したものかは断定できません。したがってこれらのツールをBlack Bastaランサムウェアグループに帰属させることはいたしません。ただし本事例で使用されたBrute Ratel C4のバージョンはTrend Microが報じたBlack Bastaランサムウェアグループの関与した事例と同じバージョンでした。

PlugXマルウェアの感染

歴史的にPlugXの感染はデジタル署名されている既知の信頼されたソフトウェア アプリケーションをハイジャックし、アクターが作成した暗号化済みペイロードをロードさせるところから始まります。この技術は2010年から使用されており、MITRE ATT&CKの技術には「Hijack execution flow DLL-Side loading ID: T1574.002 Sub-technique T1574」として記載されています。

本事例でアクターらはマルウェア解析/リバース エンジニアリングのコミュニティが使う「x64dbg」と呼ばれるポピュラーなWindows用無料オープンソース デバッグ ツールを乗っ取ることにしたようです。X64dbgアプリケーションはオープンソース開発者のDuncan Ogilvie氏によりデジタル署名されています。

同ツールの開発者は、64-bitアプリケーション用のx64と32-bitアプリケーション用のx32という2種類のデバッガーアプリケーションを提供しています。私たちの事例では、x64dbgの32-bit版デバッガーであるx32dbg.exeが使われていました。

x32dbg.exeを実行すると、Microsoft Windowsはこのアプリケーションの実行に必要な依存ファイルを解決しようとします。このさい、検索はその場所(つまり現在の作業ディレクトリ)から始まります。見つかったところで必要なファイルがロード・実行されます。

X32bridge.dllは、Windowsのx32dbg.exeが依存しているDLL(ダイナミックリンクライブラリ)ファイルです。正規のx32bridge.dllも同じデジタル署名がされています。本事例では、このファイルが署名されていません。

ロードされたマルウェアはアクターが作成した暗号化ペイロードファイルのx32bridge.dat (SHA256:e72e49dc1d95efabc2c12c46f3731f2e20dab715caf58b1be9ca41ec0e172)をその場から検索します。

X32bridge.datは2021年1月22日にVirusTotalに初めて提出されました。2022年12月15日現在で61社あるAVエンジンのうち8社の検出スコアが存在しています。ただしどのAVエンジンも同ファイルをPlugXマルウェアとは識別していません。

メモリ上にロード・復号されたマルウェアは、ホストと接続されたリムーバブルUSBデバイスをPlugXマルウェアに感染させます。図1は、x64dbgのDLLハイジャックを利用したPlugX DLLのサイドローディングの様子を示しています。

画像1はPlugX DLLがサイドロードされるまでの流れを示した図です。
図1. x64dbgでPlugXのDLLをサイドローディングする

「x64dbgのハイジャック」、「ハイジャック挙動とマルウェアPlugXとの関連性」、これらはいずれも2020年11月にSophosが報告した内容です。SophosのブログではこのマルウェアをKilllSomeOneと呼んでいます。この名前はバイナリに含まれるプログラム データベース(PDB)の文字列からきています。

Sophosはすばらしい手腕でサンプルを分析したのち、USB感染についてもふれています。私たちは本事例のサンプルの挙動がSophosの報告で説明されている挙動と合致することを確認しました。そこで私たちは、USB感染、野生(in the wild)のUSB亜種、PlugXマルウェアとの関連に焦点を当てて調査を拡大したいと考えました。

PlugXマルウェアUSBの概要

PlugXマルウェアがUSBデバイスにファイルを隠す技術には、特定のUnicode文字が使われています。この技術によってWindowsエクスプローラやコマンドシェル(cmd.exe)にUSBのディレクトリ構造やファイルが表示されなくなり、被害者からは見えなくなります。

このPlugXマルウェアがディレクトリに使用するUnicode文字は00A0(ノーブレークスペースと呼ばれる空白文字)です。ノーブレークスペースは、エクスプローラ内に名前のないフォルダを表示するかわりに、Windowsオペレーティング システムがディレクトリ名を画面に描画するのを防ぐことでディレクトリを隠します。

隠しディレクトリからマルウェアのコード実行を実現するために、USBデバイスのルートフォルダ上にはWindowsショートカット(.lnk)ファイルが作成されます。このマルウェアへのショートカットパスにはUnicodeの空白文字(改行されないスペース)が含まれていますが、Windowsエクスプローラでは見ることができません(図2)。

画像2はWindowsエクスプローラーの画面です。USBドライブのプロパティ(TESTDRIVEという名前)のショートカットタブが表示されています。この図にはTarget type (ターゲットの種類)、Target location (ターゲットの場所)、Target (ターゲット)のフィールドが表示されています。このTarget(ターゲット)のフィールドには拡張ASCII文字を含む隠しディレクトリが表示されています。
図2. 隠しディレクトリにアクセスするWindowsショートカットのプロパティ

このショートカットファイルをバイナリエディターで表示すると、この文字の16進数表記は図3でハイライト表示した部分になります。

画像3は拡張ASCII文字をハイライト表示したバイナリエディターの画面です。2箇所とも「00A0」です。
図3. Windowsショートカットのプロパティをバイナリエディターで表示したところ

PlugXマルウェアは.lnkファイルの作成にCOM (Component Object Model)インターフェースを使ってUnicode文字00A0を含めます。これはシェル デスクトップのインスタンスを作成して関連するWindowsのショートカットファイルを作成することで実現しています。ShellLink::SetArgumentsメソッドを使ってUnicodeのノーブレークスペース文字を含むコマンドライン引数を設定します(図4)。

画像4はCOMのShellLinkのコマンドライン引数の画面です。
図4. COMのShellLink::SetArguments

最後にShellLink::Saveメソッドですべての変更を含むショートカット ファイルを保存します。

PlugXマルウェアUSBの感染

PlugXマルウェアx32bridge.dllx32bridge.datをロードします。このx32bridge.datがホストにマルウェアのインプラントを行い、フロッピーやサムドライブ、フラッシュドライブなどのリムーバブルUSBメディアデバイスに感染させる役割を担います。リムーバブルメディアデバイスが見つかると以下が実行されます。

  1. 次のディレクトリ構造を作成します。
    <usb volume>:\u00A0\u00A0\RECYCLER.BIN\files (例: F:\ \ \RECYCLER.BIN\files)
  2. 各フォルダにdesktop.iniという隠しファイルを作成し、この隠しファイルがフォルダにアイコンを指定します。このファイルには次のデータが含まれます。

[.ShellClassInfo]IconResource=%systemroot%\system32\SHELL32.dll,7

Windows OSは、デスクトップにショートカットとして表示するアイコン画像を、ファイルを使って取得するか、Windowsエクスプローラーのファイルやフォルダから取得します。Shell32.dllファイルにはアイコンのリストとユニークな番号が含まれています。今回の場合、以下の図5のように、ドライブのアイコンと数字の「7」が使われています。

画像5は、ドライブのアイコンのスクリーンショットで、青い背景に緑のランプが光っているドライブが表示されています。下には「7」という数字が表示されています。
図5. ドライブアイコン7

隠しファイルを有効にした状態でWindowsエクスプローラで表示した場合、このドライブアイコンが使われているディレクトリはドライブとして表示されます。削除された場合、ディレクトリはフォルダとして表示されます。

  1. 2つめのディレクトリにRECYLER.BINというサブフォルダを作成します。このディレクトリはごみ箱として機能します。このディレクトリの中には、filesというサブディレクトリがあり、desktop.iniというファイルが隠されています。このdesktop.iniファイルには、次のデータが含まれています。

[.ShellClassInfo]

CLSID = {645FF040-5081-101B-9F08-00AA002F954E}

このCLSIDは、作成されたRECYCLER.BINフォルダにごみ箱のアイコンを付与し、ごみ箱のディレクトリとして表示するようにWindowsエクスプローラに指示するものです。その様子をサンプルとして図11に示します。

  1. filesサブフォルダには、PlugXマルウェアのx32dbg.exe、暗号化されたアクターの .datファイル、アクターの悪意のあるDLLのコピーが格納されています。その例を下の図6に示します。
画像6はfilesというサブフォルダ内をWinHexで閲覧したスクリーンショットです。Name(名前)、Extension(拡張子)、Size(サイズ)、Created(作成日時)、Modified(変更日時)、Accessed(アクセス日)、Attribute(属性)、1st Sector(第1セクター)の各列が表示されています。
図6. 感染したUBSリムーバブルデバイスをWinHexで表示したところ

なおUSBデバイスへの感染前にリムーバブルデバイスのルートにある既存のファイルやディレクトリは、USBデバイスの2番目の隠しフォルダに移動されます(図7)。

画像7は感染前のUSBデバイス(左)と感染後のUSBデバイス(右)のルートディレクトリを左右に並べて比較したものです。
図7 感染前のUSBデバイスと感染後のUSBデバイスのルートディレクトリを並べて比較したところ
  1. 感染したUSBデバイスからのショートカットファイルがクリックされるたび、PlugXマルウェアはWindowsエクスプローラを起動し、そのディレクトリのパスをパラメータとして渡します。これにより、隠しディレクトリ内にあるUSBデバイス上のファイルを表示し、さらにそのホストをPlugXマルウェアに感染させます。被害者には自分のファイルが見えるので、すべて予期したとおりに動いているものと思い込んでしまいます。

図8は、Windowsエクスプローラがデフォルト設定(隠しファイルを表示しない設定)の場合に、感染したUSBメモリが被害者からどのように見えるかを示したものです。

画像8は感染したUSBドライブを表示しているWindowsエクスプローラーのスクリーンショットです。ここでは[隠しファイルを表示する]のオプションが無効になっています。
図8. Windowsのエクスプローラーが感染したUSBリムーバブルデバイスを表示したところ。隠しファイルの表示が無効の状態。
感染したPlugX USBデバイスのルートフォルダにはファイルやディレクトリは存在せず、.lnkファイルが1つだけ存在しています。

図9では、ショートカットファイルがTESTDRIVEとなっていて、USBデバイス名と一致していることがわかります。このショートカットファイルの役割は、ホストに感染し、自身がクリックされるたびにUSBデバイスの隠しディレクトリに移動することです。たとえば図9で参照したショートカットファイルには次のデータが含まれています。

%comspec% /q /c " \ \RECYCLER.BIN\files\x32dbg.exe"

被害者がこのショートカットをクリックすると、USBデバイス上の隠しファイルのディレクトリからcmd.exe経由でx32dbg.exeが起動します。これでこのUSBデバイスを挿したホストはPlugXマルウェアに感染した状態になります。

[隠しファイルを表示する]を有効にし、Windowsエクスプローラで感染したUSBデバイスの内容を表示すると、被害者には以下のように表示されます(図9)。

画像9はUSBドライブのルートフォルダを表示したWindowsエクスプローラーのスクリーンショットです。
図9 Windowsのエクスプローラーで感染したUSBリムーバブルデバイス(ルートフォルダ)を表示したところ

被害者から見て、最初の隠しディレクトリの中身は以下の図10のように表示されます。

画像10は、感染したUSBドライブのルートフォルダを表示したWindowsエクスプローラーのスクリーンショットで、最初の隠しディレクトリを表示したところです。
図10 感染したUSBリムーバブルデバイスをWindowsエクスプローラで表示したところ(1つめの隠しディレクトリ)

Windowsエクスプローラにはショートカットファイルのほかにもう1つ隠しディレクトリが表示されます(図11)。このショートカットファイルもやはりx32dbg.exeを起動するようになっており、当該USBデバイスを挿入されたホストに感染します。

2つめの隠しフォルダの内容を見ると、Windowsエクスプローラは次のようなディレクトリ構成を表示します。

画像11は感染したUSBドライブのルートフォルダを表示したWindowsエクスプローラーのスクリーンショットで、ゴミ箱を装ったフォルダが存在する2つめの隠しディレクトリを表示しています。
図11 感染したUSBリムーバブルデバイスをWindowsエクスプローラで表示したところ(2つめの隠しディレクトリ)

このディレクトリにはWindowsのごみ箱を装ったRECYLER.BINフォルダと、感染時にUSBデバイスのルートフォルダに存在していたファイルやディレクトリが含まれています。WindowsのエクスプローラでRECYLER.BINの内容を見ると、被害者には図12のように表示されます。

画像12はRECYCLER.BINフォルダの中身を示したWindowsエクスプローラーの画面です。専用ツールを使用しないと検出できない隠しマルウェアファイルが存在しています。
図12. Windowsエクスプローラで感染したUSBリムーバブルデバイス(RECYLER.BINフォルダ)を表示したところ

Windowsエクスプローラの初期設定は隠しファイルを表示しないので、被害者からはショートカットファイルしか見えません(図8)。また、隠しファイルの表示を有効にしていても、Windows Explorerやcmd.exeではfilesサブディレクトリに存在するマルウェアファイルは表示できません。

この悪意のあるファイルは、Unix系(*nix)のOS上か、フォレンジックツールでUSBデバイスをマウントした場合にのみ閲覧できます。図13は、UbuntuでこのUSBデバイスをマウントしてファイルマネージャーでブラウズしたときの様子です。

画像13はUbuntuのファイルマネージャーでUSBドライブの中身を閲覧した場合の見えかたを示したスクリーンショットです。
図13. 感染したUSBデバイスをUbuntuのファイルマネージャーで表示したところ

PlugXマルウェアUSBの感染後

同PlugXマルウェア亜種にホストが感染すると、マルウェアはUSBリムーバブルデバイスを継続的に監視するようになります。べつのUSBデバイスが見つかれば、そのデバイスに感染し、感染後はそのUSBデバイスのルートフォルダに書き込まれている新しいファイルを当該USBデバイス内の隠しフォルダに移動します。このWindowsのショートカットファイルはUSBデバイスに似せてあり、マルウェアは被害者のファイルを表示するので、被害者は知らないうちにマルウェアPlugXを拡散し続けることになります。

PlugXマルウェアUSBの亜種2

これまでに得た知識から、野生でもこれと同様のPlugX USB感染マルウェアが見られるかどうかが知りたくなりました。VirusTotalのファイルSHA256: 5b496972a86cea66aeecaac6e3f67a92e22f35cd5d2a98d54a2f1218fcd5dfc5は、x32bridge.datの挙動(具体的には、Sophosブログで言及されているWindowsタスク スケジューラのタスク作成とPDB文字列の作成)が一致します。

このファイルはWindows x86のPEファイル(DLL)で、x32bridge.datのインメモリ版に相当します。私たちの分析だと、インメモリ版の実行時の挙動は前述のx32bridge.datのUSB感染のものと同じですが、こちらには機能が1つ追加されています。ホストマシンからda520e5という名前の新しい隠しUSBサブフォルダにドキュメントをコピーする機能です。

具体的には、インメモリ版マルウェアはホストマシンからすべてのAdobe PDF・Microsoft Word文書をこの隠しUSBサブフォルダにコピーします。以下の図14はホストからコピーされたディレクトリとファイルのサンプルです。

画像14はFドライブのスクリーンショットです。PlugXマルウェアの亜種が漏出させた2つのファイルが表示されています。この画像にはName(名前)、Extension(拡張子)、Size(サイズ)、Created(作成日時)、Modified(変更日時)、Accessed(アクセス日)、Attribute(属性)、1st Sector(第1セクター)の各列が表示されています。
図14 同PlugXマルウェア亜種が漏出させたファイルが2つ表示されている

こちらのPlugX USBマルウェア亜種は、被害者から特定のファイルを漏出させ、それらを後で取り出せるように設計してあります。マルウェアはこれらのディレクトリとファイルを使っておらず、これらが被害者に表示されることもありません。

PlugXマルウェアとの関連性

USBの感染に加え、x32bridge.datとVirusTotalで見つかった2つめのPlugXマルウェア亜種はどちらも、ターゲット上の特定の実行中プロセスをチェックします。それらが見つかれば終了させ、それらの実行元のディレクトリも削除します。

X32bridge.datAAMから始まるプロセス名を探し出し、見つかればそのプロセスを終了させ、同プロセスに関連する特定のディレクトリを削除します。Sophosのブログでは「これは古いPlugXマルウェアの亜種を削除する動作ではないか」と推測しています。PlugXに帰属済みの以前の亜種はファイル名がAAM (AAM Updates.exeなど)で始まっていました。

私たちがVirusTotalで見つけた2つめの亜種もこのチェックを行っていて、やはりAAM Updates.exeを含む特定プロセスをチェックしていました。さらに、AAM Updates.exeが見つかった場合、AAM UpdatesikBというディレクトリを削除します。このフォルダもやはりPlugXマルウェアファミリーと関連付けられています。

x32bridge.datとVirusTotalで見つかった2つめのPlugXマルウェア亜種は、ほかの実行時の挙動にくわえてUSBの感染方法が同じであることから、実際にPlugXと関連しているものと結論できます。

結論

PlugXマルウェアは10年以上前から使われており、歴史的には中国の国家支援型APT攻撃グループと広く関連していました。年が経つにつれ、同ツールは国家支援型攻撃グループからランサムウェア攻撃グループに至るさまざまな脅威グループに採用・利用されるようになりました。

PlugXの典型的な手口は、良性のファイルを使ってDLLサイドローディングとも呼ばれるコード実行を実現するもので、いまでは多くのセキュリティベンダーがこの手口を検出・防止します。アクターがフロッピーディスクやメモリースティック、フラッシュドライブなどのリムーバブルメディアに接続されたUSBデバイス、そのUSBデバイスが接続されたほかのシステムに感染を広げる機能を追加した理由の一部は、こうした事情にあったと考えられます。

同マルウェア亜種に感染したホストは、新たな感染先USBリムーバブルデバイスを継続的に監視しています。また同PlugXマルウェアは、斬新な手口でアクターのファイルをUSBデバイスに隠し、*nix OS上か、フォレンジックツールでUSBデバイスをマウントした場合にのみ不正なファイルを閲覧できるようにします。こうした検出回避機能のおかげで、PlugXマルウェアの拡散は続き、エアギャップされたネットワークにも飛び火する可能性があります。

さらにVirusTotalでは、感染したホストのすべてのAdobe PDF・Microsoft WordドキュメントをPlugXマルウェアが作成したUSBデバイスの隠しフォルダにコピーする機能が追加された類似亜種も見つかっています。これらサンプルの発見は、少なくとも高い技術スキルをもつ一部の攻撃者の間ではPlugXの開発が続いており、これがいまも現役の脅威であることを物語っています。

パロアルトネットワークス製品をご利用のお客様は、弊社の製品・サービスにより本キャンペーンに関連する以下の対策が提供されています。

  • Cortex XDRをお使いのお客様は、本稿で取り上げたマルウェアの技術からエンドポイント上で保護を受けています。
  • クラウドベースの脅威分析サービスであるWildFireは、本稿で取り上げたマルウェアを「悪意のあるもの(malicious)」として正確に識別します。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.comまで電子メールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • 欧州: +31.20.299.3130
  • アジア太平洋: +65.6983.8730
  • 日本: +81.50.1790.0200

パロアルトネットワークスはファイルサンプルや侵害の兆候などをふくむこれらの調査結果をCyber Threat Alliance (CTA サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使用して、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細についてはCyber Threat Allianceにてご確認ください。

Unit 42 マネージド スレット ハンティング チームによるクエリ

IoC

既知のPlugXサンプル:

8ec37dac2beaa494dcefec62f0bf4ae30a6ce44b27a588169d8f0476bbc94115
e72e49dc1d95efabc2c12c46df373173f2e20dab715caf58b1be9ca41ec0e172
0e9071714a4af0be1f96cffc3b0e58520b827d9e58297cb0e02d97551eca3799
39280139735145ba6f0918b684ab664a3de7f93b1e3ebcdd071a5300486b8d20
41a0407371124bcad7cab56227078ccd635ba6e6b4374b973754af96b7f58119
02aa5b52137410de7cc26747f26e07b65c936d019ee2e1afae268a00e78a1f7f
2a07877cb53404888e1b6f81bb07a35bc804daa1439317bccde9c498a521644c
5d98d1193fcbb2479668a24697023829fc9dc1f7d31833c3c42b8380ef859ff1

既知のファイルディレクトリ

C:\ProgramData\UsersDate\Windows_NT\Windows\user\Desktop\
C:\Users\Public\Public Mediae\
<usb volume>:\u00A0\u00A0\RECYCLER.BIN\files
<usb volume>:\u00A0\u00A0\RECYCLER.BIN\files\da520e5

既知のWindowsミューテックス名

LKU_Test_0.1
LKU_Test_0.2
TCP_0.1

既知のPlugXの暗号化されたペイロードファイル名

akm.dat
precious.dat
x32bridge.dat
Groza_1.dat

既知のWindowsスケジュールタスク名

LKUFORYOU_1
PRECIOUS_0.1

既知のWindowsプロセス名(観測済みの悪用された良性ファイル)

x32dbg.exe
x32dbge.exe
Mediae.exe
Aug.exe
Precious.exe
SafeGuard.exe
Dism.exe

MITRE ATT&CKの技術

ATOM PlugXマルウェア

追加リソース

Enlarged Image