
Rusty Stealerのリバースエンジニアリング:高度なキーロギング、ライブ画面ストリーミング、および永続化を維持するための積極的な防御回避(Windows Defenderの停止やサービスの乗っ取り)を特徴とするRustベースのRAT。
GhidraによるRusty Stealerサンプルの初期リバースエンジニアリングでは、Rustでコンパイルされた専用のキーロガーモジュールが明らかになった。デコンパイルされたビューは、マルウェアがキーコードを解決し、それらを特定のアクションにマッピングすることでユーザー入力にフックしていることを明確に示している。これは、スティーラーが認証情報、チャット、および機密性の高いユーザーデータを収集するためにキーストロークを積極的に記録していることを裏付けている。
キーロガーロジック(疑似Cビュー): FUN_140020ffe(&Var29, pHVar44, "key_press", 9) – "key_press"イベント文字列を動的に解決する。 特定のキーに対する条件チェック: "Enter"、"Escape"、"Esc"、"Tab"、"Backspace"、"Back"。 *HKEY__ pHVar37 = ... – レジストリハンドルの解決(キーボードレイアウトの読み取りや永続化の可能性あり) アセンブリビュー(逆アセンブリ): LEA R8, [local_4a8] / MOV qword ptr [R8], RAX – キーイベント構造体をメモリにロードする。 CALL FUN_140020ffe – メインのキー処理関数。 JZ LAB_14000f309 – キーコードに基づく条件分岐(特定のキーのチェック)。
アクティブなキーストロークキャプチャ: "Enter"、"Tab"、"Backspace"などに対する明示的なチェックは、マルウェアがパスワードやメッセージを再構築するために、特殊キーを含むすべてのキーストロークを記録していることを証明している。 レジストリとの相互作用: HKEY__ハンドルは、キーロガーがシステム構成を読み取っているか、ログをレジストリに保存している可能性を示唆している。 認証情報の収集: "key_press"イベントをウィンドウタイトルとともに記録することで(後の段階で見られる)、攻撃者はキーストロークを特定のアプリケーション(ブラウザ、バンキングアプリなど)にマッピングできる。

Rusty Stealerの2番目のGhidraデコンパイルビューは、これを標準的な情報スティーラーからRAT(リモートアクセストロイの木馬)の領域へと押し上げる機能を明らかにしている。このマルウェアには画面キャプチャとライブストリーミングのルーチンが含まれており、攻撃者はファイルやキーストロークを盗むことに加えて、被害者のデスクトップをリアルタイムで視覚的に監視できる。
画面キャプチャロジック: FUN_140020ffe(..., "screen_stream", 0xd) – 画面ストリーミングモジュールを明示的に初期化する。 FUN_14000d9eb7("fps", 3, ...) – ライブストリームのフレームレート(FPS)を設定し、おそらくCPU使用率と映像品質のバランスを取る。 FUN_14000c87a(..., "done", 4) / FUN_14000c87a(..., "streaming", 9) – ストリーミング操作の開始/停止を示す状態マーカー。 メモリとバッファの管理: if (uVar69 < 5) { uVar47 = uVar69; } – 画面フレームの内部バッファリングロジック。 アセンブリ参照(クロスリファレンス): LEA R8, [s_screen_stream_14001592a] – 比較のために"screen_stream"文字列をメモリにロードする。 CALL FUN_140020ffe – ストリーミングロジックのメインハンドラ。
ライブ監視: "screen_stream"と"fps"という文字列は、マルウェアが被害者の画面をライブストリーミングできることを証明している。これは単純なスティーラーではなく、本格的なRAT(njRATやQuasarなど)の特徴である。 データ窃取(視覚的): キーロガーがテキストを取得する一方で、画面ストリーミングはバンキングセッション、暗号資産ウォレット、プライベートメッセージを視覚的にキャプチャし、暗号化を完全に回避する。 リソースの最適化: 特定のFPS(例:3 FPS)を設定することは、マルウェアが高いCPU使用率でユーザーに気付かれることなく、バックグラウンドで静かに動作するように設計されていることを意味する。

