
NebulousAD automatisiertes Tool zur Prüfung von Anmeldeinformationen.
Ab dem 14. April wird NuID die NebulousAD-API, mit der dieser Code kommuniziert, nicht mehr hosten. Als kleines Entwicklerteam haben wir festgestellt, dass es nicht machbar ist, sowohl das NebulousAD-Portal als auch unser Authentifizierungs-Entwicklerportal gleichzeitig aktiv zu unterstützen, zu überwachen und weiterzuentwickeln.
Der Code zum Überprüfen von Active Directory-Passwörtern gegen einen Satz öffentlich bekannter kompromittierter Authentifizierungsdaten wird weiterhin in diesem Repository leben, und wir werden in den kommenden Monaten das gesamte hervorragende Feedback, das wir durch unsere Erfahrung mit NebAD erhalten haben, einfließen lassen, um einen nahtlosen Passwort-Blacklisting-Dienst zusammen mit unserer Authentifizierungs-API bereitzustellen. Also bleibt gespannt!
Wir schätzen Ihr Engagement und Ihr Feedback in der Vergangenheit und freuen uns darauf, in Zukunft von Ihnen zu hören. Zögern Sie nicht, uns bei Fragen zu NebAD, NuID oder allem, was mit digitaler Identität zu tun hat, zu kontaktieren.
Bis bald!
NebulousAD ist ein Tool zur Überprüfung von Active Directory-Benutzerpasswörtern gegen eine Datenbank mit kompromittierten Passwörtern aus Datenlecks. Das Tool wurde entwickelt, um Windows-Systemadministratoren dabei zu helfen, die Verwendung kompromittierter Passwörter zu finden und optional zu beheben. Dieser Ansatz wird von NIST 800-63B empfohlen und kann helfen, sich vor Credential Spraying und Credential Stuffing-Angriffen zu schützen.
Die Nebulous-Datenbank enthält derzeit über 2,5 Milliarden eindeutige Hashes von kompromittierten Passwörtern.
NebulousAD verwendet standardmäßig das k-Anonymitätsmodell, um die Privatsphäre und Sicherheit der gegen die API geprüften Passwörter zu wahren. An die API werden nur die ersten fünf Zeichen eines SHA-2-Hashs gesendet. Weitere Informationen zu k-Anonymität finden Sie hier.
Das Tool wurde ursprünglich auf der BSides Las Vegas 2019 vorgestellt. Ein Video der BSides-Präsentation finden Sie hier.
Geplante Funktionen:
Laden Sie einfach die vorkompilierte Version herunter (benötigt keinen Python-Interpreter) oder bauen Sie aus dem Quellcode:
Dieses Tool erfordert Python2.7 (vorerst).
Führen Sie git clone https://github.com/NuID/nebulousAD.git aus
Installieren Sie es anschließend mit python setup.py install
Dann initialisieren Sie Ihren Schlüssel. Sie erhalten Ihren Schlüssel unter: https://nebulous.nuid.io/#/register Sobald Sie registriert sind, klicken Sie auf die Schaltfläche, um Ihren API-Schlüssel zu generieren und kopieren Sie ihn.
Jetzt können Sie ihn wie folgt initialisieren: nebulousAD -init-key <api_key>
Sie können das Tool jetzt ausführen. Wenn es Ihren API-Schlüssel nicht findet, müssen Sie möglicherweise Ihre Terminalsitzung neu starten. Der API-Schlüssel wird in einer Umgebungsvariable gespeichert. Abmelden und wieder anmelden funktioniert ebenfalls.
Sie können die Datei nebulousAD.exe für die Verwendung ohne Interpreter hier herunterladen. Alternativ können Sie das Tool selbst aus dem Quellcode kompilieren:
pip install pyinstallergit clone https://github.com/NuID/nebulousAD.gitcd .\nebulousAD\nebulousADpyinstaller --onefile nebulousAD.pyPyinstaller gibt den Speicherort der kompilierten Binärdatei aus:

Ein Beispielbefehl zum Dumpen aller Hashes und Überprüfen gegen die API:
nebulousAD.exe -v -snap --check
NuID Credential Auditing tool.
optional arguments:
-h, --help show this help message and exit
-ntds NTDS NTDS.DIT file to parse
-system SYSTEM SYSTEM registry hive to parse
-csv CSV Output results to CSV file at this PATH.
-json JSON Output results to JSON file at this PATH
-init-key INIT_KEY Install your Nu_I.D. API key to the current users
PATH.
-c, --check Check against Nu_I.D. API for compromised
credentials.
-dk, --disable-k-anon
Disable k-anon hash searches against the API (speeds
up the audit).
-snap Use ntdsutil.exe to snapshot the system registry
hive and ntds.dit file to <systemDrive>:\Program
Files\NuID\
-shred When performing delete operations on files, use a 7
pass overwrite with sdelete.exe. Download here:
https://docs.microsoft.com/en-
us/sysinternals/downloads/sdelete
-no-backup Do not backup the existing snapshots, just overwrite
them instead.
-clean-old-snaps CLEAN_OLD_SNAPS
Clean backups older than N days.
display options:
-user-status Display whether or not the user is disabled
-pwd-last-set Shows pwdLastSet attribute for each account found
within the NTDS.DIT database.
-history Dump NTLM hash history of the users.
-v Enable verbose mode.
Deaktiviert die k-Anonymitäts-Hashprüffunktion. Dies ist nützlich, um die Suchzeit zu verkürzen, führt jedoch dazu, dass der vollständige SHA-256(NTLM)-Hash an die API gesendet wird. Wir protokollieren oder speichern keine an die API gesendeten Hashes.
Der Parameter -snap erstellt automatisch einen Snapshot von Active Directory (mit ntdsutil.exe) und extrahiert die Datei ntds.dit sowie die SYSTEM-Registrierungshive, sofern Sie über die entsprechenden Berechtigungen verfügen.
Sie können dies manuell mit verschiedenen Methoden oder dem Tool ntdsutil.exe durchführen.
Wenn Sie manuell extrahieren, können Sie mit -system path\to\SYSTEM und -ntds path\to\ntds.dit auf die Dateien verweisen. Dies ist nützlich, wenn Sie alte Snapshots prüfen möchten.
Dies erfordert einen API-Schlüssel von https://nebulous.nuid.io/#/register. Sobald Sie diesen haben und mit -init-key installiert haben, können Sie die Hashes gegen die NuID-API prüfen.
Wenn Sie -history angegeben haben, wird auch der Passwortverlauf jedes Kontos überprüft, um festzustellen, ob eines der zuvor verwendeten Passwörter kompromittiert wurde.
Fügt eine Ausgabe hinzu, die angibt, ob das Konto in Active Directory aktiviert oder deaktiviert ist.
Fügt eine Ausgabe hinzu, die das Datum angibt, an dem das Passwort des Kontos zuletzt festgelegt wurde. Dies kann nützlich sein, um Verstöße gegen die Sicherheitsrichtlinie für Konten zu erkennen, die nicht automatisch gemäß der GPO zurückgesetzt werden, z. B. Dienstkonten.
Überprüft oder extrahiert auch den gespeicherten Passwortverlauf der Konten.
Verwendet eine 7-fache Überschreibung nach DoD-Standard beim Löschen von Snapshots. Hierfür muss sich sdelete.exe in Ihrem Pfad befinden. Sie können es hier herunterladen: https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Laden Sie es einfach herunter und legen Sie es in Ihrem %SYSTEMDRIVE\Windows\System32\-Verzeichnis ab oder richten Sie die Umgebungsvariable ein.
Nützlich zum Bereinigen von Backups, wenn diese Anwendung mit dem Taskplaner ausgeführt wird. Die SYSTEM-Hive und die .dit-Datei können in größeren Domänen recht groß sein und viel Speicherplatz beanspruchen.
Wenn Sie den Taskplaner für eine tägliche Prüfung verwenden, können Sie diese Option wie folgt verwenden: -clean-old-snaps 7, um nur eine Woche Snapshots zu speichern.
Wenn wir einen alten Snapshot erkennen, sichern wir ihn standardmäßig in %SYSTEMDRIVE%\Program Files\NuID\snapshot-backups.
Dies liegt daran, dass ntdsutil.exe ein leeres Verzeichnis benötigt.
Wenn Sie diese Sicherung deaktivieren und einfach den aktuellen Snapshot löschen möchten, verwenden Sie dieses Argument.
Eine RESTful-Web-API wird bereitgestellt, die es Benutzern ermöglicht, das NuID-API-Token nach der Generierung für Ihren eigenen benutzerdefinierten Client zu verwenden. Dieser Abschnitt beschreibt die korrekte Funktionalität der Web-API, gültige Anfragen, Fehlertypen und mehr.
Die grundlegende Struktur jeder Antwort ist identisch. Ausnahmslos müssen Antworten die folgenden drei Felder enthalten: success, data und error. Das erste, was beim Empfang der Antwort zu bestimmen ist, ist der success-Wert. Dieser bestimmt, ob Sie das data-Objekt weiterverarbeiten oder stattdessen das error-Objekt behandeln sollen. Die folgenden Beispiele zeigen generische Antworten des Servers sowohl in einem Erfolgs- als auch in einem Fehlerfall:
{
success: True, // Indicates the request completed successfully
data: {
/* value depends on endpoint queried */
},
error: {} // Empty
}
{
success: False, // Indicates the request did not complete successfully
data: { }, // Empty
error: {
"ErrorName": "Helpful description of the error that occurred during the request"
}
}
Jeder Fehler gibt Aufschluss darüber, was bei der Anfrage schiefgelaufen ist, sodass der Benutzer die erforderlichen Änderungen vornehmen kann.
Derzeit wird nur ein hash_type unterstützt. Diese Werte (Groß-/Kleinschreibung wird nicht beachtet) können anstelle von hash_type verwendet werden. Die Größe der hexadezimalen Zeichenfolgendarstellung des hash_value wird ebenfalls angegeben. Das hash_prefix darf diese Größe nicht überschreiten:
| Hash | Länge |
|---|---|
| NTLMSHA2 | 64 |
Der folgende HTTP-Header muss bei allen Anfragen an API-Endpunkte bereitgestellt werden, andernfalls wird ein Fehler zurückgegeben:
X-NUID-API-KEY: <Your NuID API Key>
Jeder Endpunkt beginnt mit der folgenden URL:
https://nebulous.nuid.io
/api/search/kanon/<hash_type>/<hash_prefix>Methode: GET
Beschreibung: Durchsuchen Sie die Hash-Datenbank mit einer anonymisierten Version eines Hashs. Der vollständige Hash kann bereitgestellt werden, alternativ kann aber auch ein partieller Hash in Form eines Präfixes mit mindestens 5 Zeichen verwendet werden. Alle Hashes in der Nebulous-Datenbank, die mit diesem Präfix übereinstimmen, werden zurückgegeben, ohne den genauen Hash selbst preiszugeben.
Antwort:
Die Antwort von der folgenden URL: https://nebulous.nuid.io/api/search/kanon/5f4dcc
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
/api/search/kanon/<hash_type>Methode: POST Post-Daten:
{
"prefix": "<Hash Prefix>"
}
Beschreibung: Durchsuchen Sie die Hash-Datenbank mit einer anonymisierten Version eines Hashs. Der vollständige Hash kann bereitgestellt werden, alternativ kann aber auch ein partieller Hash in Form eines Präfixes mit mindestens 5 Zeichen verwendet werden. Alle Hashes in der Nebulous-Datenbank, die mit diesem Präfix übereinstimmen, werden zurückgegeben, ohne den genauen Hash selbst preiszugeben.
Antwort:
Die Antwort von der folgenden URL: https://nebulous.nuid.io/api/search/kanon mit den Daten {"prefix": "5f4dcc"}
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
Es scheint einen Fehler in impacket zu geben, der das korrekte Extrahieren des nthash verhindert.
Vermeiden Sie vorerst die Verwendung des Arguments -history.
https://github.com/SecureAuthCorp/impacket/issues/395 https://github.com/SecureAuthCorp/impacket/issues/660
Kontaktieren Sie uns unter [email protected]
| Fehlername | Beschreibung | Statuscode |
|---|
ActionExpired | Die aufgerufene Aktion ist abgelaufen und nicht mehr gültig | 401 |
ActionInvalid | Die aufgerufene Aktion existiert nicht | 401 |
AuthFailure | Ungültige Benutzer-/Passwortkombination | 401 |
AuthMissingToken | Es wurde kein Authentifizierungstoken bereitgestellt | 401 |
FieldMissing | Ein oder mehrere Felder fehlen in der JSON-Anfrage | 422 |
HashInvalidLength | Der bereitgestellte Hash und die erwartete Länge für den angegebenen Hash-Typ stimmen nicht überein | 422 |
HashInvalidValue | Erwartete hexadezimale Hash-Darstellung | 422 |
HashInvalidPrefix | Ein Präfix muss eine Mindestlänge von 5 Zeichen haben | 422 |
HashUnsupported | Der bereitgestellte Hash-Typ wird nicht unterstützt | 422 |
InvalidJWT | Das bereitgestellte JWT war ungültig | 401 |
InvalidRequest | Die Anfrage war fehlerhaft oder enthielt kein JSON-Payload | 422 |
KeyBadUser | Der bereitgestellte API-Schlüssel stimmt nicht mit dem erwarteten Benutzer überein | 401 |
KeyDisabled | Der bereitgestellte API-Schlüssel ist deaktiviert | 403 |
KeyInvalid | Der bereitgestellte API-Schlüssel ist ungültig | 401 |
KeyMissing | Es wurde kein API-Schlüssel bereitgestellt | 401 |
NotFound | Der aufgerufene Endpunkt ist ungültig | 404 |
PasswordIncorrect | Das aktuelle Passwort stimmt nicht überein | 401 |
UserDisabled | Das Konto ist derzeit deaktiviert | 401 |
UserKeyLimit | Sie haben die maximale Anzahl von API-Schlüsseln erreicht | 403 |
UserNotActivated | Das Benutzerkonto wurde noch nicht aktiviert | 403 |
UserNotFound | Das Benutzerkonto kann nicht gefunden werden | 401 |