hacktricks/linux-hardening/freeipa-pentesting.md

13 KiB

Pentesting de FreeIPA

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

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, y admite la autenticación multifactor, incluidas las 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 los 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 de un 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.

Unix Keyring

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.

Cheatsheet

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 seudoaleatoria, 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 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, Anfitriones, Grupos de Anfitriones 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 acceder por SSH a cualquier máquina como root.

ESTO HA SIDO PARCHADO. {% endhint %}

Puedes ver una explicación detallada en https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b

Referencias

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: