FreeIPA Pentesting
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Informazioni di Base
FreeIPA è un alternativa open-source a Microsoft Windows Active Directory, principalmente per ambienti Unix. Combina un completo LDAP directory con un MIT Kerberos Key Distribution Center per la gestione simile a Active Directory. Utilizzando il Dogtag Certificate System per la gestione dei certificati CA & RA, supporta lâautenticazione multi-fattore, inclusi i smartcard. SSSD è integrato per i processi di autenticazione Unix.
Impronte
File e Variabili dâAmbiente
- Il file in
/etc/krb5.confè dove sono memorizzate le informazioni del client Kerberos, necessarie per lâiscrizione nel dominio. Questo include le posizioni dei KDC e dei server di amministrazione, le impostazioni predefinite e le mappature. - Le impostazioni predefinite a livello di sistema per i client e i server IPA sono impostate nel file situato in
/etc/ipa/default.conf. - Gli host allâinterno del dominio devono avere un file
krb5.keytabin/etc/krb5.keytabper i processi di autenticazione. - Diverse variabili dâambiente (
KRB5CCNAME,KRB5_KTNAME,KRB5_CONFIG,KRB5_KDC_PROFILE,KRB5RCACHETYPE,KRB5RCACHEDIR,KRB5_TRACE,KRB5_CLIENT_KTNAME,KPROP_PORT) sono utilizzate per puntare a file e impostazioni specifiche rilevanti per lâautenticazione Kerberos.
Binaries
Strumenti come ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch, e kvno sono fondamentali per gestire i domini FreeIPA, gestire i ticket Kerberos, cambiare le password e acquisire i ticket di servizio, tra le altre funzionalitĂ .
Rete
Viene fornita unâillustrazione per rappresentare una tipica configurazione del server FreeIPA.
Autenticazione
Lâautenticazione in FreeIPA, sfruttando Kerberos, rispecchia quella in Active Directory. Lâaccesso alle risorse del dominio richiede un ticket Kerberos valido, che può essere memorizzato in varie posizioni a seconda della configurazione del dominio FreeIPA.
File Ticket CCACHE
I file CCACHE, memorizzati tipicamente in /tmp con permessi 600, sono formati binari per memorizzare le credenziali Kerberos, importanti per lâautenticazione senza la password in chiaro dellâutente grazie alla loro portabilitĂ . Lâanalisi di un ticket CCACHE può essere effettuata utilizzando il comando klist, e riutilizzare un ticket CCACHE valido comporta lâesportazione di KRB5CCNAME nel percorso del file del ticket.
Keyring Unix
In alternativa, i ticket CCACHE possono essere memorizzati nel keyring di Linux, offrendo maggiore controllo sulla gestione dei ticket. Lâambito della memorizzazione dei ticket varia (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber), con klist capace di analizzare queste informazioni per lâutente. Tuttavia, riutilizzare un ticket CCACHE dal keyring Unix può presentare sfide, con strumenti come Tickey disponibili per estrarre i ticket Kerberos.
Keytab
I file keytab, contenenti i principi Kerberos e le chiavi crittografate, sono critici per ottenere ticket di concessione validi (TGT) senza necessitĂ della password del principio. Lâanalisi e il riutilizzo delle credenziali dai file keytab possono essere facilmente eseguiti con utility come klist e script come KeytabParser.
Cheatsheet
Puoi trovare ulteriori informazioni su come utilizzare i ticket in linux nel seguente link:
Enumerazione
Warning
Puoi eseguire lâenumerazione tramite ldap e altri strumenti binari, o collegandoti alla pagina web sulla porta 443 del server FreeIPA.
Host, Utenti e Gruppi
Ă possibile creare host, utenti e gruppi. Gli host e gli utenti sono ordinati in contenitori chiamati âGruppi di Hostâ e âGruppi di Utentiâ rispettivamente. Questi sono simili alle UnitĂ Organizzative (OU).
Per impostazione predefinita in FreeIPA, il server LDAP consente bind anonimi, e una vasta gamma di dati è enumerabile non autenticata. Questo può enumerare tutti i dati disponibili non autenticati:
ldapsearch -x
Per ottenere ulteriori informazioni è necessario utilizzare una sessione autenticata (controlla la sezione Autenticazione per imparare come preparare una sessione autenticata).
# 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"
Da una macchina unita al dominio sarai in grado di utilizzare binaries installati per enumerare il dominio:
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
Tip
Lâutente admin di FreeIPA è lâequivalente degli admin di dominio di AD.
Hashes
Lâutente root del server IPA ha accesso agli hash delle password.
- Lâhash della password di un utente è memorizzato come base64 nellâattributo âuserPasswordâ. Questo hash potrebbe essere SSHA512 (versioni precedenti di FreeIPA) o PBKDF2_SHA256.
- LâNthash della password è memorizzato come base64 in âipaNTHashâ se il sistema ha integrazione con AD.
Per decifrare questi hash:
⢠Se FreeIPA è integrato con AD, ipaNTHash è facile da decifrare: Dovresti decodificare base64 -> ri-ricodificarlo come ASCII esadecimale -> John The Ripper o hashcat possono aiutarti a decifrarlo rapidamente
⢠Se viene utilizzata una vecchia versione di FreeIPA, allora si utilizza SSHA512: Dovresti decodificare base64 -> trovare lâhash SSHA512 -> John The Ripper o hashcat possono aiutarti a decifrarlo
⢠Se viene utilizzata una nuova versione di FreeIPA, allora si utilizza PBKDF2_SHA256: Dovresti decodificare base64 -> trovare PBKDF2_SHA256 -> la sua lunghezza è di 256 byte. John può lavorare con 256 bit (32 byte) -> SHA-265 è utilizzato come funzione pseudo-casuale, la dimensione del blocco è di 32 byte -> puoi usare solo i primi 256 bit del nostro hash PBKDF2_SHA256 -> John The Ripper o hashcat possono aiutarti a decifrarlo
.png)
Per estrarre gli hash devi essere root nel server FreeIPA, lĂŹ puoi usare lo strumento dbscan per estrarli:
.png)
HBAC-Rules
Ci sono le regole che concedono permessi specifici a utenti o host su risorse (host, servizi, gruppi di serviziâŚ)
# 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 consente il controllo centralizzato sui permessi sudo tramite sudo-rules. Queste regole consentono o limitano lâesecuzione di comandi con sudo su host allâinterno del dominio. Un attaccante potrebbe potenzialmente identificare gli host, gli utenti e i comandi consentiti esaminando questi set di regole.
# 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
Controllo degli Accessi Basato sui Ruoli
Un ruolo è composto da vari privilegi, ognuno dei quali comprende una collezione di permessi. Questi ruoli possono essere assegnati a Utenti, Gruppi di Utenti, Host, Gruppi di Host e Servizi. Ad esempio, considera il ruolo predefinito âAmministratore Utentiâ in FreeIPA per esemplificare questa struttura.
Il ruolo Amministratore Utenti ha questi privilegi:
- Amministratori Utenti
- Amministratori Gruppi
- Amministratori Utenti di Stadio
Con i seguenti comandi è possibile enumerare i ruoli, i privilegi e i permessi:
# 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
Esempio di Scenario di Attacco
In https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e puoi trovare un semplice esempio di come abusare di alcune autorizzazioni per compromettere il dominio.
Linikatz/LinikatzV2
Privesc
creazione utente root
Warning
Se puoi creare un nuovo utente con il nome
root, puoi impersonarlo e sarai in grado di SSH in qualsiasi macchina come root.QUESTO Ă STATO CORRETTO.
Puoi controllare una spiegazione dettagliata in https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Riferimenti
- 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-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

