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

212 lines
13 KiB
Markdown

# FreeIPA Pentesting
<details>
<summary><strong>Lernen Sie das Hacken von AWS von Null bis zum Experten mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegramm-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
</details>
## 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](privilege-escalation/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 <a href="#4b3b" id="4b3b"></a>
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).
```bash
# 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:
```bash
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 <a href="#482b" id="482b"></a>
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.
<figure><img src="../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
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:
<figure><img src="../.gitbook/assets/image (196).png" alt=""><figcaption></figcaption></figure>
### HBAC-Regeln <a href="#482b" id="482b"></a>
Dies sind die Regeln, die bestimmten Benutzern oder Hosts Berechtigungen für Ressourcen (Hosts, Dienste, Dienstgruppen...) gewähren.
```bash
# 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.
```bash
# 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:
```bash
# 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](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
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## 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](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
## Referenzen
* [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
<details>
<summary><strong>Lernen Sie AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Andere Möglichkeiten, HackTricks zu unterstützen:
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
</details>