FreeIPA Pentesting

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Informations de base

FreeIPA est une alternative open-source à Microsoft Windows Active Directory, principalement pour les environnements Unix. Il combine un annuaire LDAP complet avec un centre de distribution de clés MIT Kerberos pour la gestion similaire à Active Directory. En utilisant le système de certificats Dogtag pour la gestion des certificats CA & RA, il prend en charge l'authentification multi-facteurs, y compris les cartes à puce. SSSD est intégré pour les processus d'authentification Unix.

Empreintes digitales

Fichiers et variables d'environnement

  • Le fichier /etc/krb5.conf est l'endroit où les informations du client Kerberos, nécessaires pour l'inscription dans le domaine, sont stockées. Cela inclut les emplacements des KDC et des serveurs d'administration, les paramètres par défaut et les mappings.

  • Les paramètres par défaut du système pour les clients et serveurs IPA sont définis dans le fichier situé à /etc/ipa/default.conf.

  • Les hôtes dans le domaine doivent avoir un fichier krb5.keytab à l'emplacement /etc/krb5.keytab pour les processus d'authentification.

  • Diverses variables d'environnement (KRB5CCNAME, KRB5_KTNAME, KRB5_CONFIG, KRB5_KDC_PROFILE, KRB5RCACHETYPE, KRB5RCACHEDIR, KRB5_TRACE, KRB5_CLIENT_KTNAME, KPROP_PORT) sont utilisées pour pointer vers des fichiers spécifiques et des paramètres pertinents à l'authentification Kerberos.

Binaires

Des outils tels que ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch et kvno sont essentiels pour la gestion des domaines FreeIPA, la gestion des tickets Kerberos, le changement de mots de passe et l'acquisition de tickets de service, entre autres fonctionnalités.

Réseau

Une illustration est fournie pour représenter une configuration typique du serveur FreeIPA.

Authentification

L'authentification dans FreeIPA, en utilisant Kerberos, est similaire à celle d'Active Directory. L'accès aux ressources du domaine nécessite un ticket Kerberos valide, qui peut être stocké à divers emplacements en fonction de la configuration du domaine FreeIPA.

Fichiers de ticket CCACHE

Les fichiers CCACHE, stockés généralement dans /tmp avec des permissions 600, sont des formats binaires pour stocker les informations d'identification Kerberos, importantes pour l'authentification sans le mot de passe en clair de l'utilisateur en raison de leur portabilité. L'analyse d'un ticket CCACHE peut être effectuée en utilisant la commande klist, et la réutilisation d'un ticket CCACHE valide implique d'exporter KRB5CCNAME vers le chemin du fichier de ticket.

Trousseau Unix

Alternativement, les tickets CCACHE peuvent être stockés dans le trousseau Linux, offrant plus de contrôle sur la gestion des tickets. La portée du stockage des tickets varie (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber), avec klist capable d'analyser ces informations pour l'utilisateur. Cependant, la réutilisation d'un ticket CCACHE à partir du trousseau Unix peut poser des défis, avec des outils comme Tickey disponibles pour extraire les tickets Kerberos.

Keytab

Les fichiers Keytab, contenant des principaux Kerberos et des clés chiffrées, sont essentiels pour obtenir des tickets de distribution de tickets (TGT) valides sans avoir besoin du mot de passe du principal. L'analyse et la réutilisation des informations d'identification à partir des fichiers Keytab peuvent être facilement effectuées avec des utilitaires comme klist et des scripts tels que KeytabParser.

Feuille de triche

Vous pouvez trouver plus d'informations sur l'utilisation des tickets dans Linux en suivant le lien suivant :

pageLinux Active Directory

Énumération

Vous pourriez effectuer l'énumération via ldap et d'autres outils binaires, ou vous connecter à la page web sur le port 443 du serveur FreeIPA.

Hôtes, Utilisateurs et Groupes

Il est possible de créer des hôtes, des utilisateurs et des groupes. Les hôtes et les utilisateurs sont classés dans des conteneurs appelés "Groupes d'hôtes" et "Groupes d'utilisateurs" respectivement. Ceux-ci sont similaires aux Unités organisationnelles (OU).

