# Pentesting di FreeIPA
Impara l'hacking di AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)! Altri modi per supportare HackTricks: * Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family) * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
## Informazioni di Base FreeIPA è un'alternativa open-source all'Active Directory di Microsoft Windows, principalmente per ambienti Unix. Combina un completo **directory LDAP** con un Centro di Distribuzione Chiavi MIT **Kerberos** per la gestione simile all'Active Directory. Utilizzando il Sistema di Certificati Dogtag per la gestione dei certificati CA & RA, supporta l'autenticazione **multi-fattore**, inclusi i smartcard. SSSD è integrato per i processi di autenticazione Unix. ## Impronte Digitali ### File e Variabili d'Ambiente * Il file in `/etc/krb5.conf` è dove sono memorizzate le informazioni del client Kerberos, necessarie per l'iscrizione al 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.keytab` in `/etc/krb5.keytab` per 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 specifici e impostazioni rilevanti per l'autenticazione Kerberos. ### Eseguibili Strumenti come `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` e `kvno` sono centrali nella gestione dei domini FreeIPA, nel trattare i biglietti Kerberos, nel cambiare le password e nell'ottenere i biglietti 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**, riflette quella in **Active Directory**. L'accesso alle risorse del dominio richiede un biglietto Kerberos valido, che può essere memorizzato in varie posizioni a seconda della configurazione del dominio FreeIPA. ### **File Biglietti 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 a causa della loro portabilità. Il parsing di un biglietto CCACHE può essere fatto utilizzando il comando `klist`, e riutilizzare un biglietto CCACHE valido coinvolge l'esportazione di `KRB5CCNAME` nel percorso del file del biglietto. ### **Portachiavi Unix** Alternativamente, i Biglietti CCACHE possono essere memorizzati nel portachiavi Linux, offrendo maggiore controllo sulla gestione dei biglietti. La portata della memorizzazione dei biglietti varia (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), con `klist` in grado di analizzare queste informazioni per l'utente. Tuttavia, riutilizzare un Biglietto CCACHE dal portachiavi Unix può presentare sfide, con strumenti come **Tickey** disponibili per estrarre i biglietti Kerberos. ### Keytab I file Keytab, contenenti principali Kerberos e chiavi crittografate, sono fondamentali per ottenere biglietti di concessione di ticket (TGT) validi senza necessità della password del principale. Analizzare e riutilizzare le credenziali dai file Keytab può essere facilmente eseguito con utility come `klist` e script come **KeytabParser**. ### Cheatsheet Puoi trovare ulteriori informazioni su come utilizzare i biglietti in Linux nel seguente link: {% content-ref url="privilege-escalation/linux-active-directory.md" %} [linux-active-directory.md](privilege-escalation/linux-active-directory.md) {% endcontent-ref %} ## Enumerazione {% hint style="warning" %} Potresti eseguire l'**enumerazione** tramite **ldap** e altri **strumenti binari**, o **connettendoti alla pagina web sulla porta 443 del server FreeIPA**. {% endhint %} ### Host, Utenti e Gruppi È possibile creare **host**, **utenti** e **gruppi**. Gli host e gli utenti sono ordinati in contenitori chiamati "**Gruppi Host**" e "**Gruppi 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 autenticati**. Questo può enumerare tutti i dati disponibili non autenticati: ``` ldapsearch -x ``` Per ottenere **ulteriori informazioni** è necessario utilizzare una sessione **autenticata** (controlla la sezione sull'Autenticazione per imparare come preparare una sessione autenticata). ```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" ``` Da una macchina connessa a dominio sarai in grado di utilizzare **binari installati** per enumerare il dominio: ```bash ipa user-find ipa usergroup-find ipa host-find ipa host-group-find ------------------- ipa user-show --all ipa usergroup-show --all ipa host-find --all ipa hostgroup-show --all ``` {% hint style="info" %} L'utente **admin** di **FreeIPA** è l'equivalente degli **amministratori di dominio** di **AD**. {% endhint %} ### Hash L'utente **root** del **server IPA** ha accesso ai **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 è integrato con **AD**. Per craccare questi hash: • Se FreeIPA è integrato con AD, l'**ipaNTHash** è facile da craccare: Dovresti **decodificare** il **base64** -> ricodificarlo come esadecimale **ASCII** -> John The Ripper o **hashcat** possono aiutarti a craccarlo velocemente • Se viene utilizzata una vecchia versione di FreeIPA, quindi viene utilizzato **SSHA512**: Dovresti decodificare il **base64** -> trovare l'hash SSHA512 -> John The Ripper o **hashcat** possono aiutarti a craccarlo • Se viene utilizzata una nuova versione di FreeIPA, quindi viene utilizzato **PBKDF2\_SHA256**: Dovresti decodificare il **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 utilizzare solo i primi 256 bit del nostro hash PBKDF2\_SHA256 -> John The Ripper o hashcat possono aiutarti a craccarlo
Per estrarre gli hash è necessario essere **root nel server FreeIPA**, lì puoi utilizzare lo strumento **`dbscan`** per estrarli:
### Regole HBAC Queste sono le regole che concedono specifici permessi agli utenti o host su risorse (host, servizi, gruppi di servizi...) ```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 --all ``` #### Regole Sudo FreeIPA consente il controllo centralizzato delle **autorizzazioni sudo** tramite le regole sudo. Queste regole permettono o limitano l'esecuzione di comandi con sudo sugli host all'interno del dominio. Un attaccante potrebbe potenzialmente identificare gli host, gli utenti e i comandi consentiti esaminando questi set di regole. ```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 --all ``` ### Controllo degli Accessi Basato sui Ruoli Un **ruolo** è composto da vari **privilegi**, ognuno dei quali comprende una serie di **autorizzazioni**. Questi ruoli possono essere assegnati a Utenti, **Gruppi** di Utenti, **Host**, Gruppi di Host e Servizi. Ad esempio, considera il ruolo predefinito di "Amministratore Utente" in FreeIPA per esemplificare questa struttura. Il ruolo `Amministratore Utente` ha i seguenti privilegi: - **Amministratori Utente** - **Amministratori Gruppo** - **Amministratori Utente di Stage** Con i seguenti comandi è possibile enumerare i ruoli, i privilegi e le autorizzazioni: ```bash # Using ldap ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local" # Using ipa binary ipa role-find ipa role-show --all ipa privilege-find ipa privilege-show --all ipa permission-find ipa permission-show --all ``` ### Esempio di Scenario di Attacco 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) puoi trovare un semplice esempio di come abusare di alcuni permessi per compromettere il dominio. ### 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 ### ~~Creazione utente root~~ {% hint style="warning" %} Se riesci a **creare un nuovo utente con il nome `root`**, puoi impersonarlo e sarai in grado di **accedere via SSH a qualsiasi macchina come root.** **QUESTO È STATO CORRETTO.** {% endhint %} Puoi trovare una spiegazione dettagliata in [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](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-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)
Impara l'hacking AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)! Altri modi per supportare HackTricks: * Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family) * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.