Rusty Stealerの3番目のデコンパイルビューは、非常に攻撃的な防御回避とセッションハイジャックのルーチンを明らかにしている。このマルウェアには、Windows Defenderを終了させ、アクティブなネットワーク/ストリーミングセッションをハイジャックする(おそらくトラフィックを傍受したり、セキュリティ監視を妨害したりするため)特定の機能が含まれている。これは、Rusty Stealerがデータを盗むだけでなく、セキュリティツールを積極的に無力化するように設計されていることを裏付けている。
Windows Defender の停止: FUN_140020ffe(..., "kill_defender", 0xd) – 文字列を動的に解決し、Defender のプロセスを終了させます。 FUN_14001add55() – Defender のサービスやプロセスを強制的に停止する実行ルーチンである可能性が高いです。 ストリームのハイジャック: FUN_140020ffe(..., "hijack_stream", 0xc) – アクティブなストリーム(ネットワークトラフィックや画面共有)をハイジャックするロジックを解決します。 メモリ操作と実行: MOVUPS xmmword ptr [R12] / MOVUPS xmmword ptr [RDX + local_550] – 高速なメモリコピーに使用される SIMD 命令(シェルコードやストリームバッファの準備である可能性が高い)。 CALL FUN_14000d55() – ハイジャックまたは停止ルーチンを実行します。
Defender の無効化: kill_defender は、このスティーラーが Windows の組み込みセキュリティを積極的に標的にしていることを証明しています。成功すればリアルタイム保護が無効化され、マルウェアの残りの部分(キーロガー、画面ストリーマー)が妨害されることなく動作できるようになります。 セッションハイジャック: hijack_stream は、マルウェアがアクティブなネットワークストリームを傍受または乗っ取ることができることを示唆しています。これは、ライブセッション Cookie の窃取、銀行取引の傍受、リモート管理ツールの妨害に使用される可能性があります。 設計による回避: error_pinned の存在は、マルウェアが重要なプロセスを終了できない防御を想定していることを示しています。おそらく再試行するか、手法を切り替えます。

Rusty Stealer の4番目の逆コンパイルビューは、そのシステム偵察モジュールを明らかにします。データを窃取したりファイルを外部に送信したりする前に、マルウェアはホスト名、ユーザー名、オペレーティングシステムのバージョン、ローカル/外部 IP アドレスなど、被害者のマシンに関する詳細情報を収集します。このプロファイリングデータはおそらく C2 サーバーに送信され、被害者を分類し、攻撃の次の段階を調整するために使用されます。
システムプロファイリング文字列:
"hostname" – 被害者のコンピューター名を取得します。 "username" – ログインしているユーザーアカウントを取得します。 "os_ver" – 正確な Windows のバージョンとビルドを取得します。 "local_ip" – 被害者の内部ネットワーク IP アドレスを特定します。 "external_ip" – パブリック IP アドレスを解決します(おそらく外部 API 経由)。 "stream_id" – 画面ストリーミングセッションの一意の識別子を生成します。
逆コンパイルされたロジック:
FUN_1400084d2(uStack_570, "hostname", 8, ...) – ホスト名を構造体に格納します。
FUN_1400084d2(uStack_570, "username", 8, ...) – ユーザー名を格納します。
FUN_1400084d2(uStack_570, "os_ver", 6, ...) – OS バージョンを格納します。
FUN_1400084d2(uStack_570, "local_ip", 8, ...) / "external_ip" – ネットワーク識別子を格納します。
メモリ構造: HKEY__ *local_588 / CONCAT71(local_588, 0x7f, 1) – レジストリ関連のポインタ処理(おそらくシステム識別子の読み取り)。 FUN_140010ce1(..., local_3e8, ...) – プロファイリングデータの最終的な組み立て。
被害者の分類: os_ver と external_ip を収集することで、攻撃者は被害者をフィルタリングできます(例: 特定の国、企業ネットワーク、特定のエクスプロイトに対して脆弱な Windows バージョンを標的にする)。 地理位置情報と追跡: external_ip フィールドにより、攻撃者は被害者の位置を特定し、ISP を判別できます。 セッション管理: stream_id はプロファイリングデータをアクティブな画面ストリーミングセッションにリンクし、攻撃者がどの被害者を閲覧しているかを確実に把握できるようにします。

