# FreeIPA Pentesting
Impara l'hacking di AWS da zero a esperto conhtARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI 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 esclusive [**NFT**](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.
## Informazioni di base
FreeIPA è un'alternativa open-source a Microsoft Windows Active Directory, principalmente per ambienti Unix. Combina una directory LDAP completa con un centro di distribuzione delle chiavi MIT Kerberos per la gestione simile ad Active Directory. Utilizzando il sistema di certificati Dogtag per la gestione dei certificati CA e RA, supporta l'autenticazione a più fattori, inclusi i smart card. SSSD è integrato per i processi di autenticazione Unix.
## Fingerprint
### File e variabili d'ambiente
- Il file `/etc/krb5.conf` è dove vengono 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`) vengono utilizzate per puntare a file specifici e impostazioni pertinenti all'autenticazione Kerberos.
### Eseguibili
Strumenti come `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` e `kvno` sono fondamentali per la gestione dei domini FreeIPA, la gestione dei biglietti Kerberos, la modifica delle password e l'acquisizione dei 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**, è simile a quella in **Active Directory**. L'accesso alle risorse del dominio richiede un valido biglietto Kerberos, che può essere memorizzato in vari luoghi a seconda della configurazione del dominio FreeIPA.
### File di 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à. L'analisi di un biglietto CCACHE può essere effettuata utilizzando il comando `klist`, e il riutilizzo di un valido biglietto CCACHE comporta l'esportazione di `KRB5CCNAME` nel percorso del file del biglietto.
### Unix Keyring
In alternativa, i biglietti CCACHE possono essere memorizzati nella keyring di Linux, offrendo un 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, il riutilizzo di un biglietto CCACHE dalla keyring di Unix può presentare sfide, con strumenti come **Tickey** disponibili per l'estrazione dei biglietti Kerberos.
### Keytab
I file keytab, contenenti principali Kerberos e chiavi crittografate, sono fondamentali per ottenere biglietti di concessione di ticket (TGT) validi senza la necessità della password del principale. 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 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" %}
Puoi 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 suddivisi in contenitori chiamati "Gruppi host" e "Gruppi utenti" rispettivamente. Questi sono simili alle "Unità organizzative" (OU).
Di default in FreeIPA, il server LDAP consente **bind anonimi**, e una vasta quantità di dati è enumerabile **senza autenticazione**. Ciò può enumerare tutti i dati disponibili senza autenticazione:
```
ldapsearch -x
```
Per ottenere **ulteriori informazioni** è necessario utilizzare una sessione **autenticata** (verifica la sezione 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 al 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 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 è **integrato** con **AD**.
Per craccare questi hash:
- Se FreeIPA è integrato con AD, l'**ipaNTHash** è facile da craccare: devi **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, viene utilizzato **SSHA512**: devi decodificare il **base64** -> trovare l'hash **SSHA512** -> John The Ripper o **hashcat** possono aiutarti a craccarlo.
- Se viene utilizzata una nuova versione di FreeIPA, viene utilizzato **PBKDF2\_SHA256**: devi decodificare il **base64** -> trovare **PBKDF2\_SHA256** -> la sua lunghezza è di 256 byte. John può lavorare con 256 bit (32 byte) -> SHA-265 viene utilizzato come funzione pseudo-randomica, 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 agli 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 di Sudo
FreeIPA consente il controllo centralizzato delle **autorizzazioni sudo** tramite le regole di sudo. Queste regole consentono 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 **permessi**. Questi ruoli possono essere assegnati a Utenti, **Gruppi** di Utenti, **Host**, Gruppi di Host e Servizi. Ad esempio, consideriamo il ruolo predefinito "Amministratore Utente" in FreeIPA per illustrare questa struttura.
Il ruolo `Amministratore Utente` ha i seguenti privilegi:
* **Amministratori Utente**
* **Amministratori Gruppo**
* **Amministratori Utente di Stadio**
Con i seguenti comandi è possibile enumerare i ruoli, i privilegi e i permessi:
```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 alcune autorizzazioni 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)
## Escalation dei privilegi
### ~~Creazione utente root~~
{% hint style="warning" %}
Se puoi **creare un nuovo utente con il nome `root`**, puoi impersonarlo e sarai in grado di **accedere tramite 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 di AWS da zero a eroe conhtARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF**, controlla i [**PACCHETTI 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 esclusive [**NFT**](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 repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).