はじめに:Rhadamanthysローダーの脅威
2022年から活発に活動している高度な情報窃取マルウェア「Rhadamanthys」のネイティブローダーコンポーネントについて、セキュリティ研究者が詳細な分析結果を発表しました。このローダーの重要性は、その機能だけでなく、セキュリティツールや分析環境による検出を回避するために採用されている高度な難読化および回避技術にあります。
多層的な難読化戦略
Rhadamanthysローダーは、静的分析を無効化するために、連携して機能する3つの異なる難読化戦略を組み合わせた複雑な手法を実装しています。主な防御メカニズムとして特定されたのは以下の3つです。
- ジャンプターゲット難読化:メモリロードとキーレジスタの加算によって宛先アドレスを隠蔽し、逆アセンブラがコード実行パスを特定することを不可能にします。
- 制御フロー平坦化(CFF):ディスパッチャメカニズムを実装し、状態変数を使用して次にどのブロックが実行されるかを決定することで、コードブロック間の直接的な関係を削除します。これにより、高エントロピーな数値ケースを持つ巨大なスイッチ文が作成されます。
- 定数難読化:すべてのプログラム定数をメモリ位置に格納し、ロード操作と加算を組み合わせて取得することで、定数を隠蔽します。これにより、デコンパイラが実際の値を明らかにする標準的な最適化を実行できなくなります。
洗練されたアンチサンドボックス検出
Check Point Researchは、C2(コマンド&コントロール)通信を確立する前に、ローダーの「Strategy」モジュールによって実行される広範な環境チェックを文書化しました。マルウェアは複数のシステム特性を調べて、サンドボックスまたは仮想化環境を特定します。これらのチェックには以下が含まれます。
- 現在のデスクトップ壁紙を取得し、そのSHA1ハッシュを、デフォルトのTriageサンドボックスの壁紙を表すハードコードされた値と比較。
- 「foobar.jpg」、「foobar.mp3」、「foobar.txt」、「foobar.wri」、「waller.dat」などの標準的なサンドボックステストファイルを検索。
- 「JohnDeo」、「HAL9TH」、「JOHN」、「JOHN-PC」、「MUELLER-PC」、「george」、「DESKTOP-B0T」などのサンドボックスで典型的なユーザー名を列挙。
- 「keys.txt」や「passwords.txt」などのダミー認証情報ファイルをチェックし、それらのコンテンツハッシュを比較して複製されたサンドボックスアーティファクトを検出。
- UuidCreateSequential APIを介してUUIDバージョン1を生成し、ネットワークインターフェースからMACアドレスをステルス的に抽出。MACアドレスは既知の仮想ネットワークアダプタの広範なブロックリストと比較されます。
- WQLステートメント「SELECT UUID FROM [Win32_ComputerSystemProduct]」を使用してハードウェアIDをクエリし、結果を既知のサンドボックス識別子の包括的なリストと照合。これらのハードウェアIDブロックリストは、SkuldやBandit Stealerを含む他の情報窃取マルウェアによって使用される識別子と重複しています。
行動分析回避メカニズム
ローダーは、直接実行ではなくタイマーコールバックに基づいた洗練された行動分析回避メカニズムを実装しています。ウィンドウ作成時、マルウェアはタイマーID 2を確立し、30ミリ秒ごとにカーソル位置、フォアグラウンドウィンドウ情報、タイムスタンプを1,500回(合計45秒間)収集します。これにより、ペイロード実行前に強制的な遅延が生成されます。
収集されたテレメトリーは、カーソル位置の変更が30回以上、および少なくとも2つの異なるフォアグラウンドウィンドウの存在(うち1つはデスクトッププロセスに属さないもの)という検証チェックを受けます。これらの条件が満たされない場合、ローダーは別の45秒間の監視期間を開始し、カーソル位置間のユークリッド距離計算を含む強化されたチェックを実行します。このアプローチは、人間のような自然なパターンではなく、規則的な間隔でマウスの動きをシミュレートするAVエミュレータや自動分析システムをターゲットとしています。しかし、CAPEやVMRayのような高度なサンドボックスは、これらの検証チェックを成功裏に通過できることが示されています。
カスタムバイナリエンコーディングスキーム
ペイロードのエンコーディングには、開発者が隠蔽しようとした独自のバイナリ-文字列変換アルゴリズムが採用されており、.NETローダーのバリアントでは「Flutter」と呼ばれています。このエンコーディングスキームは、文字範囲を数値出力値にマッピングします。
- 大文字A-Zは0-25に、小文字a-zは26-51に、数字0-9は52-61にマッピングされます。
- 特殊文字と複数文字の組み合わせはエンコーディング空間を拡張し、プレフィックス文字が異なる出力範囲を生成します。
- スペース文字とA-Zまたはa-zの組み合わせは91-142の値を生成し、ピリオドプレフィックスと英数字の組み合わせは143-204を生成します。
- アンダースコアプレフィックスは最高の範囲を生成し、アンダースコアと大文字の組み合わせは205-230を、アンダースコアと小文字の組み合わせは231-255を生成します。
このカスタムエンコーディングに加えて、ペイロードは中国のブロック暗号であるSM4を使用して追加の暗号化を受けます。このアルゴリズムに必要なS-Box、FK、CKテーブル自体もローダー内で難読化されており、復号化操作中にのみ一時的にメモリにロードされます。
設定とMutexの更新
バージョン0.9では、既存の検出および防止ツールを回避するために、設定構造とmutex生成に大幅な変更が導入されました。設定形式は、従来の0x59485221 (!RHY)識別子に代わり、0xBEEF DWORDマーカーを使用するようになりました。構造体は、初期復号化後にLZOデコンプレッションを必要とします。
Mutex生成は、設定からの16バイトのシード値をマジック値XRHYと共にハッシュ化することで行われます。結果のハッシュは、Global\MSCTF.Asm.{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}のようなGUID形式のmutex名を生成し、普遍的な防御アプローチを無効にします。
ボット識別システムは、感染した各システムを、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CryptographyからのMachineGuidとGetVolumeInformationWを介して取得されるVolume Serial Numberという2つの固有のシステム識別子に関連付けます。これらの値はSHA1を使用してハッシュ化され、16進文字列として表現されるため、攻撃者は特定のシステムをより効果的にブラックリストに登録できます。
ペイロード配信の進化
Rhadamanthysの最近のバージョンは、洗練されたステガノグラフィーから、より直接的なペイロード配信アプローチへと移行しました。以前のバージョンでは、暗号化されたペイロードを合法に見えるWAVオーディオファイルやJPEG画像内に隠蔽していましたが、バージョン0.9.2からはPNG形式に切り替わり、実装が大幅に簡素化されました。現在のPNGベースのアプローチでは、合法的なメディアファイルのふりをするのをやめ、代わりに暗号化キー、サイズ情報、ハッシュ検証データ、および実際のペイロードを含む特定の構造に従って、ペイロードデータをピクセル値として直接保存しています。これにより、視覚的にはノイズの多い画像が生成されますが、機能的な有効性は維持され、抽出プロセスが簡素化されます。
