マルウェア

ステルス型.NETマルウェア: 悪意のあるペイロードをビットマップ リソースとして隠す

Clock Icon 2 分で読めます

エグゼクティブ サマリー

本記事では、32ビットの.NETアプリケーションに埋め込まれたビットマップリソースにステガノグラフィを使ってマルウェアを隠すという、最近の脅威アクターが使用している新たな難読化技術について紹介します。これらのファイルは、実行されると二次的なペイロード(ダイナミック リンク ライブラリ)の抽出、難読化解除、ロード、実行という多段階の連鎖を引き起こし、最終的に最終的なペイロード(実行ファイル)を起爆させるものです。

本記事では、内部テレメトリで観測された最近の悪質なスパム(マルスパム)キャンペーンから抽出したマルウェアを使用して、オリジナル ファイルに埋め込まれた初期ビットマップ リソースから最終的なペイロードを復元する方法を説明します。セキュリティ担当者は、本難読化技術の内部構造を理解することで、難読化技術を用いた攻撃に対する防御策の構築に役立てることができます。

パロアルトネットワークスのお客様は、以下の製品とサービスをご活用いただくことで、本記事で取り上げる脅威から組織をより確実に保護することができます。

情報漏えいの可能性がある場合、または喫緊の事態の場合は、Unit 42インシデントレスポンス チームまでご連絡ください。

Unit 42の関連トピック Agent Tesla, Remcos RAT, XLoader

最初の発見

弊社では、2024年末から2025年初頭にかけて、電子メールの添付ファイルを使用したキャンペーンによるマルスパムを複数回観測しています。これらの攻撃キャンペーンで最も顕著なものは、トルコ共和国の金融業界の組織を標的にしたものであり、アジアの物流部門を狙ったマルスパムのキャンペーンもまた確認されています。このキャンペーンでは、攻撃者によって同じマルウェアが添付された250通以上の電子メールが標的地域全体に配信されました。

攻撃者はメールの件名を標的地域の母国語で作成しています。オリジナルのマルウェア サンプルは、Windowsの実行可能ファイル(.exe)であり、ファイル名は以下のいずれかに関連するものでした。

  • 調達 - 見積依頼(RFQ)または発注(PO)
  • マルスパムメールの送信元となっている侵害を受けた組織名
  • 関心のある特定の金融取引の日付

本キャンペーンにおけるマルスパムの配信に共通しているのは、32ビットの.NETアプリケーションに埋め込まれたビットマップリソースを利用して、標的とする業界、セクター、地域に攻撃を仕掛けていることです。例えば、弊社がこの記事のために分析したマルウェアのサンプルでは、Windows Forms OCRという名前のアプリケーションの正規.exeファイルのコピーが使用されています。

悪意のあるペイロードをビットマップ リソースとして隠す以外にも、.NET でよく使われる難読化技術には次のようなものがあります。

攻撃者は、これらのテクニ ックをそれぞれ単独で、あるいは組み合わせて使用することで、悪意のある.NETアプリケーションがリバース エンジニアリングに耐えられるように強化しています。

テクニカル分析

以下のセクションでは、初期のビットマップ リソースから最終的なペイロードをどのように回収したかを詳細に分析します。

分析は、以下のSHA-256ハッシュを持つマルウェアのサンプルに対するものです。

  • ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4.

ステージ1:初期ペイロード

このサンプルの.NETコードで使われているMainFormクラスは、メソッドとパラメーターの命名規則に特定のトピックに沿ったものが採用されています。

例えば、海洋研究と海洋学は次のような名前でペアになります。

  • AbyssalScan(oceanFloor、marineLife、maxSpecimens)
  • MarineExploration(oceanFloor、marineLife、maxSpecimens)
  • VerifyOxygenSaturation(level)

図1は、オリジナルのマルウェア サンプル プロセスxgDV.exeが.NETビットマップリソースsvTL.dllアセンブリにアンパックしている様子を示したものです。

.NETアプリケーション プロセスの構造を示す図。このフローチャートには2つのメインボックスとしてXgDV.exeと.NETプロセス(xgDV.exe)がある。接続は、XgDV.exeから.NETディレクトリ構造内のマニフェスト リソースにつながり、リソースのアンパックを示すTL.dllにつながる。
図1.マルウェア解凍プロセスにおける第1段階の概念的概要。

MainForm .NETクラスのInitializeComponent()メソッドでは、図2に示すように、難読化を解除し、svという悪意のあるビットマップ リソースの最初の71,168バイトをロードする役割を担っています。

InitializeComponentという名前の関数を、シンタックス ハイライト付きのテキスト エディタでコンピューター コードの一部を表示したスクリーンショット。
図2.悪意のあるビットマップ リソースをロードする。

ステージ2:TL.dll

svというビットマップリソースはTL.dllとして完全にロードされています。このTL.dllアセンブリは、それ自身のリソースを含まない別のローダーです。

