hacktricks/linux-hardening/freeipa-pentesting.md
2024-02-10 15:36:32 +00:00

13 KiB

FreeIPA Pentesting

Lernen Sie das Hacken von AWS von Null bis zum Experten mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

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 das Management ähnlich wie Active Directory. Mit dem Dogtag Certificate System für CA & RA-Zertifikatsverwaltung unterstützt es die Multi-Faktor-Authentifizierung, einschließlich Smartcards. SSSD ist für Unix-Authentifizierungsprozesse integriert.

Fingerabdrücke

Dateien und Umgebungsvariablen

  • Die Datei /etc/krb5.conf enthält Informationen zum Kerberos-Client, die für die Registrierung in der Domäne erforderlich sind. Dies umfasst die Standorte von KDCs und Admin-Servern, Standardkonfigurationen und Zuordnungen.
  • Systemweite Standards für IPA-Clients und -Server werden in der Datei /etc/ipa/default.conf festgelegt.
  • Hosts in 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.

Binärdateien

Tools wie ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch und kvno sind zentral für das Management von FreeIPA-Domänen, die Verwaltung von Kerberos-Tickets, das Ändern von Passwörtern und das Erwerben von Diensttickets sowie für andere Funktionen.

Netzwerk

Eine Abbildung zeigt eine typische FreeIPA-Serverkonfiguration.

Authentifizierung

Die Authentifizierung in FreeIPA, unter Verwendung von Kerberos, ähnelt der in Active Directory. 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 normalerweise in /tmp mit 600-Berechtigungen gespeichert sind, sind binäre Formate zum Speichern von Kerberos-Anmeldeinformationen, die für die Authentifizierung ohne das Klartextpasswort eines Benutzers aufgrund ihrer Portabilität wichtig sind. Das Parsen eines CCACHE-Tickets kann mit dem Befehl klist durchgeführt werden, und das erneute Verwenden eines gültigen CCACHE-Tickets beinhaltet das Exportieren von KRB5CCNAME zum Pfad der Ticketdatei.

Unix-Schlüsselbund

Alternativ können CCACHE-Tickets im Linux-Schlüsselbund gespeichert werden, der eine bessere Kontrolle über das Ticket-Management bietet. Der Umfang der Ticket-Speicherung variiert (KEYRING:Name, KEYRING:Prozess:Name, KEYRING:Thread:Name, KEYRING:Sitzung:Name, KEYRING:Persistent:Benutzerkennung), wobei klist in der Lage ist, diese Informationen für den Benutzer zu analysieren. Das erneute Verwenden eines CCACHE-Tickets aus dem Unix-Schlüsselbund kann jedoch Herausforderungen darstellen, wobei Tools wie Tickey zum Extrahieren von Kerberos-Tickets verfügbar sind.

Keytab

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

Spickzettel

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

{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}

Enumeration

{% hint style="warning" %} Sie können die Enumeration über LDAP und andere binäre Tools durchführen oder sich mit der Webseite auf Port 443 des FreeIPA-Servers verbinden. {% endhint %}

Hosts, Benutzer und Gruppen

Es ist möglich, Hosts, Benutzer und Gruppen zu erstellen. Hosts und Benutzer werden in Container namens "Hostgruppen" bzw. "Benutzergruppen" sortiert. Diese ähneln Organizational Units (OU).

Standardmäßig ermöglicht der LDAP-Server in FreeIPA anonyme Bindungen, und eine große Menge an Daten kann unauthentifiziert abgerufen werden. Dadurch können alle verfügbaren Daten unauthentifiziert abgerufen werden:

ldapsearch -x

Um weitere Informationen zu erhalten, müssen Sie eine authentifizierte Sitzung verwenden (überprüfen Sie den Abschnitt zur 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 einer domänengebundenen Maschine aus 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

{% hint style="info" %} Der admin-Benutzer von FreeIPA entspricht den Domänenadministratoren von AD. {% endhint %}

Hashes

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

  • Der Passwort-Hash eines Benutzers wird als Base64 im Attribut "userPassword" gespeichert. Dieser Hash kann entweder SSHA512 (ältere Versionen von FreeIPA) oder PBKDF2_SHA256 sein.
  • Der Nthash des Passworts wird als Base64 im Attribut "ipaNTHash" gespeichert, wenn das System eine Integration mit AD hat.

Um diese Hashes zu knacken:

• Wenn FreeIPA mit AD integriert ist, ist es einfach, ipaNTHash zu knacken: Sie sollten Base64 decodieren -> es als ASCII Hexadezimalzahl neu codieren -> John The Ripper oder hashcat können Ihnen helfen, es schnell zu knacken.

• Wenn eine ältere Version von FreeIPA verwendet wird, wird SSHA512 verwendet: Sie sollten Base64 decodieren -> 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 decodieren -> PBKDF2_SHA256 finden -> seine Länge beträgt 256 Byte. John kann mit 256 Bit (32 Byte) arbeiten -> SHA-265 wird als Pseudo-Zufallsfunktion verwendet, die Blockgröße beträgt 32 Byte -> Sie können nur die ersten 256 Bit 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 auf dem FreeIPA-Server sein. Dort können Sie das Tool dbscan verwenden, um sie zu extrahieren:

HBAC-Regeln

Dies sind die Regeln, die bestimmten Benutzern oder Hosts Berechtigungen für Ressourcen (Hosts, Dienste, Dienstgruppen...) 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-Regeln

FreeIPA ermöglicht eine zentrale Kontrolle über sudo-Berechtigungen über sudo-Regeln. 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 durch die Untersuchung dieser Regelwerke identifizieren.

# 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 Privilegien, von denen jeder eine Sammlung von Berechtigungen umfasst. Diese Rollen können Benutzern, Benutzer-Gruppen, Hosts, Host-Gruppen und Diensten zugewiesen werden. Betrachten wir zum Beispiel die Standardrolle "Benutzeradministrator" in FreeIPA, um diese Struktur zu veranschaulichen.

Die Rolle Benutzeradministrator hat folgende Privilegien:

  • Benutzeradministratoren
  • Gruppenadministratoren
  • Stufenbenutzeradministratoren

Mit den folgenden Befehlen ist es möglich, die Rollen, Privilegien 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

Angriffszenario Beispiel

In https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e finden Sie ein einfaches Beispiel, wie Sie einige Berechtigungen missbrauchen können, um die Domäne zu kompromittieren.

Linikatz/LinikatzV2

Privilege Escalation

Erstellung eines Root-Benutzers

{% hint style="warning" %} Wenn Sie einen neuen Benutzer mit dem Namen root erstellen können, können Sie sich als ihn ausgeben und Sie werden in der Lage sein, SSH auf jede Maschine als root durchzuführen.

DIES WURDE BEHOBEN. {% endhint %}

Eine detaillierte Erklärung finden Sie unter https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b

Referenzen

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: