FreeIPA Pentesting

Support HackTricks

Grundinformationen

FreeIPA ist eine Open-Source-Alternative zu Microsoft Windows Active Directory, hauptsächlich für Unix-Umgebungen. Es kombiniert ein vollständiges LDAP-Verzeichnis mit einem MIT Kerberos Key Distribution Center für die Verwaltung ähnlich wie Active Directory. Es nutzt das Dogtag Zertifikatsystem für CA- und RA-Zertifikatsverwaltung und unterstützt Multi-Faktor-Authentifizierung, einschließlich Smartcards. SSSD ist für Unix-Authentifizierungsprozesse integriert.

Fingerabdrücke

Dateien & Umgebungsvariablen

  • Die Datei unter /etc/krb5.conf ist der Ort, an dem die Kerberos-Clientinformationen, die für die Anmeldung in der Domäne erforderlich sind, gespeichert sind. Dazu gehören die Standorte der KDCs und Admin-Server, Standardeinstellungen und Zuordnungen.

  • Systemweite Standardwerte für IPA-Clients und -Server werden in der Datei unter /etc/ipa/default.conf festgelegt.

  • Hosts innerhalb der Domäne müssen eine krb5.keytab-Datei unter /etc/krb5.keytab für Authentifizierungsprozesse haben.

  • Verschiedene Umgebungsvariablen (KRB5CCNAME, KRB5_KTNAME, KRB5_CONFIG, KRB5_KDC_PROFILE, KRB5RCACHETYPE, KRB5RCACHEDIR, KRB5_TRACE, KRB5_CLIENT_KTNAME, KPROP_PORT) werden verwendet, um auf spezifische Dateien und Einstellungen zu verweisen, die für die Kerberos-Authentifizierung relevant sind.

Binaries

Werkzeuge wie ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch und kvno sind zentral für die Verwaltung von FreeIPA-Domänen, die Handhabung von Kerberos-Tickets, das Ändern von Passwörtern und das Erwerben von Servicetickets, unter anderem.

Netzwerk

Eine Abbildung wird bereitgestellt, um eine typische FreeIPA-Serverkonfiguration darzustellen.

Authentifizierung

Die Authentifizierung in FreeIPA, die Kerberos nutzt, spiegelt die in Active Directory wider. Der Zugriff auf Domänenressourcen erfordert ein gültiges Kerberos-Ticket, das je nach Konfiguration der FreeIPA-Domäne an verschiedenen Orten gespeichert werden kann.

CCACHE Ticketdateien

CCACHE-Dateien, die typischerweise in /tmp mit 600 Berechtigungen gespeichert werden, sind binäre Formate zur Speicherung von Kerberos-Anmeldeinformationen, die für die Authentifizierung ohne das Klartextpasswort des Benutzers wichtig sind, aufgrund ihrer Portabilität. Das Parsen eines CCACHE-Tickets kann mit dem Befehl klist erfolgen, und die Wiederverwendung eines gültigen CCACHE-Tickets erfordert das Exportieren von KRB5CCNAME auf den Pfad der Ticketdatei.

Unix Keyring

Alternativ können CCACHE-Tickets im Linux-Keyring gespeichert werden, was mehr Kontrolle über die Ticketverwaltung bietet. Der Umfang der Ticketablage variiert (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber), wobei klist in der Lage ist, diese Informationen für den Benutzer zu parsen. Die Wiederverwendung eines CCACHE-Tickets aus dem Unix-Keyring kann jedoch Herausforderungen mit sich bringen, wobei Werkzeuge wie Tickey verfügbar sind, um Kerberos-Tickets zu extrahieren.

Keytab

Keytab-Dateien, die Kerberos-Principals und verschlüsselte Schlüssel enthalten, sind entscheidend für den Erhalt gültiger Ticket Granting Tickets (TGT), ohne das Passwort des Principals zu benötigen. Das Parsen und die Wiederverwendung von Anmeldeinformationen aus Keytab-Dateien können einfach mit Dienstprogrammen wie klist und Skripten wie KeytabParser durchgeführt werden.

Cheatsheet

Sie finden weitere Informationen zur Verwendung von Tickets in Linux unter folgendem Link:

Linux Active Directory

Enumeration

Sie können die Enumeration über ldap und andere binäre Werkzeuge durchführen oder eine Verbindung zur Webseite am Port 443 des FreeIPA-Servers herstellen.

Hosts, Benutzer und Gruppen

Es ist möglich, Hosts, Benutzer und Gruppen zu erstellen. Hosts und Benutzer werden in Container unter dem Namen „Host-Gruppen“ und „Benutzergruppen“ sortiert. Diese sind ähnlich wie Organizational Units (OU).

