BloodHound Einführung für Admins

BloodHound

This page is also available in English.


BloodHound ist ein Tool, das von Pentestern und Red Teamern entwickelt wurde, um Angriffswege im Active Directory besser zu finden und zu visualisieren. Das heißt aber nicht, dass es nicht auch von Admins oder dem Blue Team sinnvoll verwendet werden kann.

Was ist BloodHound eigentlich?

BloodHound besteht aus zwei bzw. drei Komponenten:

  • Collector (sammelt die Informationen)
  • Datenbank und UI (visualisiert die gesammelten Informationen)

Collector

Der Collector ist ein kleines Programm, das Informationen über das Active Directory sammelt und in eine Datei schreibt.

Das Programm ist unabhängig von der Datenbank bzw. UI und sammelt wirklich nur Daten für die weitere Verwendung.

Datenbank und UI

Die zweite Komponente von BloodHound ist eine Neo4j-Datenbank und ein UI dafür. Nachdem wir die Informationen mit dem Collector gesammelt haben, können diese über das UI importiert werden.

Diese Komponente ist diejenige, in der wir die meiste Zeit arbeiten. Sie bietet uns eine Möglichkeit, die Daten abzufragen und zu visualisieren.

Installation

Für die konkrete Installation verweise ich auf das GitHub-Repo bzw. die offizielle Dokumentation:

https://github.com/SpecterOps/BloodHound/wiki

Ich installiere BloodHound immer in einer Linux-VM. Das ist aber Geschmackssache.

Der Collector kann entweder direkt aus dem BloodHound UI heruntergeladen werden oder von hier auf GitHub:

https://github.com/BloodHoundAD/SharpHound/releases

Nach der erfolgreichen Installation sollten folgende URLs/Ports erreichbar sein:

Benutzung

Collector

Zuerst führen wir den Collector aus, um die Daten zu sammeln. Dabei ist es wichtig, dass die Version des Collectors mit der Version der UI übereinstimmt, da manchmal das Dateiformat geändert wird. Der Collector muss auf einem System ausgeführt werden, das auf den Domain Controller zugreifen kann. Am einfachsten ist es, den Collector auf einem Domänencomputer unter einem Domainkonto auszuführen. Das Konto braucht keine speziellen Rechte.

Achtung: Der Collector wird ziemlich sicher als Malware erkannt. Daher muss hier eine Ausnahme hinzugefügt werden. Bitte auch überprüfen, dass das Programm aus einer vertrauenswürdigen Quelle kommt.

In den meisten Fällen ist es ausreichend, einfach die exe-Datei doppelt zu klicken. Je nach Größe des Active Directory dauert es dann ein bisschen, bis es fertig ist (wenige Sekunden bis mehrere Stunden). Im Endeffekt sollten dann ein paar JSON-Dateien oder eine ZIP-Datei neben der exe-Datei liegen. Ist das nicht so, hilft manchmal einfach, das Ganze nochmal auszuführen.

Datenbank und UI

Diese Komponente sollte mittlerweile laufen und über ein Webinterface erreichbar sein. Über den Import-Button können wir die gesammelten Daten hochladen. Je nach Größe des Active Directory dauert das wieder ein bisschen.

Danach können wir bereits die eingebauten Abfragen ausprobieren und z.B. visualisieren, wer die Domain Admins sind. Liefert diese Abfrage sehr viele Konten, ist das meist schon ein Pentest Finding. Das könnte man aber auch ganz einfach mit Bordmitteln abfragen. Die spannenden Abfragen sind ein bisschen komplexer. Auf diese werde ich im nächsten Kapitel eingehen.

Abfragen

Für Admins ist das BloodHound UI meiner Meinung nach nicht so hilfreich. Spannender wird es, wenn man die Neo4j-Konsole benutzt. In dieser stellt man Abfragen in der „Cypher“-Abfragesprache und bekommt textuellen Output.

Die erreicht man im Browser unter http://localhost:7474/browser/. Die Standard Anmeldedaten sind:

User: neo4j
Pass: bloodhoundcommunityedition

Die Abfragesprache ist leider nicht so leicht zu verstehen. Man braucht ein bisschen, bis man reinkommt. Hier aber ein paar nützliche Abfragen:

Alte Passwörter

Die folgende Abfrage gibt Konten aus, die ihr Passwort schon lange nicht mehr geändert haben. Normale User müssen ihr Passwort nicht regelmäßig ändern. Sind hier aber andere Konten dabei, sollte das überprüft werden:

MATCH (u:User)
WHERE u.enabled = true
AND u.pwdlastset < (datetime().epochseconds - (1825 * 86400))
RETURN u.name as Username, datetime({epochSeconds: toInteger(u.pwdlastset)}) as PwdLastSet order by u.pwdlastset

Die Abfrage checkt konkret, ob es User gibt, die aktiv sind und deren Passwort seit 5 Jahren (= 1825 Tage * 86400 Sekunden pro Tag) nicht mehr geändert wurde. Diese Daten werden dann in einer Tabelle ausgegeben.

Domain Admins mit alten Passwörtern

Diese Abfrage ist auf Domain Admins eingeschränkt. Da diese Accounts besonders wichtig sind, werden in diesem Fall Konten ausgegeben, deren Passwort älter als 3 Jahre ist:

MATCH p=(n:Group)<-[:MemberOf*1..]-(u) WHERE n.objectid =~ "(?i)S-1-5-.*-512" WITH u MATCH (u)
WHERE (u.pwdlastset < (datetime().epochseconds - (1095 * 86400)))
WITH u.name AS Username, datetime({epochSeconds: toInteger(u.pwdlastset)}) AS PwdLastSet
ORDER BY u.pwdlastset RETURN DISTINCT Username,PwdLastSet

Nicht verwendete User

Die folgende Abfrage gibt aktive Konten aus, deren Passwort seit 5 Jahren nicht mehr geändert wurde und die sich seit 5 Jahren nicht mehr eingeloggt haben:

MATCH (u:User)
WHERE u.enabled = true
AND u.pwdlastset < (datetime().epochseconds - (1825  86400)) and u.lastlogontimestamp < (datetime().epochseconds - (1825  86400))
RETURN u.name as Username, datetime({epochSeconds: toInteger(u.pwdlastset)}) as PwdLastSet, datetime({epochSeconds: toInteger(u.lastlogontimestamp)}) as LastUsed order by u.pwdlastset

Anteil aktiver User

Zum Schluss noch eine Abfrage, die die Prozentzahl der aktiven Konten ausgibt. Das ist manchmal hilfreich, um zu sehen, ob es viele „Leichen“ im AD gibt.

// Count the total number of users
MATCH (uTotal:User)
with count(uTotal) as TotalUsers
// Count the enabled users
match (uEnabled:User)
where uEnabled.enabled
with TotalUsers, count(uEnabled) as EnabledUsers
return TotalUsers, EnabledUsers, EnabledUsers/(TotalUsers/100.0) as PercentageEnabled

Zusammenfassung

Wir sehen, BloodHound kann auch für Admins spannend sein. Die Abfragen sind als Beispiele zu sehen. Es gibt noch viele weitere Abfragen, die je nach Umgebung sinnvoll sein können.

Bei weiteren Fragen zur Sicherheit von Windows wende dich gerne an VidraSec.

+43 720 971425

martin@vidrasec.com

Termin auswählen

Zugehörige Dienstleistungen