ClickFixと偽ダウンロードキャンペーン全体でPavinLoaderを追跡する

| 2026年8月24日
ClickFixと偽ダウンロードキャンペーン全体でPavinLoaderを追跡する

以前に行った悪意のあるRenPyキャンペーンの分析において、感染チェーンの一部として展開される多段階ローダーを特定しました。

その後の脅威調査により、当社がPavinLoaderとして追跡している同じローダーが、ClickFix攻撃や偽ソフトウェアダウンロードなど、複数の異なるキャンペーンで使用されていることが判明しました。 

これらのキャンペーンが被害者に到達する方法は異なっているものの、いくつかの共通点が見つかりました。これには、高度に難読化されトロイの木馬化された.NET DLLを含む多段階感染チェーン、MSBuildの悪用、 .csproj、そして .bat 実行するためのファイル、およびコマンド&コントロール(C2)ドメインを取得するためのEtherHiding。 

攻撃の様子

攻撃キャンペーンはすべて同じように始まるわけではありません。被害者は、コマンドを実行するように指示したり、正規のソフトウェアのように見えるものをダウンロードさせたり、悪意のあるゲームをインストールさせたりするような、偽のCAPTCHAに遭遇する可能性があります。

次に起こることは、はるかに一貫性があります。PavinLoaderは正当なWindows このマルウェアは、悪意のある.NETファイルと並行してツールを使用し、マルウェアの複数の段階を実行します。また、ブロックチェーンを利用してインフラストラクチャに関する情報を隠蔽するEtherHidingという技術を用いて、追加のマルウェアを取得すべきサーバーを特定します。

我々が分析したRenPyキャンペーンでは、そのプロセスが最終的に、感染したコンピュータから情報を盗むように設計されたマルウェアであるAmatera Stealerへと繋がった。また、PavinLoader感染によって追加のマルウェアが拡散されることも確認された。

PavinLoaderは複数のキャンペーンに登場しています。

複数のキャンペーンクラスターでPavinLoaderを検出しました。 

  • 以前のブログ記事で分析した悪意のあるRenPyキャンペーン
  • ClickFixの複数のキャンペーン、特に前回の分析で取り上げたオペレーターによる最近の活動
  • Dropboxを利用してPavinLoaderをダウンロードさせる偽ソフトウェアキャンペーン。 

このローダーが複数のキャンペーンで使用されていることから、PavinLoaderがローダー・アズ・ア・サービスとして提供されている可能性が示唆される。

また、この可能性を裏付けるいくつかの痕跡も発見しましたが、確証を得るには至っていません。VirusTotalで確認されたある特定の痕跡は、PavinLoaderに関連する200以上のファイルで共有されており、ビルドプロセスのコンパイル痕跡である可能性を示唆しています。

また、VirusTotalにアップロードされたPowerShellスクリプトには、次のようなコメントが含まれていました。 EDIT HERE そして REPLACE with a real direct link to your .bat関連するBATファイルには文字列が含まれています Automated builder helper.

しかしながら、PavinLoaderが商用販売されていることを確認できるような開発パネルや販売チャネルは見つかっていません。

PavinLoaderは時間の経過とともに変化してきたものの、我々が分析したキャンペーンにはいくつかの共通点がある。

  • Inno Setup または MSI インストーラーは、異なるビルダーで生成され、 .bat および/または .csproj ファイル
  • DotNetZip、Nancy、Renci.SshNet、OpenXMLなどのトロイの木馬化された.NET DLL。分析されたほとんどのケースでは、挿入された悪意のあるメソッドは、 TwoWords または TwoWordsNumber 命名パターン、例: DefaultEvaluator5、 そして FallbackFactory5
  • .NET DLL 全体で一般的に使用されている難読化手法
  • 2 つのランダムな単語に基づく命名規則、例: GollopDevest, UnbrandRunover、そして PavinWideDLL名、関数、文字列、C2パス、その他のアーティファクトについて
  • EtherHidingを使用してC2ドメインを取得し、その後、次のようなパスを使用したHTTPリクエストを実行します。 assets/{two random words}.json 後続のステージを取得するため。C2ドメインは一般的に .lat, .icu, .shop、そして .cfd トップレベルドメイン
  • DLL からコードをロードおよび実行するための MSBuild メカニズム。プロパティ関数などが含まれます。 [System.Reflection.Assembly]::Load(...) そして UsingTask
  • 繰り返し出現するファイル名のパターン、例えば name_4characters.cmd/bat/msi/exe-例えば、 prefetch_9a59.cmd, telemetry_55db.cmd、そして bootstrap_64be.cmd—またはランダムな9文字の名前、例えば aegZpQ4C7.batまた、以下のような短い名前も確認しました。 Small.msi, small.bat、そして small.cmd

