Daniel StepanicJia Yu Chan

移転で失われたもの:CASTLESTEALERを分配する新しいローダーの分析

新しい難読化ローダーが.relocを使用して静的検出を回避する方法を調べてくださいセクションの悪用、5つのアンチVM/言語チェック、およびMBA難読化により、Google広告を介して情報窃盗マルウェアを配信します。

8分で読めますマルウェア分析

これまで記録されていなかったOXLOADERという名称のWindowsローダーが、悪意のあるGoogle広告を介してCASTLESTEALERという情報窃盗マルウェアを配信しており、静的エンジンやサンドボックスでの検出率が低い。ローダーは、複数の難読化レイヤー(制御フローの平坦化、不透明な述語、ブール演算と算術演算の混合)、自己修正復号スタブを使用し、Windowsの.relocセクションを悪用してシェルコードをステージングします。

Elastic Security Labsは、当社の顧客の1社を標的とした攻撃キャンペーンにおいて、OXLOADERを特定しました。CIS地域およびロシア語圏からの除外設定は、金銭目的のロシア語を話す攻撃者によるものであることを示唆しています。この家族に関する過去の報道は確認されていません。

重要なポイント

  • Elastic Security Labsが新たなローダー(OXLOADER)を発見
  • OXLOADERは、悪意のあるGoogle広告を介してCASTLESTEALERを配布するキャンペーンで確認されました。
  • CIS地域除外とロシア語チェックは、ロシア語を話す金銭目的の脅威アクターを示唆している。
  • 静止エンジンおよびサンドボックス爆発における検出率が低い
  • Elastic Defendは、高度な防御機能を使用して攻撃チェーン全体を阻止します。

マルバタイジングがどのようにしてOXLOADERを被害者に届けたか

OXLOADERは、Node.jsを装った悪質なGoogle広告を通じて配布されています。被害者は中間ドメインを経由してStorjがホストするバッチスクリプトにリダイレクトされ、そこでOXLOADERがダウンロードされて実行される。

感染は、ユーザーがlts version of node.jsを検索し、スポンサー付きの検索結果をクリックしてnode-js[.]prentiva99[.]infoにアクセスしたことから始まりました。は、正規のNode.jsデプロイメントプラットフォームになりすますように設計された悪意のあるランディングページです。攻撃者は、米国在住の被害者を標的としたGoogle広告キャンペーンを実施しました。広告は4月23 、 2026に最後に表示され、サイトは現在オフラインになっています。広告主は、ウクライナを拠点とする認証済み名ВОЛОДИМИР ТЕРЕЩЕНКОで登録されています。これが実際の運営者本人なのか、フロントアカウントなのか、あるいは購入した身元情報なのかは依然として不明である。5月14 、 2026に、広告主とその関連広告キャンペーンはGoogleから完全に削除されました。

操作を行うと、ユーザーはapp[.]miloyannopoulos[.]com/download?subid1=downloadを経由してリダイレクトされ、ペイロードURL link[.]storjshare[.]io/raw/jux4e4ky5mruo4jkxsssp42sau4q/ruslan/BATPackageBuilderSetup.batに対して302 Foundで応答しました。これにより、 Storjの正規のリンク共有サービス上にホストされたWindowsバッチスクリプトが配信され、攻撃者はこれを悪用してドメインベースの評判フィルタリングを回避した。

バッチスクリプトは、偽のソフトウェアインストールウィザードのUIを表示し、PowerShellを介してStorj URL link.storjshare[.]io/raw/jwwvr4oskkkjsgevt774ta62ehya/ruslan/aBsvwbdas.exeから次の段階の実行可能ファイルを即座にダウンロードし、 -Verb RunAsを使用してそれを起動してUAC昇格プロンプトをトリガーします。

バッチスクリプトの実行後、Elastic Defend は悪意のある動作を検出しました (ポリシーは検出のみに設定されていました)。これにより、 Microsoft Common Language Runtime Loaded from Suspicious Memoryを含む複数の動作ルールがトリガーされ、 CASTLESTEALERと一致する .NET ベースのペイロードが示唆されました。

以下は、ペイロードのダウンロードからCASTLESTEALER展開までの攻撃チェーンの実行グラフです。

OXLOADERマルウェアローダー:技術分析

当チームが分析した最初のOXLOADERサンプルは、 rohitab.com の人気ツールである API Monitor になりすましていました。正規のコードが多数含まれており、コード隠蔽技術も用いられているため、このローダーは静的ファイルアナライザーの監視を逃れることができる。

OXLOADERが実行時に自身を解凍する方法

このマルウェアは、ユーザーコードが実行される前に、CRT初期化フェーズ中に実行を開始します。CRT関数cinit()initterm()を呼び出し、はC++初期化テーブル( __xc_a__xc_z )を走査して各エントリを呼び出します。マルウェア開発者はこれらのエントリの1つを乗っ取り、 RegisterClipboardFormatW()呼び出しを行う関数を指し示してから、最初の復号化スタブに末尾ジャンプします。

ローダーは、複数の復号スタブを用いた自己改変技術を使用して自身を展開します。以下は、実行時に復号化スタブをパッチ適用してから、そのスタブにジャンプする例です。

パッチ適用後、ローダーは28,233バイトの領域を復号化する。各バイトは、反復処理ごとに更新される1バイトのXORキーを使用して復号化されます。復号化されたばかりの平文バイトがキーに追加され、そのキーを使用して次のバイトが復号化されます。この同様の復号処理は、合計3回実行され、それぞれ異なる領域で行われます。

静的検出を回避するために使用される難読化技術

OXLOADERは、制御フロー平坦化(CFF)、混合ブール演算(MBA)、不透明な述語、および非連続コード領域にわたる関数チャンキングという4つの階層的な難読化技術を使用して、IDA Proなどのバイナリ解析ツールにおける自動関数境界検出を破ります。関数は無条件ジャンプによって連結され、一部の領域には間接ジャンプによって到達され、そのターゲットアドレスはMBA演算によって実行時に計算される。その結果、IDA Proは関数境界を確実に再構築することができず、手動での修正が必要となる。

ローダーは、実行時に以下の文字列復号アルゴリズムを使用して様々な文字列を復号します。

uint32_t obf_xor_a1_with_a2_plus_33FDA(uint32_t a1, uint32_t a2) { 
return a1 ^ (a2 + 0x33FDA); 
}

コードが完全に解凍/復号化された後、マルウェアはこの文字列復号化関数とAdler-32 APIハッシュアルゴリズムを組み合わせて、インポートを動的に解決します。

OXLOADERはどのようにしてサンドボックスとVMの検出を回避するのですか?

OXLOADERはAPIを解決した後、マシンがクリーンな環境で実行されることを保証し、サンドボックス環境での実行を回避するために、さまざまなチェックを実行します。

確認メソドしきい値
エミュレーションWNetAddConnection2W 不正なリソースERROR_BAD_NAME (0x43) を期待します
CPU数プロセス環境チェック≥ 3 CPU
ラムGlobalMemoryStatusEx≥ 3 GBの物理メモリ
ディスプレイのリフレッシュレートWMI Win32_VideoControllerクエリ≥ 20 Hz
地理的地域GetUserGeoIDCISジオイドは除外します

最初のチェックでは、 mpr!WNetAddConnection2Wを使用して、意図的に不正な形式のネットワーク リソース ( *72s@1s ) に接続しようとします。この手法は、フックしたり、無条件に接続成功を返したりする可能性のあるエミュレーション/サンドボックスを無効化するようです。マルウェア開発者は、TEBに直接アクセスしてLastErrorValueを取得することでこの呼び出しを検証します。ローダーはこのエラーコードがERROR_BAD_NAME (0x43)であることを想定しています。エラーコードがこの値以外の場合、マルウェアは失敗分岐に進み、実行を停止します。

2つ目のチェックは、プロセッサ数に基づくアンチサンドボックステストです。ローダーは、処理を続行するためにホストが少なくとも 3 CPUを持っていることを要求します。多くのサンドボックスや分析用仮想マシンは、リソースを節約するために1つか2つのCPUしか割り当てられていないため、このしきい値によってこれらの自動分析環境は除外されます。

