VoidStealerがインジェクションや権限昇格なしでChromeの秘密を盗む

MaaS情報窃取ツールVoidStealerの新しい亜種は、ハードウェアブレークポイントを使用してGoogle ChromeのApplication‑Bound Encryption(ABE)に対するデバッガベースのバイパスを武器化した、実際に観察された初のマルウェアになり、ブラウザメモリからChrome v20_master_keyを直接盗みます。

以前のABEバイパスと異なり、この手法はシステムレベルの権限昇格もブラウザプロセスへのコードインジェクションも必要とせず、検出フットプリントを大幅に削減しながらも、攻撃者にABE保護されたクッキーと認証情報への完全なアクセスを提供します。

ABEは、クッキーおよび構成によってはパスワードなどの秘密をv20プレフィックス値として、アプリケーションごとのAES-GCMキー(v20_master_keyと呼ばれることもあります)で暗号化して保存し、このキー自体はNT AUTHORITY\SYSTEMを使用してCryptProtectDataで保護され、ChromeがGoogle Chrome昇格サービスを呼び出すときにIElevator::Decryptを介してデコードされます。

従来の情報窃取ツールは、SYSTEMとして実行してサービスロジックを複製したり、ブラウザにインジェクションしてChrome コンテキスト内からCOMを介してIElevator::DecryptDataを呼び出したりするなど、いくつかのバイパス方法で対応してきました。しかし、両方のアプローチはEDRテレメトリではかなり目立ちます。

Google は2024年7月にChrome 127でABEを導入し、デコードをChromeのアイデンティティと特権昇格サービスに結びつけることで、クッキーおよび段階的にその他の秘密窃取試行を目立たせるようにしました。

Image

VoidStealerはこのパターンに従い、フォールバックとして「従来の」COMベースのIElevator::DecryptDataインジェクション技術を実装しています。

しかし、v2.0での際立った特徴は、通常のABEデコード中にマスターキーがプレーンテキストで存在する短い瞬間にそれを盗むことで、SYSTEMとインジェクションの両方の要件をバイパスするデバッガ駆動方式です。

これにより、権限昇格、プロセスホロウイング、ブラウザへのリモートスレッドインジェクションに焦点を当てた動作検出を回避したい脅威者にとって、この新しいバイパスは特に魅力的です。

デバッガベースのv20_master_key

新しい技術は、MeckazinのオープンソースプロジェクトであるElevationKatzからほぼ直接コピーされており、ChromeまたはEdgeにデバッガとしてアタッチし、ハードウェアブレークポイントを使用してChrome がABE保護データを処理するためにそれをデコードするときのv20_master_keyを傍受することにより、依存しています。

Image

VoidStealer v2.0は、CreateProcessWを使用してSW_HIDEおよびCREATE_SUSPENDEDで非表示のブラウザインスタンスを生成することで開始し、迅速にそれを再開してDebugActiveProcess経由でデバッガとしてアタッチし、ブラウザは通常スタートアップ中にクッキーをロードおよびデコードするという事実を利用します。

アタッチされると、VoidStealerはLOAD_DLL_DEBUG_EVENTノーティフィケーションを待機し、chrome.dllまたはmsedge.dllを特定し、ReadProcessMemoryを使用してモジュールの.rdataセクションをスキャンしてOSCrypt.AppBoundProvider.Decrypt.ResultCodeを探します。これはChromiumがABEデコードパスでos_crypt::DecryptAppBoundStringへの呼び出しの直後に配置されます。

Image

その後、.textセクションをLEA命令(48 8D 0D …)でスキャンし、計算されたディスプレースメントがその文字列に解決され、v20_master_keyがプレーンテキストで存在する場合に実行される正確な命令アドレスが得られます。

NtGetNextThreadおよびSetThreadContextを使用して、VoidStealerは、ソフトウェアブレークポイントが必要とするブラウザメモリのパッチングを避けるため、既存および新規作成されたすべてのブラウザスレッド全体で、そのアドレスでハードウェアブレークポイント(DR0/DR7)を構成します。

Image

ブラウザがスタートアップ中にこのブレークポイントに当たると、現在のChromiumとEdgeのビルドは、v20_master_keyへのポインタをR15(Chrome)またはR14(Edge)に配置し、VoidStealerはレジスタ値をフォローして、被害者プロセス内でCryptUnprotectDataまたはCryptUnprotectMemoryを使用せずに、2組のReadProcessMemory呼び出しでキーを抽出できます。

v20_master_keyが取得されたら、この情報窃取ツールはブラウザSQLiteデータベースからv20プレフィックスABE保護クッキーおよび認証情報をオフラインでデコードでき、そのプロファイルに対するABEの保護を実質的に無効にしていまいます。

防御者のための検出の機会

他のマルウェアファミリーが類似の技術を採用するにつれて実装の詳細は異なる可能性がありますが、バイパスは防御者が対象にできるいくつかの安定した動作的不変性を示しています。

chrome.dllのクロスリファレンスに従うことで、逆アセンブルされたコードがソースコードに対応し、クロスリファレンスがLEA命令から来ていることが分かります。

Image

第一に、攻撃はデバッガの下でブラウザを起動するか、既存のChomeまたはEdgeプロセスにデバッガをアタッチする必要があり、これは非開発者ソフトウェアでは非常に非典型的です。DebugActiveProcess、デバッグオブジェクトハンドル、またはchrome.exe/msedge.exeの予期しない親プロセスを監視することで、このようなアクティビティを表面化させることができます。

第二に、この技術は.text/.rdataセクションのスキャンとキーマテリアルの読み取りなど、集約的なブラウザメモリ読み取りに依存しているため、未署名または信頼されていないバイナリからのブラウザプロセスに対するReadProcessMemory呼び出しを相関させることは強力なハンティング信号です。

さらに、ほとんどの情報窃取ツールはバイパスに使用されるヘルパーブラウザインスタンスを隠そうとします。例えば、SW_HIDEを使用して作成したり、ヘッドレスモードで実行したり、ウィンドウをオフスクリーンに配置したりすることで、未知の親によって起動された非表示または非対話型ブラウザセッションは別の重要な指標になります。

プロセス作成、デバッガアタッチ、メモリアクセスパターン、および非表示ウィンドウフラグを融合させるテレメトリパイプラインは、権限昇格と直接的なコードインジェクションを回避しても、このABEバイパスの新しいクラスをキャッチするのに適した立場にあります。

翻訳元: https://gbhackers.com/voidstealer-steals-chrome/

ソース: gbhackers.com