hacktricks/src/linux-hardening/freeipa-pentesting.md

187 lines
9.8 KiB
Markdown

# FreeIPA Pentesting
{{#include ../banners/hacktricks-training.md}}
## Osnovne Informacije
FreeIPA je open-source **alternativa** za Microsoft Windows **Active Directory**, prvenstveno za **Unix** okruženja. Kombinuje kompletnu **LDAP direktoriju** sa MIT **Kerberos** sistemom za distribuciju ključeva za upravljanje sličnim Active Directory. Koristeći 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.
## Otisci
### Datoteke i Varijable Okruženja
- 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 varijable 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.
### Binarni
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 sticanje servisnih tiketa, među ostalim funkcionalnostima.
### Mreža
Prikazana je ilustracija koja prikazuje tipičnu FreeIPA server konfiguraciju.
## Autentifikacija
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.
### **CCACHE Ticket Datoteke**
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.
### **Unix Keyring**
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.
### Keytab
Keytab datoteke, koje sadrže Kerberos principe i enkriptovane ključeve, su ključne za dobijanje važećih tiketa za dodelu tiketa (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**.
### Cheatsheet
Možete pronaći više informacija o tome kako koristiti tikete u linuxu na sledećem linku:
{{#ref}}
privilege-escalation/linux-active-directory.md
{{#endref}}
## Enumeracija
> [!WARNING]
> Možete izvršiti **enumeraciju** putem **ldap** i drugih **binarnih** alata, ili **povezivanjem na veb stranicu na portu 443 FreeIPA servera**.
### Hostovi, Korisnici i Grupe <a href="#id-4b3b" id="id-4b3b"></a>
Moguće je kreirati **hostove**, **korisnike** i **grupe**. Hostovi i korisnici su raspoređeni u kontejnere nazvane “**Host Grupe**” i “**Korisničke Grupe**” respektivno. Ove su slične **Organizacionim Jedinicama** (OU).
Podrazumevano u FreeIPA, LDAP server omogućava **anonimne veze**, i veliki deo podataka je enumerabilan **neautentifikovano**. Ovo može enumerisati sve dostupne podatke neautentifikovano:
```
ldapsearch -x
```
Da biste dobili **više informacija**, potrebno je da koristite **autentifikovanu** sesiju (proverite odeljak o autentifikaciji da biste saznali kako da pripremite autentifikovanu sesiju).
```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"
```
Sa mašine pridružene domenu moći ćete da koristite **instalirane binarne datoteke** za enumeraciju domena:
```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
```
> [!NOTE]
> Korisnik **admin** u **FreeIPA** je ekvivalentan **domain admins** iz **AD**.
### Hashes <a href="#id-482b" id="id-482b"></a>
Korisnik **root** sa **IPA servera** ima pristup lozinkama **hash**.
- 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**.
Da biste probili ove hash:
• 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 to brzo probijete
• 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 to probijete
• 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 hasha -> John The Ripper ili hashcat vam mogu pomoći da to probijete
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
Da biste izvukli hash, morate biti **root na FreeIPA serveru**, tamo možete koristiti alat **`dbscan`** da ih izvučete:
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
Postoje pravila koja dodeljuju specifične dozvole korisnicima ili hostovima nad resursima (hostovi, usluge, grupe usluga...)
```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
FreeIPA omogućava centralizovanu kontrolu nad **sudo permissions** 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.
```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 ulozi
**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.
Uloga `Administrator korisnika` ima ove privilegije:
- **Administratori korisnika**
- **Administratori grupa**
- **Administratori korisnika na sceni**
Sa sledećim komandama moguće je enumerisati uloge, privilegije i dozvole:
```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
```
### Primer napada
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 da zloupotrebite neka prava da biste kompromitovali domen.
### 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
### ~~kreiranje root korisnika~~
> [!WARNING]
> Ako možete **da kreirate 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.**
>
> **OVO JE ISPRAVLJENO.**
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)
## Reference
- [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)
{{#include ../banners/hacktricks-training.md}}