エグゼクティブ サマリー
本記事では、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 でよく使われる難読化技術には次のようなものがあります。
- メタデータの難読化:静的分析を妨げるクラス名、メソッド名、プロパティ名の変更または削除
- オペコードの置換:標準的な中間言語(IL)命令を、機能的には同等だが認識しにくい命令に入れ替え(例:.NETマルウェアのサンプルを調査する際にアナリストがよく使う.NETデコンパイラを混乱させるためにcallvirtのオペコードをcallに置き換える)
- 盗まれたバイト:.NETデコンパイラによってデコンパイルされたコードが不完全または無効になるように、ILコードのセグメントを削除または再配置し、実行時に動的にコードを再構築する
- 制御フローの難読化:不透明な述語、ステートマシン、ディスパッチャ ループによる実行パスの並べ替え、再構築、置き換え(例: 制御フローの平坦化)
- 仮想化ベースの難読化:ILコードを、付随するカスタム インタープリターによってのみ実行可能なカスタム バイトコードに置き換え(参照: 暗号化と仮想化によって難読化された.NETマルウェアの発見)
- 文字列の暗号化: 文字列を静止時に暗号化し、実行時に必要なときだけ復号化
- 動的コード生成: リフレクションによって実行時にコードを生成して実行
攻撃者は、これらのテクニ ックをそれぞれ単独で、あるいは組み合わせて使用することで、悪意のある.NETアプリケーションがリバース エンジニアリングに耐えられるように強化しています。
テクニカル分析
以下のセクションでは、初期のビットマップ リソースから最終的なペイロードをどのように回収したかを詳細に分析します。
分析は、以下のSHA-256ハッシュを持つマルウェアのサンプルに対するものです。
- ac5fc65ae9500c1107cdd72ae9c271ba9981d22c4d0c632d388b0d8a3acb68f4.
ステージ1:初期ペイロード
このサンプルの.NETコードで使われているMainFormクラスは、メソッドとパラメーターの命名規則に特定のトピックに沿ったものが採用されています。
例えば、海洋研究と海洋学は次のような名前でペアになります。
- AbyssalScan(oceanFloor、marineLife、maxSpecimens)
- MarineExploration(oceanFloor、marineLife、maxSpecimens)
- VerifyOxygenSaturation(level)
図1は、オリジナルのマルウェア サンプル プロセスxgDV.exeが.NETビットマップリソースsvをTL.dllアセンブリにアンパックしている様子を示したものです。

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

ステージ2:TL.dll
svというビットマップリソースはTL.dllとして完全にロードされています。このTL.dllアセンブリは、それ自身のリソースを含まない別のローダーです。
図3は、TL.dllアセンブリが、元のマルウェア サンプル プロセスxgDV.exeに埋め込まれていた.NETビットマップ リソースrbzRをMontero.dllアセンブリにアンパックする様子を示したものです。

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

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

TL.dllは難読化を解除し、rbzRというビットマップリソースをMontero.dllとしてロードします(これはまた別のローダーです)。このファイルは、uK5APqTdSGという名前の独自のバイト配列リソースの難読化を解除した後、ロードし実行します。
Montero.dllは、図6に示すように、減算によるXOR暗号化を適用することで難読化を実現します。XORキーopIaZhYaを使って、このプロセスはRemington.exeという最終的なペイロードを生成します。

さらに、多くのフラグがこの最終ペイロードの実行の性質(例: 最終ペイロードが子プロセスとしてフォークされるかどうか)を決定します。
ステージ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ハッシュ:
- 30b7c09af884dfb7e34aa7401431cdabe6ff34983a59bec4c14915438d68d5b0
- 5487845b06180dfb329757254400cb8663bf92f1eca36c5474e9ce3370cadbde
- 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ハッシュ:
- 511af3c08bd8c093029bf2926b0a1e6c8263ceba3885e3fec9b59b28cd79075d
- 604cbcfa7ac46104a801a8efb7e8d50fa674964811ec7652f8d9dec123f8be1f
- 98195a4d27e46066b4bc5b9baea42e1e5ef04d05734c556d07e27f45cb324e80
- 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ハッシュ:
- 3b83739da46e20faebecf01337ee9ff4d8f81d61ecbb7e8c9d9e792bb3922b76
- 8146be4a98f762dce23f83619f1951e374708d17573f024f895c8bf8c68c0a75
- 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
その他のリソース
- Deworming the XWorm – CERT Polska
- Snake Keyloggerのリバース エンジニアリング:.NETマルウェア完全分析 - ANY.RUNブログ
- .NETマルウェアの難読化を徹底解説 - ANY.RUNブログ