図3は、TL.dllアセンブリが、元のマルウェア サンプル プロセスxgDV.exeに埋め込まれていた.NETビットマップ リソースrbzRMontero.dllアセンブリにアンパックする様子を示したものです。

「xgDV.exe」という名前の実行可能ファイルから、「Montero.dll」という名前の.NETリソースを、TL.dllによって表される別のプロセス「xgDV.exe」に抽出するプロセスを示す図。この図は、.NETディレクトリ、メタデータ ヘッダ、メタデータ ストリーム、およびマニフェスト リソースのステップを強調し、2番目のステップの一部であるリソース「rbzR/Montero.dll」で終了しています。
図3.マルウェア解凍プロセスにおける第2段階の概念的概要。

次に元のプロセスは、LateBinding.LateCall()関数呼び出しを通してリフレクションを使用します。この呼び出しは、TL.dllアセンブリ内のJusty()という名前のメソッドを呼び出すものです。オリジナル サンプルに埋め込まれたrbzRという2番目のビットマップ リソースは、図4に示すように、16進文字列72627A52としてエンコードされ、このJusty()メソッドのパラメータとして渡されます。

プログラミングIDEでのコード スニペットのスクリーンショット。MainFormという関数が含まれている。
図4.読み込んだビットマップリソースを実行する。

ステージ3: Montero.dll

図5は、Montero.dllアセンブリが.NETバイト配列リソースuK5APqTdSGを最終的なペイロードであるRemington.exeにアンパックする様子を示したものです。

xgDV.exeという.NETアプリケーションのRemington.exeへの解凍プロセスを示す図。Montero.dllセクション内のマニフェスト リソースの使用が強調されている。これが第3ステージとなる。
図5.マルウェア解凍プロセスにおける第3段階の概念的概要。

TL.dllは難読化を解除し、rbzRというビットマップリソースをMontero.dllとしてロードします(これはまた別のローダーです)。このファイルは、uK5APqTdSGという名前の独自のバイト配列リソースの難読化を解除した後、ロードし実行します。

Montero.dllは、図6に示すように、減算によるXOR暗号化を適用することで難読化を実現します。XORキーopIaZhYaを使って、このプロセスはRemington.exeという最終的なペイロードを生成します。

ダークモードでシンタックス ハイライトされたコンピュータ コードのスクリーンショット。
図6.減算アルゴリズムによる XOR 暗号化。

さらに、多くのフラグがこの最終ペイロードの実行の性質(例: 最終ペイロードが子プロセスとしてフォークされるかどうか)を決定します。

ステージ4: 最終ペイロード

この難読化の目的は、検出を回避し、一般的なマルウェア ファミリー(Agent Teslaの亜種、XLoader、Remcos RATなど)を成功裏に起爆させ、標的のシステムへの最初の足掛かりを得ることです。

この場合、最終的なペイロードはエージェント テスラファミリーに属することになります。その構成は以下のように抽出されます:

  • 感染後のSMTPデータ窃取:
    • サーバー: hosting2[.]ro.hostsailor[.]com:587
    • 送信者: packagelog@gtpv[.]online
    • パスワード: 7213575aceACE@@
    • 受信者: package@gtpv[.]online

分析アプローチ

この難読化技術を克服する効果的なアプローチの一つは、.NET Frameworkの ICorDebugManagedCallbackインターフェースを使用して、以下のAPI関数をフックするデバッガーを作成することです。

  • System.Resources.ResourceManager::GetObject(文字列名)

.NETアプリケーションによって読み込まれる埋め込みリソース(ビットマップを含む)をインターセプトする。

  • System.AppDomain::Load(byte[] rawAssembly)
    System.Reflection.Assembly::Load(byte[] rawAssembly)

生のバイト配列から.NETアセンブリのロードを妨害する。

フックとは、ブレークポイントを置くことで、ある時点でプログラムの実行を一時停止し、目的の値を抽出することです。

結論

悪意のあるペイロードを隠すためにビットマップ リソースを使用することは、マルスパムキャンペーンで広く普及しているステガノグラフィ技術です。悪意のあるペイロードをビットマップ リソースとして隠すことで、脅威アクターは従来のセキュリティ メカニズムを迂回し、検出を回避できる可能性があります。

この記事で取り上げた分析では、脅威アクターがこの配信方法を利用することで、いかに隠密に悪意のあるコードを実行できるかが強調されました。このような脅威の一歩先を行くためには、セキュリティ担当者がこの難読化技術を理解することが重要とされています。

パロアルトネットワークスの保護と緩和策

パロアルトネットワークスのお客様は、以下の製品とサービスをお求めいただくことで、本記事で取り上げた脅威から組織をより確実に保護することができます。

  • Advanced WildFire: 機械学習モデルと分析技術は、本研究で共有されたIoCに照らして見直され更新されています。
  • Advanced URL FilteringおよびAdvanced DNS Security: このアクティブに関連する既知のドメインとURLを悪意のあるものとして識別します。
  • Cortex XDRおよび XSIAM: 既知の悪意のあるマルウェアの実行を防止し、振る舞い脅威防御とローカル分析モジュールに基づく機械学習によって未知のマルウェアの実行も防止できるように設計されています。

情報漏えいの可能性がある場合、または緊急の案件がある場合は、以下の連絡先までご連絡ください。 Unit 42インシデント レスポンス チームまたはお電話ください。

  • 北米: フリーダイヤル+1 (866) 486-4842 (866.4.unit42)
  • 英国+44.20.3743.3660
  • ヨーロッパおよび中東+31.20.299.3130
  • アジア+65.6983.8730
  • 日本+81.50.1790.0200
  • オーストラリア+61.2.4062.7950
  • インド: 00080005045107

パロアルトネットワークスは、この調査結果をサイバー脅威アライアンス(CTA)のメンバーと共有しました。CTAの会員は、この情報を利用して、その顧客に対して迅速に保護を提供し、悪意のあるサイバー アクターを組織的に妨害しています。サイバー脅威同盟について詳しく読む。

侵害のインジケーター

記載されているサンプルの中には、ステージ2ローダーとして、前述のTL.dllではなく、SHA-256ハッシュ5adff9ae840c6c245c0a194088a785d78d91fe734ee46a7d51605c1f64f6daddを持つCaptive.dllを使用しているものがあることに留意してください。

Agent Tesla Variantの活動

3つのサンプルのSHA-256ハッシュ:

  1. 30b7c09af884dfb7e34aa7401431cdabe6ff34983a59bec4c14915438d68d5b0
  2. 5487845b06180dfb329757254400cb8663bf92f1eca36c5474e9ce3370cadbde
  3. ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4

感染後のSMTPデータ窃取:

SHA-256ハッシュの場合: 30b7c09af884dfb7e34aa7401431cdabe6ff34983a59bec4c14915438d68d5b0

  • サーバー: mail.gtpv[.]online:587
  • 送信者: kings@gtpv[.]online
  • パスワード: 7213575aceACE@@
  • 受信者: king@gtpv[.]online

SHA-256ハッシュの場合: 5487845b06180dfb329757254400cb8663bf92f1eca36c5474e9ce3370cadbde

  • サーバー: nffplp[.]com:587
  • 送信者: airlet@nffplp[.]com
  • パスワード: $Nke%8XIIDtm
  • 受信者: smt.treat@yandex[.]com

SHA-256ハッシュ: ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4

  • サーバー: hosting2.ro.hostsailor[.]com:587
  • 送信者: packagelog@gtpv[.]online
  • パスワード: 7213575aceACE@@
  • 受信者: package@gtpv[.]online

XLoaderの活動

4つのサンプルのSHA-256ハッシュ:

  1. 511af3c08bd8c093029bf2926b0a1e6c8263ceba3885e3fec9b59b28cd79075d
  2. 604cbcfa7ac46104a801a8efb7e8d50fa674964811ec7652f8d9dec123f8be1f
  3. 98195a4d27e46066b4bc5b9baea42e1e5ef04d05734c556d07e27f45cb324e80
  4. a4a6364d2a8ade431974b85de44906fe8abfed77ab74cc72e05e788b15c7a0cf

データ窃取のためのC2

SHA-256ハッシュの場合: 511af3c08bd8c093029bf2926b0a1e6c8263ceba3885e3fec9b59b28cd79075d

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

SHA-256ハッシュの場合: 604cbcfa7ac46104a801a8efb7e8d50fa674964811ec7652f8d9dec123f8be1f

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

SHA-256ハッシュの場合: 98195a4d27e46066b4bc5b9baea42e1e5ef04d05734c556d07e27f45cb324e80

  • hxxp[://]www.sixfiguredigital[.]group/aoc3/

SHA-256 ハッシュ: a4a6364d2a8ade431974b85de44906fe8abfed77ab74cc72e05e788b15c7a0cf

  • hxxp[://]www.yperlize[.]net/aa02/

Remcos RATの活動

3つのサンプルのSHA-256ハッシュ:

  1. 3b83739da46e20faebecf01337ee9ff4d8f81d61ecbb7e8c9d9e792bb3922b76
  2. 8146be4a98f762dce23f83619f1951e374708d17573f024f895c8bf8c68c0a75
  3. 9ed929b60187ca4b514eb6ee8e60b4a0ac11c6d24c0b2945f70da7077b2e8c4b

データ窃取のためのC2

SHA-256ハッシュの場合: 3b83739da46e20faebecf01337ee9ff4d8f81d61ecbb7e8c9d9e792bb3922b76

  • myhost001.myddns[.]me:9373
  • 103.198.26[.]222:9373

SHA-256ハッシュの場合: 8146be4a98f762dce23f83619f1951e374708d17573f024f895c8bf8c68c0a75

  • 67.203.7[.]163:3320

SHA-256ハッシュの場合: 9ed929b60187ca4b514eb6ee8e60b4a0ac11c6d24c0b2945f70da7077b2e8c4b

  • 176.65.144[.]154:3077

その他のリソース

 

Enlarged Image