PavinLoaderは複数の.NET DLLで構成されており、分析したケースでは以下の段階が確認されました。 

  • ローダーDLL :トロイの木馬化されたDLL(前回のRenPyの記事で分析したNancyのようなもの)またはカスタムDLL。フォレンジック対策および解析対策操作を実行し、次の操作に必要なネットワーク設定を変更し、EtherHiding Loaderをロードします。
  • EtherHiding Loader DLL :EtherHidingを介してC2を取得し、そこから次のステージをダウンロードします。 
  • アンチ解析DLL :仮想化環境を検出するために、広範なアンチ解析チェックを実行します。 
  • PE Loader DLL :最終的なPEペイロードをロードします。

中間ペイロードは、キャンペーン構成によって異なります。まず、PavinLoaderの初期段階を配布するために使用されるいくつかの方法を見ていきます。次に、前回の記事で分析したRenPyローダーキャンペーンに戻り、ローダーの後期段階を検証します。 

テクニカル分析

この記事の残りの部分では、PavinLoaderがどのように配布されているか、そしてローダーの各段階がどのように機能するかを詳しく見ていきます。

PavinLoaderの配信方法

私たちは、複数のClickFixキャンペーンを通じてPavinLoaderが配信されていることを確認しました。

特に、以前の研究で分析したClickFixクラスターは、 記事 最近、PavinLoader の使用を開始しました。MSBuild の乱用と使用 .csproj そして .bat 我々が観察した感染経路全体を通して、ファイルは共通して存在していた。

前回のRenPy分析では、1つの例を取り上げました。今回は、他のいくつかの配布方法を見ていきましょう。 

以前のClickFixキャンペーンの分析で確認したように、関連するPowerShellスクリプトは頻繁に変更されます。今回の活動では、難読化されたスクリプトと難読化されていないスクリプトの両方を含む、複数のバージョンが見つかりました。

この例では、Cloudflare バケットからダウンロードされた MSI は、 Installer_57be78.msi. 

パッケージの内容:

  • prefetch_2f76.exe: 正規の MSBuild 実行ファイル
  • prefetch_2f76.csproj: ローダーDLLを実行するために使用されます UsingTask
  • DotNetZip.dllローダーDLL

について .csproj ファイルは以下のように実行されます。

"C:\Users\{USER}\AppData\Local\Logitech\Device Configuration Helper\prefetch_2f76.exe" /nologo "C:\Users\{USER}\AppData\Local\Logitech\Device Configuration Helper\prefetch_2f76.csproj" /nr:false

Loader DLL は DotNetZip のトロイの木馬化されたバージョンであり、 UsingTask 要素。

前回の記事で説明した RenPy の例とは異なり、EtherHiding Loader は DLL 自体から抽出されます。埋め込みリソースがインデックスとして使用され、DLL から直接バイトを抽出します。 .csproj ファイル。

偽のBATファイルを含む別のキャンペーンを検出しました BUILD VERIFICATION REPORT 明らかに分析や検出をより困難にすることを目的としたコメント。

この場合、MSI CustomAction BATスクリプトを以下のように実行します。

cmd.exe /c C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd /launched

難読化されたコードは、偽のコメントの下に表示されています。複数の文字列を連結し、単純な数学演算によって生成されたインデックスを使用してそれらを再構築します。分析したほとんどのBATファイルで、この種の難読化が見られました。

BATファイルは conhost.exe そして、以下の内容で再始動する。

"C:\WINDOWS\System32\conhost.exe" --headless cmd.exe /c "C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd" /launched

次に設定します MSBUILDENABLEALLPROPERTYFUNCTIONS=1 環境変数、場所を特定します MSBuild.exeそして、同じファイルを入力として使用して実行します。

"C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" "C:\Users\{USER}\AppData\Local\Conexant\lite_bootstrap_2.1.7\updater_8219.cmd"

この場合、ローダーDLLは、Base64エンコードされた4つの変数を連結およびデコードすることによって再構築されます。

ローダーDLLはランダムな名前を持ち、リソースにカスタムバイトコードや暗号化された文字列が含まれていないため、古いバージョンであると思われます。

以前に分析した RenPy キャンペーンと同様に、このステージでは、EtherHiding Loader が、 Build-... CMD ファイル内のマーカーを介して _vezr 環境変数を取得し、32バイトのキーとのXOR演算を使用してデコードします。

PavinLoaderの最初の2段階を配布するために使用されるいくつかの方法を見てきたので、前回の分析で取り上げたRenPy感染チェーンに戻り、ローダー自体をより詳細に調べていきます。

PavinLoaderの分析

PavinLoader に関連付けられている .NET DLL は、制御フローのフラット化、カスタム バイトコード、間接呼び出しなどを使用して高度に難読化されています。 calli/ldftn、異なるアルゴリズムによる文字列暗号化、APIハッシュとデリゲート、冗長なメソッド、不要なコードと文字列。

サンプルに関連付けられた既知の難読化ツールは特定されなかったため、我々の知る限りでは、PavinLoaderは独自の難読化ツールを使用している。

サンプルを完全に難読化解除するのは複雑であるため、動的解析とリフレクションによるメソッド呼び出しを組み合わせたハイブリッドアプローチを採用しました。インポートとパラメータに基づいて重要なメソッドを特定し、それらを呼び出し、結果として得られた出力を分析しました。

この手法では実行フロー全体を網羅することはできませんが、ローダーの中核機能を特定し、その中間段階を抽出することができました。異なる関数が同じ名前を共有することがよくあるため、分析全体を通してメタデータトークンを使用してメソッドを識別します。

Nancyトロイの木馬DLL:ローダーDLL 

この段階については前回のブログ記事で詳しく解説しましたので、ここでは概要のみを説明します。

分析されたほとんどのケースでは、ローダーDLLはトロイの木馬化された正規のDLLです。悪意のある手法は通常、 {RandomWord} または {RandomWord_Number} 命名規則。

このDLLには、メインメソッドによって解釈されるカスタムバイトコードに関連付けられたリソース、暗号化された文字列を含む2つのリソース、そして場合によっては、次の段階を抽出するためのインデックスとして使用される追加のリソースが含まれています。その他のリソースは、解析を遅らせるために設計されたおとりであると思われます。解析したサンプルでは、​​このDLLは通常、以下のようになっています。

  • マルチキーXORを使用してリソースから文字列を復号します
  • APIハッシュを使用してAPIを解決し、 GetDelegateForFunctionPointer()
  • ネットワーク設定を変更します。これには、TLS証明書の検証の無効化や、デフォルトのシステムプロキシの設定などが含まれます。
  • アンチアナリシスタイミングチェックを実行します CreateEventW(), GetTickCount()、そして WaitForSingleObject()
  • 鑑識対策作戦を実行する
  • EtherHiding Loaderを、マーカーから抽出してロードします。 .csproj またはBATファイル、あるいはリソースをインデックスとして使用してDLLから直接バイトを取得する方法

GollopDevest: EtherHiding Loader 

EtherHiding Loaderには、主に2つの機能があります。1つはEtherHidingを介してC2ドメインを取得すること、もう1つはそのC2から後続のステージをダウンロードしてロードすることです。

クラス 0x02000762 ブロックチェーンおよびネットワーク通信に関連する文字列の復号化を担当する。

