FreeIPA Pentesting

Support HackTricks

Basic Information

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.

Fingerprints

Files & Environment Variables

  • 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.

Binaries

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.

Network

Ilustracija je pružena da prikaže tipičnu FreeIPA server konfiguraciju.

Authentication

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 Files

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 (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:

Linux Active Directory

Enumeration

Možete izvršiti enumeraciju putem ldap i drugih binarnih alata, ili povezivanjem na veb stranicu na portu 443 FreeIPA servera.

Hosts, Users, and Groups

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).

Podrazumevano u FreeIPA, LDAP server omogućava anonimne veze, a 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).

# 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 koja je pridružena domenu moći ćete da koristite instalirane binarne datoteke za enumeraciju domena:

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

Korisnik admin u FreeIPA je ekvivalent domenama admina iz AD.

Hashes

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 ga 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 ga 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 hash -> John The Ripper ili hashcat vam mogu pomoći da ga probijete

Da biste izvukli hash, morate biti root na FreeIPA serveru, tamo možete koristiti alat dbscan da ih izvučete:

HBAC-Rules

To su pravila koja dodeljuju specifične dozvole korisnicima ili hostovima nad resursima (hostovi, usluge, grupe usluga...)

# 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 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.

# 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

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 sledeće privilegije:

  • Administratori korisnika

  • Administratori grupa

  • Administratori korisnika na sceni

Pomoću sledećih komandi moguće je enumerisati uloge, privilegije i dozvole:

# 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

Attack Scenario Example

U 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.

Linikatz/LinikatzV2

Privesc

kreiranje root korisnika

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.

OVO JE ISPRAVLJENO.

Možete proveriti detaljno objašnjenje u https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b

References

Support HackTricks

Last updated