hacktricks/linux-hardening/freeipa-pentesting.md

216 lines
12 KiB
Markdown
Raw Normal View History

2022-10-22 14:44:59 +00:00
# FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
<details>
2022-10-22 14:44:59 +00:00
<summary>Support HackTricks</summary>
2023-12-30 20:49:23 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-10-22 14:44:59 +00:00
</details>
{% endhint %}
2022-10-22 14:44:59 +00:00
## Basic Information
2022-10-22 14:44:59 +00:00
FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**, uglavnom za **Unix** okruženja. Kombinuje kompletnu **LDAP direktoriju** sa MIT **Kerberos** sistemom za distribuciju ključeva za upravljanje sličnim Active Directory. Koristi Dogtag **Sistem sertifikata** za upravljanje CA i RA sertifikatima, podržava **multi-factor** autentifikaciju, uključujući pametne kartice. SSSD je integrisan za Unix procese autentifikacije.
2022-10-22 14:44:59 +00:00
## Fingerprints
2022-10-22 14:44:59 +00:00
### Files & Environment Variables
2024-02-05 02:28:59 +00:00
* Datoteka na `/etc/krb5.conf` je mesto gde se čuvaju informacije o Kerberos klijentu, neophodne za upis u domen. Ovo uključuje lokacije KDC-a i admin servera, podrazumevane postavke i mape.
* Podrazumevane postavke za IPA klijente i servere su postavljene u datoteci koja se nalazi na `/etc/ipa/default.conf`.
* Hostovi unutar domena moraju imati `krb5.keytab` datoteku na `/etc/krb5.keytab` za procese autentifikacije.
* Različite promenljive okruženja (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) se koriste za upućivanje na specifične datoteke i postavke relevantne za Kerberos autentifikaciju.
2022-10-22 14:44:59 +00:00
### Binaries
2022-10-22 14:44:59 +00:00
Alati kao što su `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, i `kvno` su centralni za upravljanje FreeIPA domenima, rukovanje Kerberos tiketima, menjanje lozinki i dobijanje servisnih tiketa, među ostalim funkcionalnostima.
2022-10-22 14:44:59 +00:00
### Network
2022-10-22 15:26:54 +00:00
Ilustracija je pružena da prikaže tipičnu FreeIPA server konfiguraciju.
2022-10-22 15:26:54 +00:00
## Authentication
2022-10-22 14:44:59 +00:00
Autentifikacija u FreeIPA, koristeći **Kerberos**, odražava onu u **Active Directory**. Pristup resursima domena zahteva važeći Kerberos tiket, koji može biti smešten na različitim mestima u zavisnosti od konfiguracije FreeIPA domena.
2022-10-22 14:44:59 +00:00
### **CCACHE Ticket Files**
2022-10-22 14:44:59 +00:00
CCACHE datoteke, obično smeštene u **`/tmp`** sa **600** dozvolama, su binarni formati za čuvanje Kerberos kredencijala, važni za autentifikaciju bez korisničke lozinke u običnom tekstu zbog njihove prenosivosti. Parsiranje CCACHE tiketa može se izvršiti korišćenjem `klist` komande, a ponovna upotreba važećeg CCACHE tiketa uključuje izvoz `KRB5CCNAME` na putanju datoteke tiketa.
2022-10-22 14:44:59 +00:00
2022-10-22 15:26:54 +00:00
### **Unix Keyring**
2022-10-22 14:44:59 +00:00
Alternativno, CCACHE tiketi mogu biti smešteni u Linux keyring, nudeći veću kontrolu nad upravljanjem tiketima. Opseg skladištenja tiketa varira (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), pri čemu `klist` može parsirati ove informacije za korisnika. Međutim, ponovna upotreba CCACHE tiketa iz Unix keyring-a može predstavljati izazove, a alati poput **Tickey** su dostupni za ekstrakciju Kerberos tiketa.
2022-10-22 14:44:59 +00:00
2024-02-05 02:28:59 +00:00
### Keytab
2022-10-22 14:44:59 +00:00
Keytab datoteke, koje sadrže Kerberos principe i enkriptovane ključeve, su ključne za dobijanje važećih tiketa za dodelu (TGT) bez potrebe za lozinkom principa. Parsiranje i ponovna upotreba kredencijala iz keytab datoteka može se lako izvršiti pomoću alata kao što su `klist` i skripti kao što je **KeytabParser**.
2022-10-22 14:44:59 +00:00
### Cheatsheet
2022-10-22 14:44:59 +00:00
Možete pronaći više informacija o tome kako koristiti tikete u linuxu na sledećem linku:
2022-10-22 14:44:59 +00:00
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## Enumeration
2022-10-22 14:44:59 +00:00
2022-10-22 15:26:54 +00:00
{% hint style="warning" %}
Možete izvršiti **enumeraciju** putem **ldap** i drugih **binarnih** alata, ili **povezivanjem na veb stranicu na portu 443 FreeIPA servera**.
2022-10-22 15:26:54 +00:00
{% endhint %}
### Hosts, Users, and Groups <a href="#id-4b3b" id="id-4b3b"></a>
2022-10-22 15:26:54 +00:00
Moguće je kreirati **hostove**, **korisnike** i **grupe**. Hostovi i korisnici su raspoređeni u kontejnere nazvane “**Host Groups**” i “**User Groups**” respektivno. Ovi su slični **Organizacijskim jedinicama** (OU).
2022-10-22 14:44:59 +00:00
Podrazumevano u FreeIPA, LDAP server omogućava **anonimne veze**, a veliki deo podataka je enumerabilan **neautentifikovano**. Ovo može enumerisati sve dostupne podatke neautentifikovano:
2022-10-22 14:44:59 +00:00
```
2024-02-10 13:11:20 +00:00
ldapsearch -x
2022-10-22 14:44:59 +00:00
```
Da biste dobili **više informacija**, potrebno je da koristite **autentifikovanu** sesiju (proverite odeljak o autentifikaciji da biste saznali kako da pripremite autentifikovanu sesiju).
2022-10-22 14:44:59 +00:00
```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
2024-02-10 13:11:20 +00:00
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
2022-10-22 14:44:59 +00:00
```
Sa mašine koja je pridružena domenu moći ćete da koristite **instalirane binarne datoteke** za enumeraciju domena:
2022-10-22 14:44:59 +00:00
```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
```
2022-10-22 15:26:54 +00:00
{% hint style="info" %}
Korisnik **admin** u **FreeIPA** je ekvivalent **domenama admina** iz **AD**.
2022-10-22 15:26:54 +00:00
{% endhint %}
### Hashes <a href="#id-482b" id="id-482b"></a>
2022-10-22 15:26:54 +00:00
Korisnik **root** sa **IPA servera** ima pristup lozinkama **hash**.
2022-10-22 15:26:54 +00:00
* Hash lozinke korisnika se čuva kao **base64** u atributu “**userPassword**”. Ovaj hash može biti **SSHA512** (stare verzije FreeIPA) ili **PBKDF2\_SHA256**.
* **Nthash** lozinke se čuva kao **base64** u “**ipaNTHash**” ako sistem ima **integraciju** sa **AD**.
2022-10-22 15:26:54 +00:00
Da biste probili ove hash:
2022-10-22 15:26:54 +00:00
• Ako je freeIPA integrisan sa AD, **ipaNTHash** je lako probiti: Trebalo bi da **dekodirate** **base64** -> ponovo kodirate kao **ASCII** hex -> John The Ripper ili **hashcat** vam mogu pomoći da ga brzo probijete
2022-10-22 15:26:54 +00:00
• Ako se koristi stara verzija FreeIPA, onda se koristi **SSHA512**: Trebalo bi da dekodirate **base64** -> pronađete SSHA512 **hash** -> John The Ripper ili **hashcat** vam mogu pomoći da ga probijete
2022-10-22 15:26:54 +00:00
• Ako se koristi nova verzija FreeIPA, onda se koristi **PBKDF2\_SHA256**: Trebalo bi da dekodirate **base64** -> pronađete PBKDF2\_SHA256 -> njegova **dužina** je 256 bajta. John može raditi sa 256 bita (32 bajta) -> SHA-265 se koristi kao pseudo-random funkcija, veličina bloka je 32 bajta -> možete koristiti samo prvih 256 bita našeg PBKDF2\_SHA256 hash -> John The Ripper ili hashcat vam mogu pomoći da ga probijete
2022-10-22 15:26:54 +00:00
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
2022-10-22 15:26:54 +00:00
Da biste izvukli hash, morate biti **root na FreeIPA serveru**, tamo možete koristiti alat **`dbscan`** da ih izvučete:
2022-10-22 15:26:54 +00:00
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
2022-10-22 15:26:54 +00:00
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
2022-10-22 14:44:59 +00:00
To su pravila koja dodeljuju specifične dozvole korisnicima ili hostovima nad resursima (hostovi, usluge, grupe usluga...)
2022-10-22 14:44:59 +00:00
```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-Rules
2022-10-22 14:44:59 +00:00
FreeIPA omogućava centralizovanu kontrolu nad **sudo dozvolama** putem sudo pravila. Ova pravila omogućavaju ili ograničavaju izvršavanje komandi sa sudo na hostovima unutar domena. Napadač bi potencijalno mogao da identifikuje primenljive hostove, korisnike i dozvoljene komande ispitujući ove skupove pravila.
2022-10-22 14:44:59 +00:00
```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
```
### Kontrola pristupa zasnovana na rolama
2022-10-22 14:44:59 +00:00
**Uloga** se sastoji od različitih **privilegija**, od kojih svaka obuhvata skup **dozvola**. Ove uloge mogu biti dodeljene korisnicima, grupama korisnika, **hostovima**, grupama hostova i uslugama. Na primer, uzmite u obzir podrazumevanu ulogu “Administrator korisnika” u FreeIPA kao primer ove strukture.
2022-10-22 14:44:59 +00:00
2024-02-10 13:11:20 +00:00
Uloga `Administrator korisnika` ima sledeće privilegije:
2022-10-22 14:44:59 +00:00
* **Administratori korisnika**
* **Administratori grupa**
* **Administratori korisnika na sceni**
2022-10-22 14:44:59 +00:00
Pomoću sledećih komandi moguće je enumerisati uloge, privilegije i dozvole:
2022-10-22 14:44:59 +00:00
```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
2024-02-10 13:11:20 +00:00
ipa privilege-find
2022-10-22 14:44:59 +00:00
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
```
### Attack Scenario Example
2022-10-22 14:44:59 +00:00
U [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) možete pronaći jednostavan primer kako zloupotrebiti neka prava da biste kompromitovali domen.
2022-10-22 14:44:59 +00:00
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Privesc
2022-10-22 14:44:59 +00:00
### ~~kreiranje root korisnika~~
2022-10-22 14:44:59 +00:00
{% hint style="warning" %}
Ako možete **napraviti novog korisnika sa imenom `root`**, možete se pretvarati da ste on i moći ćete da **SSH-ujete na bilo koju mašinu kao root.**
2022-10-22 14:44:59 +00:00
**OVO JE ISPRAVLJENO.**
2022-10-22 14:44:59 +00:00
{% endhint %}
Možete proveriti detaljno objašnjenje u [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b)
2022-10-22 14:44:59 +00:00
## References
2024-02-05 02:28:59 +00:00
* [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)
2022-10-22 14:44:59 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-10-22 14:44:59 +00:00
<details>
2022-10-22 14:44:59 +00:00
<summary>Support HackTricks</summary>
2023-12-30 20:49:23 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-10-22 14:44:59 +00:00
</details>
{% endhint %}