
ダイレクトSyscallベースのリフレクティブプロセスホローイングにより、ChromiumのApp-Bound暗号化をバイパス。Chrome、Edge、Brave、Avastからクッキー、パスワード、支払い方法、トークンを抽出 - ファイルレス、ユーザーモード、管理者権限不要。
Chrome App-Bound Encryption Decryption)Chromium の App-Bound Encryption (ABE) に対する完全なインメモリ・バイパスを実証するポストエクスプロイテーションツールです。このプロジェクトは、Direct Syscall ベースの Reflective Process Hollowing を利用して、正規のブラウザプロセスをサスペンド状態で起動し、ペイロードをステルス的に注入して、そのブラウザのアイデンティティとセキュリティコンテキストを乗っ取ります。この Living-off-the-Land (LOTL) 手法は、ブラウザ自身のセキュリティモデルを無効化します。ファイルレスアプローチにより、このツールは完全にメモリ上で動作し、ユーザーランド API フックをバイパスして、最新の Chromium ブラウザから機密性の高いユーザーデータ(Cookie、パスワード、支払い情報)を復号・窃取します。
この研究が役立つと感じられたなら、コーヒー一杯をご馳走していただけると幸いです:
このツールの有効性は、最新の回避技術を組み合わせたことに起因しています。
回避のためのダイレクトシステムコール: 標準的な WinAPI 関数に対する EDR/AV のユーザーランドフックをバイパスし、カーネル関数を直接呼び出します。エンジンは Hell's Gate 手法と ハッシュベースの関数マッチング(バイナリ内に平文のシステムコール名は含まない)を用いて、実行時にシステムコール番号を動的に解決します。
Direct Syscall ベースの Process Hollowing: ステルス性の高いプロセス生成・注入技法です。トラフィックが多く、監視されている可能性のあるプロセスに注入する代わりに、新しくサスペンド状態のホストプロセスを作成します。これにより、すべてのメモリ操作がプロセスの通常実行開始前に行われるため、検出される可能性が大幅に低下します。
ファイルレス・インメモリ・ペイロード: ペイロード DLL はターゲットマシン上でディスクに触れることがありません。ChaCha20 で暗号化されたコンパイル時バイト配列として埋め込まれ、コンパイル時に導出されたキーでメモリ上で復号され、リフレクティブにロードされるため、フォレンジック上の痕跡を最小限に抑え、静的ファイルベースのスキャナをバイパスします。
Reflective DLL Injection (RDI): メインペイロードに LoadLibrary を使用しない、ステルス性の高いプロセス注入手法です。これにより、モジュールのロードを監視する検知メカニズムを回避します。自己完結型のブートストラップローダーが PE セクションをマッピングし、再配置を実行し、メモリからインポートを解決します。
ターゲットコンテキスト COM 呼び出し: App-Bound Encryption を無効化するための要です。信頼されたブラウザプロセスの 内部 でコードを実行することで、そのブラウザのアイデンティティとセキュリティコンテキストを継承し、ABE COM サーバーに対して正規の呼び出しに見えるリクエストを行い、パス検証セキュリティチェックを通過できます。
Nt*/Zw* 関数名はなく、コンパイル時の DJB2 ハッシュを使用します。LoadLibrary 呼び出しなしでペイロードをステルス的にロードします。--kill フラグが利用可能です。
| Browser | Tested Version (x64 & ARM64) |
|---|---|
| Google Chrome | 144.0.7559.133 |
| Google Chrome Beta | 145.0.7632.18 |
| Brave | 1.86.148 (144.1.86.148) |
| Microsoft Edge | 145.0.3800.36 |
| Avast Secure Browser | 143.0.33371.147 |
注: Chrome/Brave/Edge 144+ は新しい
IElevator2COM インターフェイスを使用します。このツールは、利用可能な場合は自動的にIElevator2を使用し、古いバージョンではIElevatorにフォールバックします。Avast Secure Browser は、拡張された vtable(12 メソッド、オフセット 104 に DecryptData)を持つカスタムのIElevatorChromeインターフェイスを使用します。
このマトリクスは、サポートされている各ブラウザの抽出機能を示します。
| Feature | Google Chrome | Microsoft Edge | Brave | Avast Secure Browser |
|---|---|---|---|---|
| Cookies | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Passwords | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Payment Methods | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| IBANs | ✅ ABE | ❌ N/A | ✅ ABE | ✅ ABE |
| Auth Tokens | ❌ N/A | ❌ N/A | ❌ N/A |
このツールの実行は、Direct Syscall ベースの Reflective Hollowing プロセスを中心に構築され、ステルス性と効率性に重点を置いています。このアプローチにより、高レベルの API 呼び出しがほとんど行われず、ペイロードが正規の新規作成ブラウザプロセス内から動作することが保証されます。
chromelevator.exe)ntdll.dll を動的に解析してハッシュベースのマッチングによりシステムコール番号 (SSN) を解決し、カーネル遷移ガジェット(syscall/ret または svc/ret)を特定します。--kill フラグが指定されている場合は、NtGetNextProcess と NtTerminateProcess のシステムコールを使用して、対象ブラウザの実行中のすべてのインスタンスを終了し、SQLite データベースのファイルロックを解放します。CREATE_SUSPENDED 状態(CreateProcessW)で作成します。このクリーンなサスペンド状態のプロセスが、ペイロードのホストとして機能します。NtAllocateVirtualMemory(直接システムコール)を使用してメモリを割り当てます。NtWriteVirtualMemory で、割り当てられた領域に復号されたペイロード DLL を書き込みます。NtProtectVirtualMemory(直接システムコール)を使用して、メモリ領域のアクセス権を実行可能に変更します。NtCreateThreadEx を使用して、ターゲットプロセス内に新しいスレッドが作成されます。スレッドの開始アドレスは、ペイロードの Bootstrap エクスポートを直接指し、引数としてリモートパイプ名のアドレスが渡されます。ブラウザの元のメインスレッドはサスペンドされたままとなり、再開されることはありません。その後、インジェクターはペイロードがパイプに接続してくるのを待ちます。Bootstrap リフレクティブローダーが実行され、拡張されたステルス性を備えたカスタムインメモリ PE ローダーとして機能します。
NtAllocateVirtualMemory(フックされた VirtualAlloc をバイパス)でペイロード用の新しいメモリを割り当てます。NtProtectVirtualMemory でセクションのアクセス権を設定します。DllMain を呼び出します。DllMain は新しいスレッドを生成し、インジェクターから渡された名前付きパイプハンドルに即座に接続します。インジェクターから送信された出力パスを含む設定を読み取ります。以降のすべてのログとステータス更新は、このパイプを介して中継されます。IElevator2、以前のバージョンでは IElevator、Edge では IEdgeElevatorFinal、Avast Secure Browser では IAvastElevator)をインスタンス化します。呼び出しが信頼されたプロセスパスから発信されるため、サーバーのすべてのセキュリティチェックが通過します。Local State ファイルから読み取った app_bound_encrypted_key を提供して、COM インターフェイスの DecryptData メソッドを呼び出します。COM サーバーはキーを忠実に復号し、平文の AES-256 マスターキーをペイロードに返します。Default、Profile 1 など)を列挙します。各プロファイルについて、関連する SQLite データベース(Cookies、Login Data、Web Data)を照会し、AES-256-GCM を使用してデータブロブを復号し、シークレットを JSON としてフォーマットします。結果は、インジェクターが指定した出力ディレクトリに直接書き込まれます。FreeLibraryAndExitThread を呼び出してクリーンアップします。シグナルを受信したインジェクターは、NtTerminateProcess で親ホストプロセスを終了します。