文字列は復号化されます 0x060027BD 次のように: 

  • 関数 0x060027BB マスターキーのXORを使用してSボックスを初期化します activeValues そしてBase64デコードされた optionsCollection
  • 関数 0x060027BE 取る childSyncObject 入力として受け取り、文字列の最初の 2 文字にエンコードされたヘッダー値に基づいて XOR と順列を使用してインデックス バイトを返します。
  • 関数 0x060027B9 インデックスと以前に生成されたSボックスを使用して復号化された文字列を返します。

この形式で暗号化パラメータがエンコードされているクラスは、私たちが調べた限りではこのクラスだけでした。

残りの文字列については、パラメータのシグネチャに基づいて復号化されたデータを返す関数(例えば、文字列やバイト列を返すメソッド)を特定し、リフレクションを用いてそれらを呼び出しました。これにより、1,300個以上の文字列を復元することができました。

それらの中には、AMSIおよびETWパッチに関連する文字列が含まれていた。

AmsiScanString
System.Management.Automation.AmsiUtils
System.Management.Automation.AmsiUtils+AmsiNativeMethods
ntdll
EtwEventWrite

NtQueryInformationProcess
NtSetInformationThread
VirtualProtect

正規のサービスに属する100以上のURLも復号化され、HTTPリクエストやネットワークノイズの生成に利用されています。この挙動はすべてのサンプルで確認されたわけではないため、ビルド固有の問題である可能性があります。

サーバー クラス (0x02000052) は X-Timestamp, X-Nonce、そして X-Signature HTTPヘッダーを取得し、後続のステージを取得するために使用されるリクエストを行います。

パラメータを同期してペイロードを取得するために2つのHTTPリクエストが送信され、リクエストの検証にはHMACが使用されます。リフレクションを使用してメソッドを実行しました。 0x06000A77 後続のステージを取得するために必要なヘッダー値を取得するため。

C2ドメインは、ETH RPC(リモートプロシージャコール)を行うことで取得されます。 bsc-dataseed.binance.org 以下のJSON-RPCボディを使用します。

{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0x328a1fadff154290f0ce1389a4e633698cdfdaa7","data":"0x06fdde03"},"latest"],"id":1783436775} 

次の段階は、結果として得られたC2ドメインからダウンロードされます。XORエンコードされたペイロードは、JSONレスポンスの以下の場所に格納されます。 cache.content:

{"type":"cache-binary","meta":{"version":"2.3.1","timestamp":"…","platform":"win32-x64"},"cache":{"id":"e2b69…","content":"1c.."}} 

この場合、この段階で復号されたC2パスとXORキー、および解析対策DLLは以下のとおりです。

パス XORキー タイプ/機能 
/assets/ExponeAboard.json QBBBfWow4lb PavinWride .NET DLL、アンチアナリシス  
/assets/MailersKogasin.json WjcsVTKmuoBRqe GollopDevest .NET DLL、PEローダー 
/assets/LanoseThrip.json WwUX66Br WPA.exe PE実行可能ファイル、Amatera Stealer 

次に実行される段階は、アンチ解析DLLです。 

PavinWride: アンチ解析DLL 

このDLLは、複数の解析対策チェックを実行する役割を担っています。 

アンチ解析DLLは、システムコールをさまざまな方法で実行します。 

  • Standard .NET 基本クラスライブラリ (BCL) の呼び出し(レジストリ操作やネットワーク操作を含む)
  • Win32 P/Invoke 呼び出し、以下を含む GetCurrentThread, NtQueryInformationThread, NtQueryInformationProcess、そして NtCurrentTeb
  • Win32 APIはAPIハッシュとプロセス環境ブロック(PEB)エクスポートテーブルのウォークによって解決されます。

機能 MenuItemService.ProcessDirectory (0x06000151) デリゲートのキャッシュとWin32 APIの解決を担当する主要なメソッドです。  

  • デリゲートが既に解決されているかどうかを確認します managerMap.TryGetValue() 
  • そうでない場合は、 ProcessDirectory (0x06000150) HMODULEハンドルを取得する
  • それは呼びかけます ProcessDirectory (0x0600003A) PE エクスポート テーブル ウォークを実行し、ハッシュを照合します。他のいくつかの方法 (例: 0x06000039, 0x0600003B, 0x0600004E)
  • 委任状を取得する GetDelegateForFunctionPointer() そしてそれを辞書に保存します

文字列を取得するために、同じ反射アプローチを使用しました。多くの文字列はXORキーで暗号化されています。 4B729A1F5CE387D6

ローダーは、以下の方法でシステムのLCIDを取得します。 GetKeyboardLayoutList() そして、ロシア語、ウクライナ語、ベラルーシ語、アルメニア語など、17以上の言語と比較している。

また、レジストリ キーの列挙や Win32 API の呼び出しなど、広範なシステム偵察も実行します。 GetSystemFirmwareTable() そして EnumSystemFirmwareTables() 仮想化環境を識別する。

カテゴリ 価値 
PCIベンダー/デバイスID VEN_80EE, VEN_15AD, VEN_1AB8, VEN_5853, VEN_1AF4, VEN_1234&DEV_111、…
SMBIOS/ACPI OEM ID VMWARE, VBOX, BOCHS, VRTUAL, MSFTVM, MSHYPR, Xen, Parall, BHYVE, AMAZON, Google
ACPIテーブル署名 VBOX, BXPC, VMW, Xen, PRLS, AMZN, MICR
BIOS/製造元/製品文字列 vmware, vmw, innotek, virtualbox, vbox, qemu, seabios, bochs, standard pc, kvm virtual machine, xen, hvm domu, parallels
解析対策チェックに関連する文字列

また、以下のようなAPIへの復号化された参照も確認しました。 GetCurrentProcess(), CreateToolhelp32Snapshot(), Process32First(), Process32Next()、そして OpenMutex()ただし、我々の実行フローではこれらの関数が呼び出される様子は確認されませんでした。

以下のいずれかのサービスに対してHTTPリクエストも送信されます。 

  • https://ipv4[.]ipleak[.]net/json/
  • https://get[.]geojs[.]io/v1/ip/geo[.]json
  • https://ipapi[.]co/json/
  • https://api[.]ipapi[.]is/
  • https://ipinfo[.]io/json

また、返されたデータを96のホスティングプロバイダーまたはインフラストラクチャプロバイダーと照合し、地域コードが以下のいずれかであるかどうかをテストします。 RU, UA, BY, AM, KZ, KG, TJ, UZ, GE, AZあるいは MD.

プロバイダーに関連付けられた復号化された文字列クリックして拡大

解析対策チェックに合格した場合、次の2つの段階がダウンロードされ、XORキーを使用して復号化されます。

パッチを適用しました SelectionScope.ProcessDirectory (0x06000014)これらの段階のC2パスとXORキーを復元する:

/assets/MailersKogasin.json|WjcsVTKmuoBRqe|/assets/LanoseThrip.json|WwUX66Br

GollopDevest: PE Loader DLLとAmatera Stealer

3番目のDLLは2番目のDLLと同じ名前です。 GollopDevestしかし、PE負荷を実行します。

復号された文字列の中には、以下のものがある。

'GollopMailers LDR DllBase VeneryCondole EdiyaFoully=0x{0:X} EdiyaStelae=0x{1:X}'
'GollopMailers LDR Flags missing IMAGE_DLL 0x{0:X8}'
'GollopMailers LDR SaranPisco invalid 0x{0:X}'
'GollopMailers LDR TlsIndex invalid {0}'
'GollopMailers LDR sanity exception: '
'HIGHLOW relocation'
'Import DLL name'
'Import FunctusAurata'
'Import INT'
'Import descriptor'
'Import hint/name'
'Import thunk'
'LdrpHandleTlsData outside ntdll .text'
'LdrpReleaseTlsEntry outside ntdll .text'
'LoadConfig32'
'OK'
'PE headers'
'Required API resolve failed: type={0}, FreshBubals={1}, module=0x{2:X}'
'TLS32'
'TLS64'
'x86 disabled until ABI proof'
ntdll.dll
kernel32.dll
LdrpInitializeTls
"STATUS_SUCCESS"
UNKNOWN(0x00000001)
UNKNOWN(0x00000002)
UNKNOWN(0x00000003)

について ServerEditor.SortMemory 方法 (0x06000014ペイロードをロードする前に、PE構造とフラグをチェックします。

この動作を確認するために、ダウンロードしたデータを使用してリフレクション経由でメソッドを呼び出しました。 WPA.exe ファイルを入力として使用しました。PEファイルが正常にロードされました。

C++でコンパイルされたPEは、 WPA.exe ( Windows パフォーマンスアナライザー)。ペイロードは難読化されたバージョンであると特定しました。 アマテラ・スティーラー 4.2.3-alpha1.

解析を複雑にするために、制御フローの平坦化、APIハッシュ、デバッグ対策チェック、不透明な述語を使用しています。また、Heaven's Gateテクニック、Google DNSを介したDNS-over-HTTPS(DoH)解決、および生のソケットの使用も検出しました。 \Device\Afd\Endpoint ネットワーク通信用。 

この段階が実行された後、C2 IPアドレスから追加のペイロードがダウンロードされ、実行されることも確認されました。

WiX Burnバンドルの中には、PavinLoaderに関連付けられた別のペイロードをダウンロードするものもありました。また、HijackLoaderを検出したケースもありました。これにより、攻撃者は侵害したマシンに複数のペイロードを展開することが可能になります。

IOC 

SHA-256ハッシュ

bdf313a019e025ebf58ccef4619444ee70e661bd444e0644ebeabd8f5caad14c 

e3830f5747e3f46537d217124d80c9f3bb4d89f8d4f5138dce69ee54ea4fb6b9 

a4f03272cf96732dc9f58bb466d16f358e7f50d46dba30526a9fbebfec11717b 

bf04160dd1ce3571e0eb6d6dda1713c788797b5599399d4a93665a757eec376e 

54fa8083c05334aa360256fbbb0ca901ce7e244a0359dd664cae78977371ec91 

c1ea6d169565c70ac5d812e73483814929e9b3548ead6633595937e71a334adb 

001337488c32d8610c2aef6f9330acca825f0afacd071bf6ebfc06b5a1a69f09 

2837099af431e9afee76ce5e6ab5cb86bedce06e31c22be46250cb453cfdb978 

252c5a3d150275013f52b4820097d7163ced4aa2f1be0fca032f8a5017673816 

0c9c64b7383ec249bcf6271a4b73206d94de130ca401d16ab77fe01e5193a312 

6700f62e1a3b33340cd678c388ecc8bac2e5943c0627df5d1b99b879c3ca42c9 

IPアドレス 

93.152.224[.]75: PavinLoaderのダウンロード 

65.21.80[.]170: PavinLoaderのダウンロード 

195.63.142[.]49: PavinLoaderのダウンロード 

ドメイン 

perfectverified[.]com: クリックフィックス 

PavinLoader C2 

catalyst-pro[.]lat 

twigoamwu[.]cfd 

trusaifi[.]cfd 

stellar-minds[.]cfd 

pinnacle-labs[.]lat 

nexahub[.]lat 

fimwoglea[.]shop 

velodium[.]lat 

rpcsecnoweb[.]pro 

more-arpc[.]icu 

echo-systems[.]cfd 

kelemet[.]shop 

zarwieciv[.]cfd 

URL 

telegra[.]ph/Project-PySynth-06-28アマテラのデッドドロップ 

謝辞   


脅威の報告から、それらを排除することまで。

サイバーセキュリティのリスクは、ヘッドラインを超えて広がるべきではありません。今すぐMalwarebytes ダウンロードして、デバイスに脅威を持ち込まないようにしましょう。

著者について

ガブリエレは、マルウェアとの戦いをこよなく愛するマルウェア研究エンジニアです。仕事以外の時間には、自然や芸術、動物と触れ合うことを楽しんでいます。