はじめに
当初は標準的なPythonベースのインフォスティーラーキャンペーンと思われた調査が、最終的にPureRATとして知られるフル機能のリモートアクセス型トロイの木馬(RAT)の展開に至ったことで、興味深い展開を見せました。この記事では、脅威アクターが独自開発したツールと既製のマルウェアを組み合わせた手口を分析します。このキャンペーンは、単純なフィッシングから始まり、インメモリローダー、防御回避、認証情報窃取の層を経て、最終的にPureRATというモジュール式のプロフェッショナルなバックドアを展開し、侵害されたホストを完全に制御するという、明確かつ意図的な進行を示しています。
脅威の詳細分析
この侵入は、多層的な難読化と戦術的進化の好例です。脅威アクターは、最終的な目的を隠すために、複雑さを増しながら10種類のペイロード/ステージを連鎖させました。
ステージ1:初期の誘引とPythonローダー
攻撃は、著作権侵害通知を装ったZIPアーカイブを含む従来のフィッシングメールから始まります。アーカイブには、正規の署名付きPDFリーダー実行ファイルと悪意のあるversion.dll
が含まれています。これは古典的なDLLサイドローディングの手法であり、信頼された実行ファイルに、同じディレクトリから悪意のあるDLLを誤ってロードさせます。
悪意のあるDLLは、隠しフォルダ「_」内のWindowsバイナリとファイルを使用して次のペイロードを実行します。certutil.exe
を使用して、Document.pdf
内に隠されたBase64エンコードされたブロブをデコードし、ZIPアーカイブを生成します。次に、バンドルされ名前が変更されたWinRAR(images.png
)を使用して内容を抽出します。この二次アーカイブから、ファイルはC:\Users\public\windows\
に抽出され、名前が変更されたPythonインタープリター(svchost.exe
)と難読化されたPythonスクリプト(images.png
)が含まれており、これらが実行されます。
この段階の攻撃は、Sysmonイベントによって捕捉されます:
- Type: Process Create
- Image: C:\Windows\SysWOW64\cmd.exe
- ParentImage: C:\Users\Malware\Desktop\sample\Detailed_report_document_on_actions_involving_copyrighted_material.exe
- CommandLine: cmd /c cd _ && start Document.pdf && certutil -decode Document.pdf Invoice.pdf && images.png x -ibck -y Invoice.pdf C:\Users\Public && start C:\Users\Public\Windows\svchost.exe C:\Users\Public\Windows\Lib\images.png ADN_UZJomrp3vPMujoH4bot
ペイロード2
Pythonスクリプトimages.png
(WinRARバイナリではない)は、大きなBase85エンコードされた文字列を含むローダーです。ペイロードはデコードおよび解凍された後、exec()
を使用して完全にメモリ内で実行され、ペイロード3を開始します。
ペイロード3
ペイロード3をdis
(バイトコードを人間が読める解釈に変換するための組み込みモジュール)で実行すると、これが別のローダーであり、今回はカスタムの暗号化ローダーであることが明らかになります。RSA、AES、RC4、XORを組み合わせたハイブリッド暗号化スキームを使用して、ペイロード4を復号します。
ペイロード4
このペイロードは、Pythonの組み込みwinreg
ライブラリを使用してシステムレジストリキーを変更し、正規のWindowsコンポーネントのように見えるように設計された実行キーを追加します:Windows Update Service。この値に保存されているデータは、マルウェアの最初のステージを再実行するコマンドであり、侵害されたユーザーがログインするたびに感染チェーン全体が再開されることを保証します。
cmd /c start C:\Users\Public\Windows\svchost.exe C:\Users\Public\Windows\Lib\images.png <sys.argv[1]>
ペイロード4はその後もローダーパターンを継続し、今回はTelegramボットの説明とURL短縮サービス(is[.]gd
)を使用して、次のペイロードを動的にフェッチして実行し、脅威アクターに攻撃チェーンを更新するための柔軟なメカニズムを提供します。
ステージ2:最初の武器化されたペイロード — Pythonインフォスティーラー
is[.]gd
から次のステージをダウンロードすると、最初の武器化されたペイロードであるPythonベースのインフォスティーラーに到達します。復号されたバイトコードの分析により、ChromeおよびFirefoxベースのブラウザから認証情報、クッキー、クレジットカード、自動入力データなど、広範囲の機密データを収集する機能が明らかになります。
盗まれたデータはすべてZIPファイルにアーカイブされ、Telegram Bot APIを介して外部に送信されます。ZIPファイルのメタデータには、この攻撃の背後にいる可能性のある人物への手がかりが含まれています。Telegramハンドル@LoneNoneを指す連絡先フィールドです。このハンドルは、PXA Stealerマルウェアファミリーと公に結びつけられており、強力な帰属リンクを提供します。
Telegram APIは、以下のロジックに基づいて、結果のZIPとメッセージをさまざまなTelegramチャットに送信するために使用されます:
- CHAT_ID_NEW (-1002460490833): メインデータ用。Count == 1の場合、ZIPアーカイブとメッセージを送信。
- CHAT_ID_RESET (-1002469917533): フォールバックまたは再感染用。Count != 1の場合、ZIPアーカイブとメッセージを送信。
- CHAT_ID_NEW_NOTIFY (-4530785480): 通知チャネル用。Count == 1の場合、メッセージのみの通知を送信。
ステージ3:.NETへの転換
キャンペーンの目的が明確になったと思われた矢先、脅威アクターは転換します。ステージ3は、解釈されたPythonスクリプトからコンパイルされた.NET実行ファイルへの大きな変化を示します。
新しいステージは、0x0[.]st
(「無駄のないファイルホスティングおよびURL短縮サービス」)から取得されます。このステージは以前のPythonスクリプトよりもはるかに大きく(40KB → 約3MB)、さらに2つの埋め込みペイロードが含まれています。最初のバイナリは、Base64とRC4のハードコードされたキーを使用して復号される.NETアセンブリです。脅威アクターは、正規の.NETユーティリティであるRegAsm.exe
を一時停止状態で起動し、プロセスホローイングを使用します。これにより、プロセスのメモリから元の実行可能コードがアンマップされ、新しいメモリ領域が割り当てられ、悪意のある.NETペイロード(ペイロード7)がそこに書き込まれます。メインスレッドのコンテキストは新しいエントリポイントを指すように更新され、スレッドが再開され、正規のMicrosoftバイナリを装って悪意のあるコードが実行されます。
ペイロード7
これは最初のPEペイロードであり、デバッグ文字列が作者によって残されており、2つの主要な防御回避技術を実行していることが確認されます:
- AMSIパッチ適用:
amsi.dll
内のAmsiScanBuffer
関数にパッチを適用し、動的にロードされたコードをアンチマルウェアスキャンインターフェースが検査するのを防ぎます。 - ETWアンフック:
ntdll.dll
内のEtwEventWrite
にパッチを適用し、EDR製品のテレメトリの一般的なソースであるEvent Tracing for Windowsを無効にします。
このアセンブリには、さらに別の埋め込みペイロード(ペイロード8)が含まれており、単純なBase64とXORの組み合わせを使用してデコードされます。ペイロードが復号されると、組み込みの.NETメソッドAssembly.Load
に渡され、実行可能ファイルがメモリに直接ロードされます。フローはgetEntryPoint
を介して続き、ロードされたアセンブリのエントリポイントを取得し、最後にinvokeCSharpMethod
がリフレクションを介してメソッドを実行します。
ペイロード8
このペイロードは、AES-256とGZip解凍を使用して、9番目の最終ステージであるMhgljosy.dll
というDLLを解凍します。従来のエクスポートに依存する代わりに、ローダーは.NETリフレクション(Assembly.Load()
、GetType()
、GetMethod()
)を使用してDLLを完全にメモリにロードし、特定の難読化されたメソッドを呼び出して実行を開始します。
ペイロード9:最終段階 — PureRAT
8つのペイロード/ステージのローダー、スティーラー、難読化を経て、ついに最後のペイロードMhgljosy.dll
に到達します。しかし、このDLLはリバースエンジニアリングを妨害するために、商用の難読化ツールである.NET Reactorで保護されています。
静的分析は行き詰まりとなるため、難読化解除に目を向けます。オープンソースツールであるNETReactorSlayerを使用して、制御フローのリダイレクトと文字列暗号化の大部分を取り除き、より読みやすいアセンブリを生成することができました。クリーンなバイナリで、以前のペイロードで特定されたエントリポイントを分析します。
難読化解除された制御フローを追跡すると、最初にReceiveAttachedSubscriber
に到達します。このメソッドのすぐ上にBase64ブロブが見られます。デコードロジックは次のとおりです:
- Base64デコード:初期文字列がデコードされます。
- GZip解凍:Base64デコードされた出力はGZipヘッダーを示します。
- Protobuf逆シリアル化:解凍されたデータは、Protocol Buffers(protobuf)スキーマを使用して逆シリアル化されます。これにより、マルウェアの構成が明らかになります。
最終的に逆シリアル化された構成には、C2インフラストラクチャが含まれています:IPアドレス(157.66.26[.]209
)、ポートのリスト(56001, 56002, 56003
)、およびX.509証明書にデコードされる別のBase64ブロブ。マルウェアは、この証明書をTLSピンニングに使用し、C2通信が暗号化され、中間者攻撃に対する耐性があることを保証します。注目すべきは、このC2サーバーがベトナムに位置していることであり、これがPXAとその背後にいる人々がベトナム人である可能性をさらに裏付ける証拠となります。
C2に接続されると、RATは初期の「hello」パケットでオペレーターに情報を送り返します。これは、メソッド名の難読化により理解が困難なロジックで構成されています。手動で難読化を解除すると、ホストマシンの徹底的なフィンガープリント(システム情報の収集)が行われ、C2サーバーに送り返されることがわかります。
このフィンガープリントルーチンで使用されるすべての機能の内訳は次のとおりです:
- アンチウイルス製品:WMI(
root\SecurityCenter
)をクエリして、インストールされているすべてのアンチウイルス製品のdisplayName
を取得します。 - 一意のホストID:プロセッサID、ディスクドライブのシリアル番号、物理メモリのシリアル番号、およびユーザーのドメイン名に基づいてMD5ハッシュを生成することで、被害者マシンの一意の安定した識別子を作成します。
- ウェブカメラの存在:WMIをクエリして、クラスがImageまたはCameraのPnPデバイスを検索します。
- ユーザーとドメイン:現在のユーザー名とドメイン(
username [DOMAIN]
)を収集します。 - 特権レベル:現在のプロセスのWindows IDを組み込みロール(Administrator、User、Guestなど)に対してチェックし、その特権レベルを判断します。
- オペレーティングシステム:OSのバージョンとアーキテクチャ(例:「Windows 10 64Bit」)を収集します。
- 暗号通貨ウォレット:Chrome拡張機能ID、ファイルシステムパス(
%APPDATA%
)、およびレジストリキーをチェックすることで、数十のブラウザベースおよびデスクトップ暗号通貨ウォレットを検索します。(注:この機能はデータを収集せず、システムに存在するものを文字列で返します。) - システムアイドル時間:
GetLastInputInfo
APIを使用して、ユーザーがアイドル状態であった時間を判断し、ユーザーが離れているときにオペレーターが操作できるようにします。 - インプラントパス:ディスク上の自身のファイルパスを報告します。
初期のホストフィンガープリントが完了し、C2とのハンドシェイクが確立されると、RATはその主要な機能である永続的なタスクループに移行し、コマンドを受信して実行するように設計されています。このアーキテクチャにより、このRATは動的なローダーとして機能します。インプラントは休止状態にあり、オペレーターがオンデマンドでモジュールをプッシュダウンするのを待ち、初期の偵察をはるかに超えてその機能を動的に拡張します。
PureRATを明らかにする最後のヒント
.NETの名前空間は、PureHVNCへの言及とともに、このサンプルがPure Hidden VNCに関連しているという別の手がかりを与えます。これは、以前「PureCoder」というエイリアスで販売されていたコモディティマルウェアです。
PureHVNCは現在ではレガシーですが、そのモジュールの多くはPureCoderの新しいマルウェアファミリーに引き継がれており、それぞれが特定の目的を果たすように設計されています:
- PureCrypter:マルウェアを正規のプロセスに注入し、検出を回避し、アンチVMおよびアンチデバッグチェックで分析を妨害するために使用されるクリプター。
- BlueLoader:感染したシステムに追加のペイロードを展開するローダーで、攻撃者にマルウェアキャンペーンをステージングおよび更新する簡単な方法を提供します。
- PureMiner:被害者のCPUおよびGPUリソースを乗っ取り、同意なしに攻撃者のために暗号通貨をマイニングするサイレントクリプトジャッカー。
- PureLogs Stealer:ブラウザデータ、保存された認証情報、セッショントークンを外部に送信し、多くの場合、それらを攻撃者のTelegramに直接配信するインフォスティーラー。
- PureRAT:暗号化されたC2チャネルを確立し、オペレーターが追加モジュールをロードできるようにするモジュール式バックドア。
- PureClipper:システムクリップボードを監視して暗号通貨アドレスを検索し、コピー&ペースト操作中に攻撃者制御のアドレスに置き換え、暗号通貨取引をリダイレクトして資金を盗みます。
ここで観察されたこのアーキテクチャと機能セットは、PureRATと完全に一致しています。開発者はこのツールを、軽量でTLS/SSL暗号化されたクライアントと多言語GUIを備えたカスタムコードの.NETリモート「管理ツール」として公然と宣伝していました。
結論
繰り返し現れるTelegramインフラストラクチャ、@LoneNoneへのメタデータリンク、そしてベトナムに追跡されたC2サーバーは、これがPXA Stealerの背後にいる人々によって実行されたことを強く示唆しています。彼らがPythonペイロードの素人じみた難読化から、PureRATのようなコモディティマルウェアの悪用へと進化したことは、単なる執着だけでなく、深刻で成熟したオペレーターの証でもあります。
脅威アクターは、PythonバイトコードローダーやWMI列挙から、.NETプロセスホローイングやリフレクティブDLLローディングまで、複数の言語と技術に熟練していることを示しました。より広い視点で見ると、カスタムコードのスティーラーから商用RATであるPureRATへの転換は重要です。これにより、攻撃者にとって参入障壁が低くなり、広範な開発努力を必要とせずに、安定した機能豊富な「プロフェッショナルに」維持されたツールキットにアクセスできるようになります。その影響は、広範なデータ窃盗、監視、後続攻撃、および長期的な永続性を可能にする、より回復力があり、モジュール式で危険な脅威です。
このキャンペーンは、多層防御の重要性を強調しています。初期アクセスはユーザーの実行に依存し、ローダーは信頼されたシステムバイナリを悪用し、最終ステージは防御回避を使用して隠蔽されました。単一の制御では、このチェーン全体を止めることはできませんでした。certutil
の悪用からWMIクエリ、暗号化されたC2トラフィックまで、ここで概説されている特定の動作を監視し、攻撃のライフサイクル全体を理解することで、組織はより回復力のあるセキュリティ体制を構築できます。