次のチェックでは、 GlobalMemoryStatusEx()を使用して、ホストに少なくとも 3 GB の利用可能な物理メモリがあることを確認します。

さらに、WMI を使用してシステム ディスプレイのリフレッシュ レートを照会し、WQL ステートメントSELECT CurrentRefreshRate FROM Win32_VideoControllerを実行して、返された値 (ヘルツ単位) をしきい値 20 と比較します。物理モニターは通常、約 60 Hz以上を報告しますが、ヘッドレス構成およびデフォルト仮想化構成では通常 0 または1を報告し、 20 未満の値ではローダーが異常終了します。

地理的および言語的除外

最後の2つのチェックは、ホストがCIS諸国にある場合、またはロシア語に設定されている場合に実行を停止します。このカテゴリの最初のチェックでは、 GetUserGeoIDを使用してシステムの地理的領域を取得し、ハードコードされた CIS 諸国の GEOID のリストと比較します。

2 番目のチェックではGetUserDefaultUILanguage使用し、ロシア語版 Windows インストールの標準構成である LANGID ( 0x419 - Russian, Russia ) と照合します。

.reloc を介したシェルコードのステージングセクションとOCXファイル

すべてのチェックに合格した後、マルウェアはWindows DirectUI Engine DLL( C:\Windows\System32\dui70.dll )のコピーを作成し、 .ocx拡張子( PFHemkxVk.ocx )が付いたランダムに生成された名前を使用して一時的な場所に保存します。この拡張子の選択が、OXLOADERという姓の由来となった。

次に、OXLOADER はこのターゲット DLL ( PFHemkxVk.ocx ) 内に ( .xtext ) という名前の新しいセクションを作成します。

この新しいセクション( .xtext )は、悪意のあるコードの次の段階を保存および実行する準備として、RWX(読み取り/書き込み/実行)保護が設定されています。

この更新されたDLL( PFHemkxVk.ocx )は、 LoadLibraryAを介して既存のローダープロセスにロードされます。

通常の Windows 実行ファイルでは、 .relocセクションにはIMAGE_BASE_RELOCATIONブロックのテーブルが含まれており、イメージが推奨ベース以外のアドレスにロードされたときに、Windows ローダーが絶対アドレスをパッチするために適用します。このサンプルでは、マルウェア開発者は
を使用しています。ベース再配置エントリの代わりに、 .relocセクションに悪意のあるコードを格納します。これは静的解析における重大な危険信号です。正当なツールチェーンは.relocセクションにコードを出力しません。

.relocセクションのこのシェルコードは、OCX ファイル内の新しく作成されたセクション ( .xtext ) にコピーされ、ローダーはこのコードを呼び出します。

前述のとおり、この次の段階を解読するために、別の復号化スタブが使用されます。

DonutLoaderと.NETアセンブリを介したインメモリ情報窃盗配信

この次の段階のシェルコードは、 DonutLoaderによって構成されたペイロードです。DonutLoader は、.NET アセンブリ、DLL、および EXE を位置独立シェルコード (PIC) にラップしてメモリ内で実行するためのオープンソースのシェルコードジェネレータです。アンパック中、シェルコードは、鍵( 6E0A1F8F77F7011561F6F9CA96B71B8F )とIV( 956C6128E9362E075F8D006C93616A66 )を使用して、CTRモードのChaskey-LTSブロック暗号を使用して、ローダーの埋め込み構成と実行コンテキストを復号します。

復号化後、ペイロードは aPLib を介して解凍され、DonutLoader のRunPE()関数を介してブートストラップされます。最後のペイロードは、ハントレスが新たに発見した情報窃盗装置「CASTLESTEALER」である。この帰属は、以前のサンプルで発見された0xDEADBEEFマーカー間でC2通信に使用されたのと同じAESキーに基づいています。

2番目のOXLOADERバリアント:同じローダーだが、偽装プログラムが異なる

2つ目のOXLOADERの亜種は、API MonitorではなくNode.jsインストーラーを装っているが、ローダー機構は全く同じである。

5月13 、 2026に、リダイレクタエンドポイントapp.miloyannopoulos[.]com/download 、ランダムに選択された2つのLocationヘッダーフィールドのいずれかで応答することを発見しました。

  • https://link.storjshare[.]io/raw/jv5uebuqwzfpmtahj34q753ptykq/node/BATPackageBulderSetup.bat
  • https://link.storjshare[.]io/raw/jvsmdybqmvwep2oawbobp6ub7aza/node/node-v24.15.0-x64-86.exe

バッチインストールスクリプト( BATPackageBulderSetup.bat 、「Builder」にタイプミスあり)は、ほぼ変更なし。唯一の違いは、Storjペイロードリンクがnode-v24.15.0-x64-86.exeという名前の別のバイナリを指していたことです。

ペイロードは、ファイル名に「node」を残しつつ、無害なCMakeコードであるかのように装おうとする。これはおそらく、おとりのテーマを維持するためだろう。以前の「API Monitor」サンプルは、おそらく運営者による配布ミスだったと考えています。

実行時に、同じパターンが確認されました。メモリ内自己復号化に間接ジャンプが使用され、続いてmpr.dllがロードされ、 WNetAddConnection2Wが呼び出されます。以前に議論したローダー機構と同一であることを確認しました。このサンプルもCASTLESTEALERをロードします。

以下は、自己復号化が行われる部分の抜粋です。ダミーのCMake関連文字列が関数呼び出しの引数として渡され、呼び出し箇所の直後のメモリに小さな復号化スタブがパッチされるようです。実行はその後スタブにジャンプして後続の命令を復号化し、このプロセスはマルウェア本体が復号化されるまでさらに 2 回繰り返されます。

結論:なぜディフェンダーはOXLOADERを追跡すべきなのか

OXLOADERはまだ運用初期段階にあるが、その背後にある技術力から、このシリーズは注目に値すると言えるだろう。コードの難読化、VM対策、バイナリを偽装するために使用される無害に見えるコード、および独自のステージング技術は、分析を回避するための意図的なエンジニアリング上の選択を反映している。その投資は実を結び、静止エンジンや爆発試験における検出率が低く抑えられており、OXLOADERは追跡される前に活動できる時間的猶予を得ている。

MITRE ATT&CKによるREF8372

Elasticは、 MITRE ATT&CK フレームワークを使用して、脅威がエンタープライズネットワークに対して使用する一般的な戦術、手法、手順を文書化します。

戦術(Tactics)

戦術は、テクニックまたはサブテクニックの理由を表します。 それは敵の戦術的な目標であり、行動を実行する理由です。

手法

手法は、敵対者がアクションを実行することによって戦術的な目標を達成する方法を表します。

REF8372の修復

予防

ヤラ

Elasticセキュリティは、このアクティビティを識別するためのYARAルールを作成しました。

観測

この研究では、次の観測量について議論しました。

すぐれた監視性タイプ名前参考
node-js\[.\]prentiva99\[.\]infoドメイン名マルバタイジングのランディングページ
app\[.\]miloyannopoulos\[.\]comドメイン名マルバタイジングリダイレクター
fdfc7831e5c24cfa80152860dfe8c056ba079f7df1393bf6bb7b18ed974eda37SHA-256のBATPackageBuilderSetup.batOXLOADERダウンローダー&ランチャー
de4f51649ec1a33071854aefe93ffb3fc225e19f802d8dd914676dd5dfef2615SHA-256のBATPackageBulderSetup.batOXLOADERダウンローダー&ランチャー
9a9939dff297997732aaade9b243d695632cbd64033c5fbcb9de3d09b7e6c28dSHA-256のapimonitor-x64.exeOXローダー
c85f2765a6c3c3f3907c17e57df12f8f68826f74bff3bbfd272af50666d065feSHA-256のnode-v24.15.0-x64-86.exeOXローダー
4ec9d9d4d10ad78fc6d7bda7cb17d52984878ccd2dd4302fd1cef152313b9741SHA-256のキャッスルスティーラー
39019279686c820c3af5684012a0085a7e2109f612c9fab886dd0577ace5b5c6SHA-256のキャッスルスティーラー
89.124.95\[.\]161ipv4キャッスルスティーラー C2
89.124.115\[.\]82ipv4キャッスルスティーラー C2

この記事を共有する