Rusty Stealer の5番目の逆コンパイルビューは、Windows Service Control Manager(ADVAPI32.dll)との直接的なやり取りを通じた永続化メカニズムを明らかにします。OpenServiceW や ControlService などの API を活用することで、マルウェアはシステムサービスを変更、停止、または再構成し、再起動後も存続して削除を回避しようとします。
サービス制御 API:
ADVAPI32.DLL:OpenServiceW – 既存のサービスを開き、その構成を変更します。
ADVAPI32.DLL:ControlService – サービスに制御コードを送信します(例:AV/EDRサービスを無効化するSERVICE_CONTROL_STOP、または自身のサービスを起動するSERVICE_CONTROL_CONTINUE)。
ADVAPI32.DLL:CloseServiceHandle – 検知を避けるためにハンドルをクリーンアップします。
逆コンパイルされたロジック:
LPSERVICE_STATUS構造体の使用 – マルウェアがサービスを変更しようとする前に、その現在の状態を照会していることを示します。
FUN_14011c1ab – サービスハンドルを準備し、サービス制御APIを呼び出すラッパー関数。
if (cVar3 != '\0') – サービスが正常に開かれたかどうかを確認します。開かれなかった場合は、別の永続化手法にフォールバックする可能性があります。
サービス列挙: ループ while ((int)(longlong)...) はサービスを反復処理しており、おそらく対象(Windows Defenderの無効化や悪意のあるサービスの作成など)を見つけるために列挙しています。
強制的な永続化: サービスを作成または変更することで、Rusty Stealerは起動のたびにSYSTEM権限で自動的に実行されるようになり、手動での削除が極めて困難になります。 防御回避(サービス停止): 停止コードを伴うControlServiceは、ステーラーがペイロードを実行する前にWindows Defender、EDRエージェント、バックアップサービスを無効化するためによく使用されます。 権限昇格: サービスとのやり取りには昇格された権限が必要です。これらのAPIの存在は、マルウェアが管理者として実行されているか、脆弱性を悪用してSYSTEMアクセスを取得していることを示唆します。 ステルス実行: サービスはバックグラウンド(セッション0)で実行されるため、ユーザーがウィンドウやタスクマネージャー上の不審なプロセスを目にすることはありません。

GhidraによるRusty Stealerの静的解析により、このマルウェアは単なるデータ窃取ツールではなく、Rustでコンパイルされた完全に武器化されたリモートアクセストロイの木馬(RAT)であることが明らかになりました。逆コンパイルされたロジックとアセンブリを分析することで、システム偵察や認証情報の窃取から、能動的な防御回避、永続的なリモート制御に至るまで、完全な攻撃ライフサイクルを明らかにしました。
高度なキーロギング: 専用のルーチンがユーザー入力(key_press、Enter、Tab)を積極的に傍受し、認証情報やチャットを収集します。 ライブ画面ストリーミング: screen_streamとFPS設定の存在は、被害者のデスクトップをライブストリーミングする機能を示しており、監視ツールとして機能します。 攻撃的な防御回避: マルウェアにはWindows Defenderを終了させる明示的な関数(kill_defender)が含まれており、さらにセキュリティサービスを無効化しSYSTEMレベルの永続化を確立するためのサービス操作API(OpenServiceW、ControlService)も備えています。 セッションハイジャック: hijack_streamルーチンは、アクティブなネットワークまたはアプリケーションのストリームを傍受し、ライブセッションを窃取する能力を示唆しています。 システムプロファイリング: 攻撃を調整し標的の位置を特定するために、被害者のテレメトリ(hostname、username、os_ver、local_ip、external_ip)を広範囲に収集します。
総合評価: