13 KiB
FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
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 Kerberos MIT pour une gestion similaire à Active Directory. Utilisant le Système de Certificats Dogtag pour la gestion des certificats CA et RA, il prend en charge l'authentification multi-facteurs, y compris les cartes intelligentes. SSSD est intégré pour les processus d'authentification Unix.
Fingerprints
Files & Environment Variables
- 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 administratifs, les paramètres par défaut et les mappages. - Les paramètres par défaut pour les clients et serveurs IPA sont définis dans le fichier situé à
/etc/ipa/default.conf
. - Les hôtes au sein du domaine doivent avoir un fichier
krb5.keytab
à/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 et des paramètres spécifiques liés à l'authentification Kerberos.
Binaries
Des outils tels que ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
, et kvno
sont centraux 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.
Network
Une illustration est fournie pour dépeindre une configuration typique de serveur FreeIPA.
Authentication
L'authentification dans FreeIPA, utilisant Kerberos, reflète celle de Active Directory. L'accès aux ressources du domaine nécessite un ticket Kerberos valide, qui peut être stocké à divers emplacements selon la configuration du domaine FreeIPA.
CCACHE Ticket Files
Les fichiers CCACHE, généralement stockés dans /tmp
avec des permissions 600, sont des formats binaires pour stocker les informations d'identification Kerberos, importants pour l'authentification sans le mot de passe en texte clair de l'utilisateur en raison de leur portabilité. L'analyse d'un ticket CCACHE peut être effectuée à l'aide de la commande klist
, et la réutilisation d'un ticket CCACHE valide implique d'exporter KRB5CCNAME
vers le chemin du fichier de ticket.
Unix Keyring
Alternativement, les tickets CCACHE peuvent être stockés dans le keyring 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 depuis le keyring 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 critiques pour obtenir des tickets de distribution de tickets valides (TGT) 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.
Cheatsheet
Vous pouvez trouver plus d'informations sur la façon d'utiliser les tickets dans linux dans le lien suivant :
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Enumeration
{% hint style="warning" %} Vous pourriez effectuer l'énumération via ldap et d'autres outils binaires, ou en vous connectant à la page web sur le port 443 du serveur FreeIPA. {% endhint %}
Hosts, Users, and Groups
Il est possible de créer des hôtes, des utilisateurs et des groupes. Les hôtes et les utilisateurs sont trié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 des liens anonymes, et une grande partie des 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 des 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
{% hint style="info" %} L'utilisateur admin de FreeIPA est l'équivalent des domain admins de AD. {% endhint %}
Hashes
L'utilisateur root du serveur IPA a accès aux hashes de mot de passe.
- Le hash de 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 a une intégration avec AD.
Pour cracker ces hashes :
• Si FreeIPA est intégré avec AD, ipaNTHash est facile à cracker : Vous devez décoder base64 -> le réencoder en ASCII hex -> John The Ripper ou hashcat peuvent vous aider à le cracker rapidement.
• Si une ancienne version de FreeIPA est utilisée, alors SSHA512 est utilisé : Vous devez décoder base64 -> trouver le hash SSHA512 -> John The Ripper ou hashcat peuvent vous aider à le cracker.
• Si une nouvelle version de FreeIPA est utilisée, alors PBKDF2_SHA256 est utilisé : Vous devez décoder 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 de bloc est de 32 octets -> vous pouvez utiliser seulement les premiers 256 bits de notre hash PBKDF2_SHA256 -> John The Ripper ou hashcat peuvent vous aider à le cracker.
Pour extraire les hashes, vous devez être root sur le serveur FreeIPA, là vous pouvez utiliser l'outil dbscan
pour les extraire :
HBAC-Rules
Ce sont les règles qui accordent des permissions spécifiques aux utilisateurs ou aux hôtes sur des 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
Sudo-Rules
FreeIPA permet un contrôle centralisé des permissions sudo via des règles sudo. Ces règles permettent ou limitent l'exécution de commandes avec sudo sur les hôtes au sein 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 divers privilèges, chacun englobant un ensemble de permissions. Ces rôles peuvent être attribués aux Utilisateurs, Groupes d'Utilisateurs, Hôtes, Groupes d'Hôtes et Services. Par exemple, considérons 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 Stage
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 la façon d'abuser de certaines permissions pour compromettre le domaine.
Linikatz/LinikatzV2
Privesc
création d'utilisateur root
{% hint style="warning" %}
Si vous pouvez créer un nouvel utilisateur avec le nom root
, vous pouvez vous faire passer pour lui et vous pourrez SSH sur n'importe quelle machine en tant que root.
CECI A ÉTÉ CORRIGÉ. {% endhint %}
Vous pouvez consulter une explication détaillée dans https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Références
- 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
{% hint style="success" %}
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Consultez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR aux HackTricks et HackTricks Cloud dépôts github.