Standardmäßig erlaubt der LDAP-Server in FreeIPA anonyme Bindungen, und ein großer Teil der Daten ist unauthentifiziert aufrufbar. Dies kann alle Daten auflisten, die unauthentifiziert verfügbar sind:

ldapsearch -x

Um mehr Informationen zu erhalten, müssen Sie eine authentifizierte Sitzung verwenden (überprüfen Sie den Abschnitt Authentifizierung, um zu erfahren, wie Sie eine authentifizierte Sitzung vorbereiten).

# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"

# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"

# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"

# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"

Von einem mit der Domäne verbundenen Rechner können Sie installierte Binärdateien verwenden, um die Domäne aufzulisten:

ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find

-------------------

ipa user-show <username> --all
ipa usergroup-show <user group> --all
ipa host-find <host> --all
ipa hostgroup-show <host group> --all

Der admin Benutzer von FreeIPA entspricht den Domain-Admins aus AD.

Hashes

Der root Benutzer des IPA-Servers hat Zugriff auf die Passwort-Hashes.

  • Der Passwort-Hash eines Benutzers wird als base64 im Attribut “userPassword” gespeichert. Dieser Hash kann SSHA512 (alte Versionen von FreeIPA) oder PBKDF2_SHA256 sein.

  • Der Nthash des Passworts wird als base64 in “ipaNTHash” gespeichert, wenn das System mit AD integriert ist.

Um diese Hashes zu knacken:

• Wenn FreeIPA mit AD integriert ist, ist ipaNTHash leicht zu knacken: Sie sollten base64 dekodieren -> es als ASCII-Hex neu kodieren -> John The Ripper oder hashcat können Ihnen helfen, es schnell zu knacken.

• Wenn eine alte Version von FreeIPA verwendet wird, wird SSHA512 verwendet: Sie sollten base64 dekodieren -> SSHA512 Hash finden -> John The Ripper oder hashcat können Ihnen helfen, es zu knacken.

• Wenn eine neue Version von FreeIPA verwendet wird, wird PBKDF2_SHA256 verwendet: Sie sollten base64 dekodieren -> PBKDF2_SHA256 finden -> seine Länge beträgt 256 Byte. John kann mit 256 Bits (32 Byte) arbeiten -> SHA-265 wird als Pseudo-Zufallsfunktion verwendet, die Blockgröße beträgt 32 Byte -> Sie können nur die ersten 256 Bits unseres PBKDF2_SHA256-Hashes verwenden -> John The Ripper oder hashcat können Ihnen helfen, es zu knacken.

Um die Hashes zu extrahieren, müssen Sie root im FreeIPA-Server sein, dort können Sie das Tool dbscan verwenden, um sie zu extrahieren:

HBAC-Rules

Dies sind die Regeln, die bestimmten Benutzern oder Hosts über Ressourcen (Hosts, Dienste, Dienstgruppen...) spezifische Berechtigungen gewähren.

# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show <hbacrule> --all

Sudo-Rules

FreeIPA ermöglicht die zentrale Kontrolle über sudo permissions über sudo-rules. Diese Regeln erlauben oder beschränken die Ausführung von Befehlen mit sudo auf Hosts innerhalb der Domäne. Ein Angreifer könnte potenziell die anwendbaren Hosts, Benutzer und erlaubten Befehle identifizieren, indem er diese Regelsets untersucht.

# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show <sudorule> --all

Rollenbasierte Zugriffskontrolle

Eine Rolle besteht aus verschiedenen Befugnissen, von denen jedes eine Sammlung von Berechtigungen umfasst. Diese Rollen können Benutzern, Benutzer Gruppen, Hosts, Host-Gruppen und Diensten zugewiesen werden. Zum Beispiel kann die Standardrolle „Benutzeradministrator“ in FreeIPA diese Struktur veranschaulichen.

Die Rolle Benutzeradministrator hat diese Befugnisse:

  • Benutzeradministratoren

  • Gruppenadministratoren

  • Stage-Benutzeradministratoren

Mit den folgenden Befehlen ist es möglich, die Rollen, Befugnisse und Berechtigungen aufzulisten:

# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show <role> --all
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all

Angriffsszenario Beispiel

In https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e finden Sie ein einfaches Beispiel, wie man einige Berechtigungen ausnutzen kann, um die Domain zu kompromittieren.

Linikatz/LinikatzV2

Privesc

root Benutzererstellung

Wenn Sie einen neuen Benutzer mit dem Namen root erstellen können, können Sie ihn impersonifizieren und Sie werden in der Lage sein, SSH als root auf jede Maschine zuzugreifen.

DAS WURDE BEHOBEN.

Sie können eine detaillierte Erklärung in https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b überprüfen.

Referenzen

Unterstützen Sie HackTricks

Last updated