
AD Miner ist ein Active-Directory-Prüftool, das Cypher-Abfragen nutzt, um Daten aus der #Bloodhound-Graphdatenbank zu verarbeiten und Sicherheitsschwachstellen aufzudecken.
Funktionen der webbasierten Berichte:
Eine risikobasierte Bewertung von Active Directory-Schwachstellen sowie umfassende Behebungswege.
Suchleiste und Steuerelemente, die sorgfältig darauf abgestimmt sind, die riskantesten Fehlkonfigurationen zu identifizieren.
Sie können auch Indikatoren im Zeitverlauf beobachten, um die Effizienz von Gegenmaßnahmen zu messen.
AD Miner wurde ursprünglich von Forvis Mazars entwickelt und wird vom Grant Thornton Cybersecurity Audit & Advisory Team gewartet.
Um AD Miner auszuführen, benötigen Sie zunächst eine Neo4j-Datenbank, die die Active Directory-Objekte enthält:
[!CAUTION] Wir empfehlen dringend die Verwendung von BloodHound Automation, da es das Graph Data Science Neo4j-Plugin installiert, welches:
- die Berechnungszeit und die Gesamtleistung erheblich verbessert.
- die Verwendung von Smartest Path anstelle der integrierten Neo4j shortestPath() ermöglicht (d.h. Pfade, die einfacher auszunutzen sind als die geringsten Knotensprünge).
Für die Einrichtung Ihrer BloodHound-Umgebung (einschließlich GUI und Neo4j-Datenbank) wird BloodHound Automation aufgrund seiner nahtlosen Integration mit dem Graph Data Science-Plugin dringend empfohlen. Es ist zwar völlig in Ordnung, die Standardinstallation von BloodHound CE zu verwenden, aber beachten Sie, dass Ihnen die Vorteile von GDS entgehen (z. B. intelligenteres Pathfinding, verbesserte Ausführungsgeschwindigkeit usw.).
Standardmäßig erstellt BloodHound eine Neo4j-Basis, die über Port 7687 zugänglich ist.
Der einfachste Weg ist der folgende Befehl mit pipx:
pipx install 'git+https://github.com/AD-Security/AD_Miner.git'
ADMiner ist auch in einigen Linux-Distributionen verfügbar:
pacman -S ad-minernix-env -iA nixos.ad-minerEin Docker-Image ist zum Bauen verfügbar. Erstellen Sie das Image mit dem folgenden Befehl:
docker build -t ad-miner .
Um dies unter Windows mit den BloodHound Community Edition-Daten auszuführen, verwenden Sie die folgenden Befehle:
docker run -v ${PWD}:/tmp ad-miner AD-miner -b bolt://host.docker.internal:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Um dies unter Linux mit den BloodHound Community Edition-Daten auszuführen, verwenden Sie die folgenden Befehle:
docker run -v ${PWD}:/tmp --network host ad-miner AD-miner -b bolt://localhost:7687 -u neo4j -p mypassword -cf YOUR_PREFIX
Beachten Sie, dass das Einhängen des Volumes mit -v entscheidend ist, um die Ausgabe der Daten zu erhalten. Dies setzt voraus, dass der BHCE-Server mit den Standardeinstellungen auf dem Docker-Host läuft.
Führen Sie das Tool aus:
AD-miner [-h] [-b BOLT] [-u USERNAME] [-p PASSWORD] [-e EXTRACT_DATE] [-r RENEWAL_PASSWORD] [-a] [-c] [-l LEVEL] -cf CACHE_PREFIX [-ch NB_CHUNKS] [-co NB_CORES] [--rdp] [--evolution EVOLUTION] [--cluster CLUSTER]
Beispiel:
AD-miner -cf My_Report -u neo4j -p mypassword
Cache-Dateien werden nach Abschluss jeder Neo4j-Anfrage generiert. Diese Funktion ermöglicht es Ihnen, AD Miner jederzeit während seines Prozesses zu pausieren oder zu stoppen, ohne zuvor berechnete Ergebnisse zu verlieren. Um den Cache zu nutzen, verwenden Sie den Parameter -c. Die Cache-Dateien werden im Ordner cache_neo4j in Ihrem aktuellen Repository gespeichert. Damit der Cache verwendet wird, muss der Berichtsname mit dem Namenspräfix der Cache-Datei übereinstimmen:
AD-miner -c -cf My_Report -u neo4j -p mypassword
Um große Datensätze besser zu handhaben, ist es möglich, Multithreading zu aktivieren und auch einen Cluster von Neo4j-Datenbanken zu verwenden, wie im folgenden Beispiel gezeigt (wobei server1 32 Threads und server2 16 Threads verarbeitet):
AD-miner -c -cf My_Report -b bolt://server1:7687 -u neo4j -p mypassword --cluster server1:7687:32,server2:7687:16
Wenn die Kennwortverlängerungsrichtlinie bekannt ist, können Sie sie mit dem Parameter -r angeben, um sicherzustellen, dass die Kennwortverlängerungskontrollen mit den Einstellungen Ihrer Umgebung übereinstimmen (Standard ist 90 Tage). Wenn die Kennwortrichtlinie beispielsweise auf 180 Tage festgelegt ist, können Sie Folgendes verwenden:
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180
[!TIP] Das Standardkennwort der Bloodhound CE Neo4j-Datenbank ist
bloodhoundcommunityeditionoderneo5j, wenn Sie BloodHound Automation verwenden
Optionen:
-h, --help Diese Hilfemeldung anzeigen und beenden
-b BOLT, --bolt BOLT Neo4j Bolt-Verbindung (Standard: bolt://127.0.0.1:7687)
-u USERNAME, --username USERNAME
Neo4j-Benutzername (Standard: neo4j)
-p PASSWORD, --password PASSWORD
Neo4j-Passwort (Standard: bloodhoundcommunityedition)
-e EXTRACT_DATE, --extract_date EXTRACT_DATE
Extraktionsdatum (z. B. 20220131). Standard: letztes Anmeldedatum
-r RENEWAL_PASSWORD, --renewal_password RENEWAL_PASSWORD
Kennwortverlängerungsrichtlinie in Tagen. Standard: 90
-c, --cache Lokale Datei für Neo4j-Daten verwenden
-l LEVEL, --level LEVEL
Rekursionstiefe für Pfadabfragen
-cf CACHE_PREFIX, --cache_prefix CACHE_PREFIX
Zu verwendende Cache-Datei (bei mehreren Firmen-Cache-Dateien)
--gpo_low Führt eine schnellere, aber unvollständige Abfrage für GPO durch (schneller als die reguläre Abfrage)
-ch NB_CHUNKS, --nb_chunks NB_CHUNKS
Anzahl der Blöcke für parallele Neo4j-Anfragen. Standard: 20 * Anzahl der CPUs
-co NB_CORES, --nb_cores NB_CORES
Anzahl der Kerne für parallele Neo4j-Anfragen. Standard: Anzahl der CPUs
--rdp Die CanRDP-Kante in Graphen einbeziehen
--evolution EVOLUTION
Entwicklung im Zeitverlauf: Speicherort der JSON-Datendateien. z.B.: '../../tests/'
--cluster CLUSTER Knoten des Clusters zum Ausführen paralleler Neo4j-Abfragen. z.B.: host1:port1:nCore1,host2:port2:nCore2,...
In den Graphenseiten können Sie mit der rechten Maustaste auf die Graphenknoten klicken, um sie zu clustern oder den Cluster zu öffnen.
Wenn Sie mehrere AD-Miner-Berichte im Laufe der Zeit haben, können Sie die Entwicklung einfach mit dem --evolution-Argument verfolgen: Jeder AD-Miner-Bericht generiert eine JSON-Datendatei zusammen mit der index.html-Datei. Sie müssen lediglich diese verschiedenen JSON-Dateien in einem einzigen Ordner sammeln und den Pfad zu diesem Ordner nach dem --evolution-Argument angeben.
AD-miner -c -cf My_Report -b bolt://server:7687 -u neo4j -p mypassword -r 180 --evolution evolution_folder/
Ein Tab 'Entwicklung im Zeitverlauf' erscheint auf der Hauptseite und bietet Entwicklungsgraphen für jede Kategorie (Berechtigungen, Passwörter, Kerberos und Sonstiges).
Eine detaillierte Entwicklung für jede Kontrolle ist ebenfalls verfügbar und kann über die Schaltfläche 'Entwicklung anzeigen' für jede Kategorie aufgerufen werden. Eine logarithmische Skala ist verfügbar, um subtile Variationen im Zeitverlauf besser hervorzuheben.
AD Miner kann Pfade basierend auf ihrer tatsächlichen Ausnutzbarkeit berechnen. Tatsächlich ist der kürzeste Pfad manchmal schwierig auszunutzen (hier wegen des ExecuteDCOM vor dem HasSession).
Während ein längerer, aber einfacherer Pfad existiert (hier mit MemberOf und AdminTo anstelle von ExecuteDCOM).
AD Miner wechselt automatisch in den Smartest-Path-Modus, wenn Ihre Neo4j-Datenbank das Graph Data Science-Plugin installiert hat (https://neo4j.com/docs/graph-data-science/current/). Der einfachste Weg, dieses Plugin zu installieren, ist die Definition einer Umgebungsvariable in Ihrem Neo4j-Docker: NEO4J_PLUGINS=["graph-data-science"] (standardmäßig installiert mit BloodHound Automation).
Derzeit nutzen 10 Kontrollen die vollständige Graphabdeckung und optimieren die intelligentesten Pfade für die Analyse.
Erfahren Sie, wie Sie hier mitwirken können.
| Kategorie | Beschreibung | Kategorie | Beschreibung |
|---|
| Kerberos | AS-REP Roastable-Konten | Sonstiges | Computer mit veraltetem Betriebssystem | |
| Kerberos | Kerberoastable-Konten | Sonstiges | Inaktive Konten | |
| Kerberos | Kerberos eingeschränkte Delegierung | Sonstiges | Funktionsebene der Domäne | |
| Kerberos | Kerberos RBCD gegen Computer | Sonstiges | Geistercomputer | |
| Kerberos | Kerberos uneingeschränkte Delegierungen | Sonstiges | Gruppen ohne Mitglieder | |
| Kerberos | Altes KRBTGT-Passwort | Sonstiges | OUs ohne Mitglieder | |
| Kerberos | Shadow Credentials auf privilegierten Konten | Sonstiges | Shadow Credentials auf Domänencontrollern | |
| Kerberos | Shadow Credentials auf regulären Konten | Sonstiges | Unerwartete PrimaryGroupID | |
| Passwörter | Zugriff auf LAPS-Passwörter | Sonstiges | Benutzer-FGPP | |
| Passwörter | Computer ohne LAPS | Berechtigungen | ACL-Anomalien | |
| Passwörter | Objekte können GMSA-Passwörter von Administratoren lesen | Berechtigungen | Angriffspfad-Engpässe | |
| Passwörter | Umgehung der Passwortanforderung | Berechtigungen | Computer als Admin anderer Computer | |
| Passwörter | Benutzer mit Klartextpasswörtern | Berechtigungen | Domänenübergreifende Pfade zu Domänenadmin | |
| Passwörter | Benutzer mit alten Passwörtern | Berechtigungen | Gastkonten | |
| Passwörter | Benutzer ohne Passwortablauf | Berechtigungen | Unzureichender Zugriff auf DCSync-Berechtigungen | |
| Berechtigungen | Unzureichende AdminCount-Einstellungen | Berechtigungen | Unzureichende Berechtigungen für GPO-Änderungen | |
| Berechtigungen | Unzureichende Anzahl von Domänenadmins | Berechtigungen | Maschinenkonten mit unzureichenden Berechtigungen | |
| Berechtigungen | Maschinenkonten mit unzureichenden Berechtigungen | Berechtigungen | Nicht-Tier-0 lokale Admin-Berechtigungen auf ADCS | |
| Berechtigungen | Objekte mit SID-Verlauf | Berechtigungen | Pfade zu DNS-Admins | |
| Berechtigungen | Pfade zu Domänenadmins | Berechtigungen | Pfade zu Operator-Gruppen | |
| Berechtigungen | Pfade zu Organisationseinheiten (OU) | Berechtigungen | Pfade zu Servern | |
| Berechtigungen | Pfade zum AdminSDHolder-Container | Berechtigungen | Gruppe "Pre-Windows 2000 Compatible Access" | |
| Berechtigungen | Privilegiertes Konto außerhalb der geschützten Benutzergruppe | Berechtigungen | RDP-Zugriff (Computer) | |
| Berechtigungen | RDP-Zugriff (Benutzer) | Berechtigungen | Tier-0-Verstoß (Sitzungen) | |
| Berechtigungen | Benutzer mit starken domänenübergreifenden Berechtigungen | Berechtigungen | Benutzer mit lokalen Admin-Berechtigungen |
| Kategorie | Beschreibung | Kategorie | Beschreibung |
|---|
| Entra ID Sonstiges | Azure-inaktive Konten | Entra ID MS Graph | Direkte Controller von MS Graph | |
| Entra ID Passwörter | Entra ID-Kennwortzurücksetzungsberechtigungen | Entra ID MS Graph | Entra ID-Konten nicht mit On-Premises synchronisiert | |
| Entra ID Passwörter | Inkohärente letzte Kennwortänderung | Entra ID MS Graph | Synchronisierte Konten mit deaktiviertem Zwillingskonto | |
| Entra ID Berechtigungen | Zugriff auf privilegierte Entra ID-Rollen | Entra ID Berechtigungen | Privilegierte Konten sowohl auf On-Premises als auch in Azure | |
| Entra ID Berechtigungen | On-Premises/Entra ID-übergreifender Pfad zu Tier-0 | Entra ID Berechtigungen | Benutzer, die möglicherweise mit AADConnect in Verbindung stehen | |
| Entra ID Berechtigungen | Entra ID-Benutzer mit Pfad zu hochwertigen Zielen |