
Identifizieren Sie die Angriffspfade in BloodHound, die Ihr AD-Stufenmodell durchbrechen.
Identifizieren Sie die Angriffspfade in BloodHound, die Ihr AD-Tiering verletzen
ImproHound ist eine eigenständige dotnet Win x64-EXE mit GUI. Um ImproHound zu verwenden, müssen Sie SharpHound ausführen, um die erforderlichen Daten aus der AD zu sammeln. Anschließend laden Sie die Daten in Ihre BloodHound-Installation hoch. ImproHound stellt eine Verbindung zur zugrunde liegenden Neo4j-Datenbank von BloodHound her. In ImproHound kategorisieren Sie die AD mithilfe der OU-Struktur in Tiers, und ImproHound identifiziert die AD-Beziehungen, die es AD-Objekten ermöglichen, ein Objekt eines höheren (näher an Null gelegenen) Tiers zu kompromittieren, und speichert die Tiering-Verstöße in einer CSV-Datei.
ImproHound DEF CON Adversary Village Präsentation
1. Richten Sie Ihre BloodHound-Datenbank ein
Sammeln Sie BloodHound-Daten mit SharpHound in Ihrer AD
Hinweis: Dies erzeugt Rauschen in Ihrer AV, SIEM usw.
Beispiel: Führen Sie SharpHound.exe von der Eingabeaufforderung aus, sammeln Sie alle (ja, GPOLocalGroup ist nicht in All enthalten):
SharpHound.exe --CollectionMethods All,GPOLocalGroup
Tipp 1: Verwenden Sie den Parameter
Domain, um Daten aus anderen Domänen der Gesamtstruktur zu sammeln.
Tipp 2: Um noch mehr Daten zu erhalten, verwenden Sie die The Session Loop Collection Method
Laden Sie Ihre BloodHound-Daten in der BloodHound-GUI hoch
Es gibt einen Bug in BloodHound, der manchmal dazu führt, dass die JSON-Datei der Domäne beim Hochladen eines BloodHound-Daten-ZIPs übersprungen wird. Überprüfen Sie die DB-Statistiken in BloodHound nach dem Daten-Upload und stellen Sie sicher, dass die Domänenobjekte existieren.
2. Installieren Sie das APOC Neo4j-Plugin (ermöglicht großartige Graph-Operationen, die wir benötigen)
Laden Sie die zu Ihrer Neo4j-Version passende APOC-Version herunter (apoc-x.x.x.x-all.jar).
Die passende APOC-Version für Ihre Neo4j-Version finden Sie in der Versionskompatibilitätsmatrix.
Versuchen Sie sich zu erinnern, wo Sie Neo4j installiert haben, und legen Sie die APOC-JAR-Datei unter: $NEO4J_HOME/plugins/ ab
/var/lib/neo4j/Bearbeiten Sie neo4j.conf in Ihrem bevorzugten Texteditor, um uneingeschränkten APOC-Zugriff zu erlauben, indem Sie die Zeile:
#dbms.security.procedures.unrestricted=my.extensions.example,my.procedures.*
ersetzen mit
dbms.security.procedures.unrestricted=apoc.*
/etc/neo4j/neo4j.conf$NEO4J_HOME/conf/neo4j.confWenn Sie ImproHound auf einem Host und BloodHound auf einem anderen ausführen möchten, müssen Sie Remote-Verbindungen zur Neo4j-Datenbank auf dem BloodHound-Host zulassen. Entfernen Sie dazu das # aus der Zeile
#dbms.default_listen_address=0.0.0.0in .
3. Laden Sie die neueste Version von ImproHound.exe herunter und führen Sie sie unter Windows (x64) aus
Bestätigen Sie, dass Sie sich mit denselben Anmeldeinformationen, die Sie in der BloodHound-GUI verwenden, bei der BloodHound-Datenbank anmelden können.

Geben Sie die Datenbank-Anmeldeinformationen ein und stellen Sie eine Verbindung her. Es sind dieselben Anmeldeinformationen, die Sie in der BloodHound-GUI verwenden.

ImproHound erstellt ein ‚TierX‘-Label auf Knoten in der BloodHound-Datenbank. Wenn Sie ImproHound bereits zuvor mit dieser BloodHound-Datenbank verwendet haben, werden Sie gefragt, ob Sie mit dem bereits erstellten Tiering fortfahren oder neu beginnen möchten.

ImproHound bietet Ihnen die Möglichkeit, ‚Standard-Tiering‘ zu setzen, wodurch Domänen-Admins in Tier 0, Domänen-Benutzer in Tier 2 usw. gesetzt werden, oder alle Objekte in Tier 2 zu setzen.

Dies ist die Seite, auf der Sie die AD-Objekte in Tiers kategorisieren. Das Fenster zeigt die OU-Struktur an. Jedes AD-Objekt hat einen Tier-Wert, der mit den Pfeilen erhöht und verringert werden kann.
Setze untergeordnete Objekte auf Tier
Wenn Sie eine Domäne oder einen AD-Container auswählen, können Sie auf ‚Setze untergeordnete Objekte auf Tier‘ klicken, um alle untergeordneten Objekte (rekursiv) auf die Tier-Stufe der angegebenen Domäne/des Containers zu setzen.
Setze Mitglieder auf Tier
Wenn Sie eine Gruppe auswählen, können Sie auf ‚Setze untergeordnete Objekte auf Tier‘ klicken, um alle Mitglieder (rekursiv) auf die Tier-Stufe der angegebenen Gruppe zu setzen.
Setze Tier für GPOs
Wenn Sie auf ‚Setze Tier für GPOs‘ klicken, wird für jede GPO die Tier-Stufe auf die Tier-Stufe der OU mit der höchsten Stufe (nähe Null) gesetzt, mit der die GPO verknüpft ist. GPOs, die nicht mit einer OU verknüpft sind, behalten ihre Tier-Stufe.
Hole Tiering-Verstöße
Finden Sie alle Beziehungen in der BloodHound-Datenbank, bei denen ein AD-Objekt die Kontrolle über ein AD-Objekt aus einer höheren Stufe (nähe Null) hat.
Es werden zwei CSV-Dateien als Ausgabe erzeugt:
adobjects-[timestamp].csv: Alle AD-Objekte und in welcher Stufe sie sich befinden.
tiering-violations-[timestamp].csv: Die Tiering-Verstöße.
Beispiel für Einträge in der Verstöße-CSV:
Der erste Eintrag ist ein Tier-1-Dienstkonto mit der Berechtigung, das Passwort eines Tier-0-Benutzerkontos zu ändern. Die Beziehung wird vererbt. Leider ist es nicht immer möglich, in den BloodHound-Daten zu sehen, von wo die Beziehung vererbt wird, aber Sie können dies manuell überprüfen, indem Sie die Berechtigungen für das Ziel-AD-Objekt in Benutzer und Computer einsehen. Der zweite Eintrag ist eine Gruppe mit der Berechtigung, eine GPO zu bearbeiten, die wahrscheinlich mit einer OU verknüpft ist, die Tier-0-Server enthält, da es sich um eine Tier-0-GPO handelt.
Sie können alle Beziehungstypen und deren Ausnutzung hier nachschlagen.
Wenn Sie feststellen, dass ein Objekt in einer zu hohen Stufe (nähe Null) ist, sollten Sie es in ImproHound korrigieren und dann auf Verstöße mit diesem Objekt als QUELLE prüfen. Wenn ein Objekt in einer zu niedrigen Stufe (nähe Unendlich) ist, sollten Sie es in ImproHound korrigieren und auf Verstöße mit dem Objekt als ZIEL prüfen.
Tiering löschen
Alle Tier-Label und von ImproHound erstellte Knoten in der BloodHound-Datenbank werden gelöscht.
Es ist wichtig, die AD-Objekte richtig zu stufen. Wenn Sie einen DC und einen normalen Benutzer mit niedrigen Berechtigungen als Tier-0-Objekte setzen, wird ImproHound nicht feststellen, dass der Administratorzugriff des Benutzers auf den DC ein Tiering-Verstoß ist. Gleicher Fall, wenn Sie beide zu Tier 2 hinzufügen.
Computer werden danach gestuft, wie kritisch es wäre, wenn der Computer kompromittiert würde.
Benutzer werden nach den Computern gestuft, bei denen sie sich anmelden können, und nach den AD-Objekten, über die sie Kontrolle haben. Ein Beispiel für eine Kontrollberechtigung könnte ein Benutzer mit Rechten zur Bearbeitung von GPOs sein, die mit Tier-1-Servern verknüpft sind, was den Benutzer zu einem Tier-1-Objekt machen würde.
Eine Gruppe gehört zur niedrigsten Stufe (nähe Unendlich) ihrer Mitglieder, es sei denn, die Gruppe hat schlechte Mitglieder, z. B. einen regulären Benutzer als Mitglied von Domänen-Admins.
Beispiele: Domänen-Benutzer ist eine Tier-2-Gruppe, obwohl Ihre Tier-0-Benutzer Mitglieder der Gruppe sind, weil nicht die Mitgliedschaft in Domänen-Benutzern den Benutzern Berechtigungen verleiht. Andererseits ist die Gruppe Domänen-Admins eine Tier-0-Gruppe, weil die Mitgliedschaft in dieser Gruppe Benutzer sehr privilegiert macht. Cloneable Domain Controllers hat meines Wissens keine AD-Berechtigungen, sollte aber nur Tier-0-Objekte, also DCs, enthalten, daher ist es eine Tier-0-Gruppe.
Ein Container gehört zur höchsten Stufe (nähe Null) seiner untergeordneten Objekte oder zu einer höheren.
Beispiel: Sie haben alle Tier-0-, Tier-1- und Tier-2-Benutzer im Container Benutzer. Ein Benutzer mit Vollzugriffsberechtigung auf den Container Benutzer wäre in der Lage, alle Benutzer einschließlich der Tier-0-Benutzer zu kompromittieren (außer einige, die geschützt sind, aber das ist für das Beispiel nicht wichtig), daher muss der Container Benutzer ein Tier-0-Objekt sein.
Die Tier-Stufe einer GPO wird durch die Tier-Stufe der OUs bestimmt, mit denen sie verknüpft ist. Die GPO gehört zur höchsten Stufe (nähe Null) der OUs, mit denen sie verknüpft ist. Verwenden Sie die Schaltfläche ‚Setze Tier für GPOs‘, um sicherzustellen, dass alle GPOs diesem Prinzip folgen.
Beispiel: Ein Benutzer mit der Berechtigung, eine GPO zu bearbeiten, die mit einer Tier-1-OU verknüpft ist, könnte durch Ändern der GPO die Mitgliedschaft der Administratoren auf allen Servern unter der Tier-1-OU kontrollieren.
neo4j.confStarten Sie Neo4j neu
systemctl restart neo4jnet stop neo4j && net start neo4j (PowerShell: net stop neo4j; net start neo4j)| Quell-Tier | Quell-Typ | Quell-Name | Quell-Distinguishedname | Beziehung | IstVererbt | Ziel-Tier | Ziel-Typ | Ziel-Name | Ziel-Distinguishedname |
|---|
| Tier1 | User | [email protected] | CN=svc-monitor,CN=Users,DC=hot,DC=local | ForceChangePassword | True | Tier0 | User | [email protected] | CN=T0_JBK,CN=Users,DC=hot,DC=local |
| Tier2 | Group | [email protected] | CN=Wrk-Admins,CN=Groups,DC=hot,DC=local | GenericWrite | Tier0 | GPO | [email protected] | CN={6AC1786C-016F-11D2-945F-00C04fB984F9},CN=Policies,CN=System,DC=hot,DC=local |