FreeIPA Pentesting
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
FreeIPA es una alternativa de código abierto a Active Directory de Microsoft, principalmente para entornos Unix. Combina un directorio LDAP completo con un Centro de Distribución de Claves Kerberos de MIT para la gestión similar a Active Directory. Utilizando el Sistema de Certificados Dogtag para la gestión de certificados CA y RA, admite autenticación multifactor, incluidas las tarjetas inteligentes. SSSD está integrado para procesos de autenticación Unix.
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 administrativos, configuraciones predeterminadas y asignaciones.
Los valores predeterminados a nivel de sistema para los 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 los procesos de autenticación.
Varias variables de entorno (KRB5CCNAME
, KRB5_KTNAME
, KRB5_CONFIG
, KRB5_KDC_PROFILE
, KRB5RCACHETYPE
, KRB5RCACHEDIR
, KRB5_TRACE
, KRB5_CLIENT_KTNAME
, KPROP_PORT
) se utilizan para apuntar a archivos y configuraciones específicas relevantes para la autenticación Kerberos.
Herramientas como ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
y kvno
son centrales para gestionar dominios FreeIPA, manejar tickets Kerberos, cambiar contraseñas y adquirir tickets de servicio, entre otras funcionalidades.
Se proporciona una ilustración para representar una configuración típica de servidor FreeIPA.
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.
Los archivos CCACHE, almacenados típicamente en /tmp
con permisos 600, son formatos binarios para almacenar credenciales Kerberos, importantes para la autenticación sin la contraseña en texto plano del usuario debido a su portabilidad. El análisis de un ticket CCACHE se puede realizar utilizando el comando klist
, y reutilizar un Ticket CCACHE válido implica exportar KRB5CCNAME
a la ruta del archivo del ticket.
Alternativamente, los Tickets CCACHE pueden almacenarse en el keyring de Linux, ofreciendo más control sobre la gestión de tickets. El alcance del almacenamiento de tickets varía (KEYRING:name
, KEYRING:process:name
, KEYRING:thread:name
, KEYRING:session:name
, KEYRING:persistent:uidnumber
), siendo klist
capaz de analizar esta información para el usuario. Sin embargo, reutilizar un Ticket CCACHE del keyring de Unix puede presentar desafíos, con herramientas como Tickey disponibles para extraer tickets Kerberos.
Los archivos keytab, que contienen principios Kerberos y claves encriptadas, son críticos para obtener tickets de concesión de tickets válidos (TGT) sin necesidad de la contraseña del principio. El análisis y la reutilización de credenciales de archivos keytab se pueden realizar fácilmente con utilidades como klist
y scripts como KeytabParser.
Puedes encontrar más información sobre cómo usar tickets en linux en el siguiente enlace:
Puedes 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.
Es posible crear hosts, usuarios y grupos. Los hosts y usuarios se organizan en contenedores llamados “Grupos de Hosts” y “Grupos de Usuarios” respectivamente. Estos son similares a las Unidades Organizativas (OU).
Por defecto en FreeIPA, el servidor LDAP permite vínculos anónimos, y una gran cantidad de datos es enumerable no autenticada. Esto puede enumerar todos los datos disponibles no autenticados:
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).
Desde una máquina unida al dominio, podrás usar binarios instalados para enumerar el dominio:
El usuario admin de FreeIPA es el equivalente a los administradores de dominio de AD.
El usuario root del servidor IPA tiene acceso a los hashes de contraseña.
El hash de contraseña de un usuario se almacena como 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 como base64 en “ipaNTHash” si el sistema tiene integración con AD.
Para romper estos hashes:
• Si FreeIPA está integrado con AD, ipaNTHash es fácil de romper: Debes decodificar base64 -> volver a codificarlo como ASCII hex -> John The Ripper o hashcat pueden ayudarte a romperlo rápidamente.
• Si se utiliza una versión antigua de FreeIPA, entonces se usa SSHA512: Debes decodificar base64 -> encontrar el hash SSHA512 -> John The Ripper o hashcat pueden ayudarte a romperlo.
• Si se utiliza una nueva versión de FreeIPA, entonces se usa PBKDF2_SHA256: Debes decodificar base64 -> encontrar PBKDF2_SHA256 -> su longitud es de 256 bytes. John puede trabajar con 256 bits (32 bytes) -> SHA-265 se utiliza como la función pseudoaleatoria, el tamaño del bloque es de 32 bytes -> solo puedes usar los primeros 256 bits de nuestro hash PBKDF2_SHA256 -> John The Ripper o hashcat pueden ayudarte a romperlo.
Para extraer los hashes necesitas ser root en el servidor FreeIPA, allí puedes usar la herramienta dbscan
para extraerlos:
Son las reglas que otorgan permisos específicos a usuarios o hosts sobre recursos (hosts, servicios, grupos de servicios...)
FreeIPA permite el control centralizado sobre sudo permissions a través de sudo-rules. Estas reglas permiten o limitan la ejecución de comandos con sudo en los hosts dentro del dominio. Un atacante podría identificar potencialmente los hosts aplicables, usuarios y comandos permitidos al examinar estos conjuntos de reglas.
Un rol se compone de varios privilegios, cada uno de los cuales abarca una colección de permisos. Estos roles pueden ser asignados a Usuarios, Grupos de Usuarios, Hosts, Grupos de Hosts y Servicios. Por ejemplo, considera el rol predeterminado “Administrador de Usuarios” en FreeIPA para ejemplificar esta estructura.
El rol Administrador de Usuarios
tiene estos privilegios:
Administradores de Usuarios
Administradores de Grupos
Administradores de Usuarios de Etapa
Con los siguientes comandos es posible enumerar los roles, privilegios y permisos:
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.
Si puedes crear un nuevo usuario con el nombre root
, puedes suplantarlo y podrás SSH en cualquier máquina como root.
ESTO HA SIDO PARCHEADO.
Puedes consultar una explicación detallada en https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)