¿Qué son los Servicios de Certificados de AD?
Los servicios de certificados de Active Directory (AD CS) es un rol de Windows Server para emitir y administrar certificados de infraestructura de clave pública (PKI) que se usan en protocolos de autenticación y comunicación seguros.
Los certificados digitales se pueden usar para cifrar y firmar digitalmente documentos electrónicos y mensajes, así como para la autenticación de cuentas de equipo, usuario o dispositivo en una red.
Dentro de estos Servicios de Certificados entran en juego las plantillas de certificados. Hay una serie de términos que debemos conocer para entender mejor los certificados.
AD CS (Active Directory Certificate Services) : es la infraestructura PKI creada por Microsoft.
PKI (Public Key Infraestructure): se encarga de manejar los certificados y la encriptación.
CSR (Certificate Signing Request) : básicamente es un mensaje que se envía a la CA para solicitar un certificado firmado.
CA (Certificate Authority) : entidad de certificación que se encarga de avalar la identidad de usuarios, equipos y organizaciones.
Certificate Template : plantillas con configuraciones predefinidas en ADCS que determinan cómo se emiten y gestionan los certificados digitales.
¿Qué son las Plantillas de Certificados?
Las plantillas de certificados son configuraciones predefinidas en AD CS que determinan cómo se emiten y gestionan los certificados digitales.
En pocas palabras, se podría decir que son una forma de estandarizar y simplificar la creación de certificados, asegurando que cumplen con los requisitos de seguridad.
Algunos tipos de Plantillas de Certificados:
Usuario : Certificados que se utilizan para autenticación de usuarios en entornos Windows.
Equipo : Certificados para la autenticación de máquinas.
Web Server : Certificados utilizados para habilitar SSL/TLS en servidores web.
Cifrado de Correo : Certificados utilizados para cifrar correos electrónicos y asegurar comunicaciones.
Vulnerabilidad ESC1
Requerimientos
Windows Server 2019 con Active Directory instalado y configurado.
Rol de Servicios de Certificados de Active Directory.
Credenciales de un usuario del dominio.
Herramienta Certipy y Suite Impacket para la realización de los ataques.
Configuración Vulnerabilidad ESC1
En primer lugar vamos a configurar la plantilla para que sea vulnerable a ESC1.
Nos dirigimos al panel de Administración del Servidor > Herramientas \> Entidad de Certificación.
A continuación debemos dirigirnos a Plantillas de Certificado, click derecho y Administrar.
Buscamos la plantilla de usuario, click derecho y duplicar.
Y por último en el apartado seguridad vamos a dar permisos Inscribirse al grupo Usuarios del dominio.
Una vez aplicados los cambios, ya podemos proceder.
Identificando ESC1 con BloodHound
Anteriormente hemos podido identificar la plantilla vulnerable a través de la herramienta certipy, pero también podemos detectarlo a través de Bloodhound.
Para ello de nuevo utilizaremos certipy para que nos genere toda la información en un archivo .zip que posteriormente importaremos en bloodhound.
certipy-ad find -vulnerable -u bart@hommer.local -p P@ssword1234 -old-bloodhound -enabled
Como podemos ver en la imagen, el usuario bart (del que disponemos credenciales) forma parte del grupo UsuariosDelDominio y este grupo posee los permisos Enroll (o Inscribirse) sobre la plantilla ESC1.
Por lo que utilizando las credenciales del usuario bart podremos obtener el hash NTLM del usuario Administrador y ganar acceso bajo un usuario con privilegios máximos.
Explotación Vulnerabilidad ESC1 en Linux
Para la explotación de esta vulnerabilidad partimos del siguiente escenario:
- Dispongo de credenciales de un usuario del dominio, Bart:P@ssword1234
Para enumerar y abusar de certificados podemos hacer uso de la herramienta certipy-ad que puede instalarse fácilmente desde la terminal de kali con el comando sudo apt install certipy-ad
.
En primer lugar debemos enumerar en busca de posibles certificados vulnerables, y para ello utilizaremos el siguiente comando.
certipy-ad find -vulnerable -u bart@hommer.local -p P@ssword1234
Como podemos ver nos genera varios archivos, entre ellos uno de texto...
[!] Vulnerabilities
ESC1 : 'HOMMER.LOCAL\\Usuarios del dominio' and 'HOMMER.LOCAL\\Authenticated Users' can enroll, enrollee supplies subject and template allows client authentication
En este archivo tras filtrar con grep podemos ver que es vulnerable a ESC1, por lo que debemos anotar una serie de datos que encontraremos en el archivo de texto para el siguiente paso.
El siguiente paso será obtener el certificado .pfx del usuario al cual queremos escalar, en mi caso el usuario Administrador, para posteriormente autenticarnos con su certificado y obtener su hash NTLM.
certipy-ad req -u <usuario@dominio> -p <contraseña> -ca <CertificateAuthority> -target <CAHostname> -template <vulnTemplate> -up <targetUsername>
Ahora que ya tenemos el certificado .pfx y la clave privada podemos utilizarlo para autenticarnos y obtener el hash NTLM del usuario.
certipy-ad auth -pfx <certificado.pfx> -dc-ip <ip>
Conexión vía Evil-WinRM
Tras obtener el hash podríamos intentar conectarnos a la máquina a través de WinRM si está activado en la máquina víctima.
En caso de estarlo simplemente nos conectaríamos realizando PassTheHash.
Conexión vía Impacket-Smbexec
Conexión vía psexec a través del TGT
Con certipy-ad y haciendo uso del certificado .pfx podemos obtener el TGT del usuario Administrador para posteriormente autenticarnos y ganar acceso al DC.
Una vez hemos obtenido el TGT simplemente lo exportamos a KRB5CCNAME y ejecutamos el siguiente comando.
Con el parámetro -k habilitamos la autenticación vía kerberos.
Explotación Vulnerabilidad ESC1 en Windows
Para poder realizar este ataque en Windows necesitaremos tener instalado python3 y certipy-ad.
Instalar python3 es tan sencillo como dirigirnos a la tienda de microsoft, buscarlo e instalar.
Y posteriormente desde la terminal o cmd ejecutamos el comando pip3 install certipy-ad
Recomiendo añadir al path la ruta donde se almacenan los scripts de python3 para no tener que poner toda la ruta completa.
Ahora que ya tenemos todo instalado procedemos a identificar la vulnerabilidad ESC1 como hicimos anteriormente desde Linux.
Es prácticamente igual el comando para detectarlo.
Tras detectar la vulnerabilidad procedemos a obtener el certificado del usuario administrador.
Tras obtenerlo nos autenticamos con el certificado, igual que hicimos anteriormente.
Conexión vía psexec a través del TGT
Remediación Vulnerabilidad ESC1
Para remediar esta vulnerabilidad debemos seguir estos pasos:
- Deshabilitar "Enrollee Supplies Subject" de la plantilla vulnerable.
- Requerir Aprobación del Administrador.
- Por último debemos asignar correctamente los permisos a cada usuario.