Hace algunas semanas, una nueva técnica que afecta a Windows salió a la luz por medio del investigador francés Topotam (https://twitter.com/topotam77), esta técnica permite la retrasmisión NTLM que no hace uso de la API MS-RPRN ( https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/831cd729-be7c-451e-b729-bd8d84ce4d24) si no que usa la función EfsRpcOpenFileRaw del protocolo MS-EFSRPC.(https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-efsr/08796ba8-01c8-4872-9221-1000ec2eff31).
Una vez que un dispositivo se autentica en un servidor NTLM malicioso, un atacante podría robar el hash y certificados que pueden utilizarse para asumir la identidad del dispositivo y sus privilegios.
El día 23 de Julio, Microsoft liberó una mitigación para este ataque, donde indica como realizar el parchado manual de esta vulnerabilidad, como también, un parche automático con nombre KB5005413.
¿Cuáles son algunos de los exploits que se han publicado y cómo funcionan?
Hasta el momento no se han liberado tantos exploits en la red, pero si algunos ejemplos como los expuestos por el creador y mantenedor de la herramienta kiwi (mimikatz) Benjamin Delphi (https://twitter.com/gentilkiwi) en el siguiente enlace: https://twitter.com/gentilkiwi/status/1418660994931376136
Además, se han liberado nuevas modificaciones a la herramienta impacket (https://github.com/SecureAuthCorp/impacket/pull/1101) para la eventual ejecución de este ataque.
El exploit general y en el que todos los ataques están basados es el siguiente: https://github.com/topotam/PetitPotam
En esta ocasión se realizará una muestra de ambas formas, haciendo uso de la herramienta mimikatz en conjunto con kekeo y el ntlmrelayx modificado en la suite de impacket, como también, la explotación vía PetitPotam.py.
Pasos
Para poder realizar esta prueba de concepto fue necesario recrear un ambiente productivo, teniendo un Domain Controller, un servidor ejecutando PKI con certificados y una estación de trabajo para el uso de las herramientas antes mencionadas, además de un equipo con Kali Linux con la suite impacket modificada.
Ejecutando la Prueba de Concepto
Primero hay que comenzar teniendo funcional el relay de impacket, idealmente clonando el repositorio del siguiente árbol: https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack
De lo contrario, la manera sería clonar el repositorio maestro https://github.com/SecureAuthCorp/impacket/ y reemplazar los archivos necesarios presentados en el siguiente pull request: https://github.com/SecureAuthCorp/impacket/pull/1101
Una vez teniendo listo el relay, se mostrarán las nuevas funciones para realizar el ataque.
Para entender como funciona el ataque ADCS, se deja la guía practica para entender el ataque: https://www.exandroid.dev/2021/06/23/ad-cs-relay-attack-practical-guide/
En el servidor ejecutando PKI, deben estar corriendo los servicios que hacen referencia a certificados.
La puesta a punto de estos servicios, se puede verificar en un paper realizado para demostrar el abuso al servicio de certificados de Active Directory. https://www.specterops.io/assets/resources/Certified_Pre-Owned.pdf
Donde se muestra en base a comandos, como debería verse finalmente el Endpoint de Enrolamiento para que este ataque pueda funcionar.
Una vez configurado lo anterior, se procede a realizar la ejecución de la herramienta ntlmrealyx.py de la suite impacket apuntando al servidor que tiene los certificados.
En la estación de trabajo, se ejecutará la herramienta mimikatz (https://github.com/gentilkiwi/mimikatz/releases) en su ultima versión que ya trae incorporado el ataque.
Se hará uso de una función llamada misc apuntando al controlador de dominio como servidor principal y conectando a la maquina Kali Linux que se encuentra ejecutando el relay sin autorización.
Esto comenzará a generar certificados en base64 del usuario DCWS$ en el relay, los cuales serán usados en la herramienta kekeo, para conseguir el hash de kerberos.
Una vez obtenido el certificado, se lleva a la herramienta kekeo y se realiza una consulta por el ticket basada en el certificado entregado por el relay.
Ya con esto, volviendo a la herramienta mimikatz, es posible solicitar un dcsync al dominio consultando por el usuario krbtgt.
Para evitar el uso de Mimikatz, se realiza la misma tarea ejecutando ntlmrealyx.py de la suite impacket, pero la llamada hacia el controlador de dominio se efectua desde la herramienta PetitPotam, indicando el dominio, la IP del relay (Kali) y la IP o nombre del controlador de dominio.
Esto comenzará a enviar certificados al relay como se mostró con anterioridad.
Finalmente, solo queda seguir los pasos para conseguir el hash de krbtgt.
Información sobre el fabricante y medidas de mitigación
Microsoft liberó un parche para mitigar la vulnerabilidad la cual se puede encontrar en el siguiente enlace:
Además, la guía de actualización de la misma indicando los sistemas afectados:
https://msrc.microsoft.com/update-guide/vulnerability/ADV210003
Y el aviso correspondiente en las redes sociales por parte del equipo de seguridad:
https://msrc.microsoft.com/update-guide/vulnerability/ADV210003
Cabe destacar que algunos de los posibles arreglos para este ataque, se habían comentado con anterioridad en el siguiente enlace: https://twitter.com/gentilkiwi/status/1418700887195795456
Agradecimientos especiales a Diego Garcés miembro del equipo de Inteligencia de Dreamlab Technologies por la ayuda brindada en la investigación y a Felipe Veas del área de Special OPS por el apoyo en la puesta en marcha del laboratorio.