13 KiB
Pentesting de FreeIPA
Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus trucos de hacking enviando PRs a HackTricks y HackTricks Cloud repositorios de github.
Información Básica
FreeIPA es una alternativa de código abierto a Microsoft Windows Active Directory, principalmente para entornos Unix. Combina un directorio LDAP completo con un Centro de Distribución de Claves MIT Kerberos para la gestión similar a Active Directory. Utiliza el Sistema de Certificados Dogtag para la gestión de certificados CA y RA, admite autenticación multifactor, incluidas tarjetas inteligentes. SSSD está integrado para procesos de autenticación de Unix.
Huellas Digitales
Archivos y Variables de Entorno
- El archivo en
/etc/krb5.conf
es donde se almacena la información del cliente Kerberos, necesaria para la inscripción en el dominio. Esto incluye las ubicaciones de los KDC y servidores de administración, configuraciones predeterminadas y asignaciones. - Las configuraciones predeterminadas del sistema para clientes y servidores IPA se establecen en el archivo ubicado en
/etc/ipa/default.conf
. - Los hosts dentro del dominio deben tener un archivo
krb5.keytab
en/etc/krb5.keytab
para procesos de autenticación. - Se utilizan varias variables de entorno (
KRB5CCNAME
,KRB5_KTNAME
,KRB5_CONFIG
,KRB5_KDC_PROFILE
,KRB5RCACHETYPE
,KRB5RCACHEDIR
,KRB5_TRACE
,KRB5_CLIENT_KTNAME
,KPROP_PORT
) para apuntar a archivos específicos y configuraciones relevantes para la autenticación de Kerberos.
Binarios
Herramientas como ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
y kvno
son fundamentales para administrar dominios FreeIPA, manejar tickets de Kerberos, cambiar contraseñas y adquirir tickets de servicio, entre otras funcionalidades.
Red
Se proporciona una ilustración para representar una configuración típica del servidor FreeIPA.
Autenticación
La autenticación en FreeIPA, aprovechando Kerberos, refleja la de Active Directory. El acceso a los recursos del dominio requiere un ticket Kerberos válido, que puede almacenarse en varias ubicaciones dependiendo de la configuración del dominio FreeIPA.
Archivos de Tickets CCACHE
Los archivos CCACHE, almacenados típicamente en /tmp
con permisos 600, son formatos binarios para almacenar credenciales de Kerberos, importantes para la autenticación sin la contraseña en texto plano del usuario debido a su portabilidad. Analizar un ticket CCACHE se puede hacer utilizando el comando klist
, y reutilizar un ticket CCACHE válido implica exportar KRB5CCNAME
a la ruta del archivo del ticket.
Llavero de Unix
Alternativamente, los Tickets CCACHE se pueden almacenar en el llavero de Linux, ofreciendo más control sobre la gestión de tickets. El alcance del almacenamiento de tickets varía (KEYRING:nombre
, KEYRING:proceso:nombre
, KEYRING:hilo:nombre
, KEYRING:sessión:nombre
, KEYRING:persistent:uidnúmero
), con klist
capaz de analizar esta información para el usuario. Sin embargo, reutilizar un Ticket CCACHE desde el llavero de Unix puede plantear desafíos, con herramientas como Tickey disponibles para extraer tickets de Kerberos.
Keytab
Los archivos Keytab, que contienen principios de Kerberos y claves encriptadas, son críticos para obtener tickets de concesión de tickets (TGT) válidos sin necesidad de la contraseña del principio. Analizar y reutilizar credenciales de archivos Keytab se puede realizar fácilmente con utilidades como klist
y scripts como KeytabParser.
Hoja de Trucos
Puedes encontrar más información sobre cómo usar tickets en Linux en el siguiente enlace:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Enumeración
{% hint style="warning" %} Podrías realizar la enumeración a través de ldap y otras herramientas binarias, o conectándote a la página web en el puerto 443 del servidor FreeIPA. {% endhint %}
Hosts, Usuarios y Grupos
Es posible crear hosts, usuarios y grupos. Los hosts y usuarios se clasifican en contenedores llamados "Grupos de Hosts" y "Grupos de Usuarios" respectivamente. Estos son similares a las Unidades Organizativas (OU).
De forma predeterminada en FreeIPA, el servidor LDAP permite vínculos anónimos, y una gran cantidad de datos son enumerables sin autenticación. Esto puede enumerar todos los datos disponibles sin autenticación:
ldapsearch -x
Para obtener más información, necesitas usar una sesión autenticada (consulta la sección de Autenticación para aprender cómo preparar una sesión autenticada).
# 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"
Desde una máquina unida al dominio podrás utilizar binarios instalados para enumerar el 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
{% hint style="info" %} El usuario admin de FreeIPA es equivalente a los administradores de dominio de AD. {% endhint %}
Hashes
El usuario root del servidor IPA tiene acceso a los hashes de contraseñas.
- El hash de la contraseña de un usuario se almacena en formato base64 en el atributo “userPassword”. Este hash puede ser SSHA512 (versiones antiguas de FreeIPA) o PBKDF2_SHA256.
- El Nthash de la contraseña se almacena en formato base64 en “ipaNTHash” si el sistema está integrado con AD.
Para crackear estos hashes:
• Si FreeIPA está integrado con AD, el ipaNTHash es fácil de crackear: Debes decodificar el base64 -> re-codificarlo como ASCII hexadecimal -> John The Ripper o hashcat pueden ayudarte a crackearlo rápidamente
• Si se utiliza una versión antigua de FreeIPA, se utiliza SSHA512: Debes decodificar el base64 -> encontrar el hash SSHA512 -> John The Ripper o hashcat pueden ayudarte a crackearlo
• Si se utiliza una nueva versión de FreeIPA, se utiliza PBKDF2_SHA256: Debes decodificar el base64 -> encontrar PBKDF2_SHA256 -> su longitud es de 256 bytes. John puede trabajar con 256 bits (32 bytes) -> SHA-265 se utiliza como función pseudoaleatoria, el tamaño del bloque es de 32 bytes -> puedes usar solo los primeros 256 bits de nuestro hash PBKDF2_SHA256 -> John The Ripper o hashcat pueden ayudarte a crackearlo
Para extraer los hashes necesitas ser root en el servidor FreeIPA, allí puedes usar la herramienta dbscan
para extraerlos:
Reglas HBAC
Estas son las reglas que otorgan permisos específicos a usuarios o hosts sobre recursos (hosts, servicios, grupos de servicios...).
# 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
Reglas de Sudo
FreeIPA permite el control centralizado sobre los permisos de sudo a través de las reglas de sudo. Estas reglas permiten o limitan la ejecución de comandos con sudo en hosts dentro del dominio. Un atacante podría potencialmente identificar los hosts aplicables, usuarios y comandos permitidos examinando estos conjuntos de reglas.
# 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
Control de Acceso Basado en Roles
Un rol está compuesto por varios privilegios, cada uno de los cuales abarca una colección de permisos. Estos roles pueden asignarse a Usuarios, Grupos de Usuarios, Hosts, Grupos de Hosts y Servicios. Por ejemplo, considera el rol predeterminado de "Administrador de Usuarios" en FreeIPA para ejemplificar esta estructura.
El rol Administrador de Usuarios
tiene los siguientes privilegios:
- Administradores de Usuarios
- Administradores de Grupos
- Administradores de Usuarios de Etapa
Con los siguientes comandos es posible enumerar los roles, privilegios y permisos:
# 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
Ejemplo de Escenario de Ataque
En https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e puedes encontrar un ejemplo simple de cómo abusar de algunos permisos para comprometer el dominio.
Linikatz/LinikatzV2
Elevación de Privilegios
Creación de usuario root
{% hint style="warning" %}
Si puedes crear un nuevo usuario con el nombre root
, puedes hacerse pasar por él y ser capaz de SSH en cualquier máquina como root.
ESTO HA SIDO PARCHADO. {% endhint %}
Puedes consultar una explicación detallada en https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Referencias
- 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
Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
- Si deseas ver tu empresa anunciada en HackTricks o descargar HackTricks en PDF ¡Consulta los PLANES DE SUSCRIPCIÓN!
- Obtén el oficial PEASS & HackTricks swag
- Descubre The PEASS Family, nuestra colección exclusiva de NFTs
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte tus trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.