Par défaut dans FreeIPA, le serveur LDAP permet les liaisons anonymes, et une grande quantité de données est énumérable non authentifiée. Cela peut énumérer toutes les données disponibles non authentifiées:

ldapsearch -x

Pour obtenir plus d'informations, vous devez utiliser une session authentifiée (consultez la section Authentification pour apprendre comment préparer une session authentifiée).

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

À partir d'une machine jointe au domaine, vous pourrez utiliser les binaires installés pour énumérer le domaine :

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

L'utilisateur admin de FreeIPA est l'équivalent des domain admins d'AD.

Hashes

L'utilisateur root du serveur IPA a accès aux hashes de mots de passe.

  • Le hash du mot de passe d'un utilisateur est stocké en base64 dans l'attribut "userPassword". Ce hash peut être SSHA512 (anciennes versions de FreeIPA) ou PBKDF2_SHA256.

  • Le Nthash du mot de passe est stocké en base64 dans "ipaNTHash" si le système est intégré à AD.

Pour casser ces hashes :

• Si FreeIPA est intégré à AD, ipaNTHash est facile à casser : Vous devez décoder en base64 -> le réencoder en hexadécimal ASCII -> John The Ripper ou hashcat peuvent vous aider à le casser rapidement

• Si une ancienne version de FreeIPA est utilisée, donc SSHA512 est utilisé : Vous devez décoder en base64 -> trouver le hash SSHA512 -> John The Ripper ou hashcat peuvent vous aider à le casser

• Si une nouvelle version de FreeIPA est utilisée, donc PBKDF2_SHA256 est utilisé : Vous devez décoder en base64 -> trouver PBKDF2_SHA256 -> sa longueur est de 256 octets. John peut travailler avec 256 bits (32 octets) -> SHA-265 est utilisé comme fonction pseudo-aléatoire, la taille du bloc est de 32 octets -> vous pouvez utiliser uniquement les premiers 256 bits de notre hash PBKDF2_SHA256 -> John The Ripper ou hashcat peuvent vous aider à le casser

Pour extraire les hashes, vous devez être root dans le serveur FreeIPA, là vous pouvez utiliser l'outil dbscan pour les extraire :

Règles HBAC

Ce sont les règles qui accordent des autorisations spécifiques aux utilisateurs ou aux hôtes sur les ressources (hôtes, services, groupes de services...).

# 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

Règles Sudo

FreeIPA permet un contrôle centralisé des permissions sudo via les règles sudo. Ces règles permettent ou limitent l'exécution de commandes avec sudo sur les hôtes du domaine. Un attaquant pourrait potentiellement identifier les hôtes applicables, les utilisateurs et les commandes autorisées en examinant ces ensembles de règles.

# 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

Contrôle d'accès basé sur les rôles

Un rôle est composé de diverses privilèges, chacun englobant une collection de permissions. Ces rôles peuvent être attribués à des Utilisateurs, des Groupes d'utilisateurs, des Hôtes, des Groupes d'hôtes et des Services. Par exemple, considérez le rôle par défaut "Administrateur d'utilisateurs" dans FreeIPA pour illustrer cette structure.

Le rôle Administrateur d'utilisateurs a ces privilèges :

  • Administrateurs d'utilisateurs

  • Administrateurs de groupes

  • Administrateurs d'utilisateurs de scène

Avec les commandes suivantes, il est possible d'énumérer les rôles, privilèges et permissions :

# 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

Exemple de Scénario d'Attaque

Dans https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e, vous pouvez trouver un exemple simple de comment abuser de certaines autorisations pour compromettre le domaine.

Linikatz/LinikatzV2

Élévation de Privilèges

Création d'un utilisateur root

Si vous pouvez créer un nouvel utilisateur avec le nom root, vous pouvez vous faire passer pour lui et vous pourrez vous connecter en SSH sur n'importe quelle machine en tant que root.

CELA A ÉTÉ CORRIGÉ.

Vous pouvez consulter une explication détaillée dans https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour