martes, marzo 13, 2018

DCShadow y DCSync: Engañando al Domain Controller con Mimikatz

Hace unos días que se celebró la RootedCON en su edición IX y tuve la suerte de impartir un par de labs y dar una charla. En uno de esos labs hablábamos de Ethical Hacking y tratamos el tema de Mimikatz y las infinitas posibilidades que esta maravillosa herramienta proporciona. Además, durante la cena del miércoles estuve hablando con mi amigo Carlos García García, co-autor del libro Hacking Windows de 0xWord, y me estuvo contando lo que era DCShadow con gran detalle.

Figura 1: DCShadow y DCSync: Engañando al Domain Controller con Mimikatz

La técnica de DCShadow había sido presentada por Benjamin Delpy y Vincent LeToux, tal y como puede ver en la propia web de la técnica, en la BlueHat de 2018.

¿En qué consiste DCShadow?

La técnica consiste en hacerse pasar por un controlador de dominio y poder realizar cambios sobre el Active Directory de la organización con Windows Server 2016. La técnica DCSync, la cual es algo más antigua, permitía hacerse pasar por un Domain Controller (DC) y poder replicar datos de contraseñas de los controladores de dominio. La técnica DCShadow va un paso más allá y permite realizar cambios sobre el Active Directory.

Una de las cosas interesantes que me contaba Carlos y que luego he podido ver es que con DCShadow se evitan las técnicas de detección más comunes. Con DCShadow no estamos logrando una escalada, pero sí estamos logrando persistencia en el Active Directory. El resumen de la técnica podría ser la siguiente:
1. El pentester consigue derechos de administrador de dominio. Aquí es donde vemos que no es una técnica de escalada de privilegios, si no que nos permitirá lograr persistencia mediante la modificación de atributos de los objetos el Active Directory. 
2. El equipo dónde se encuentra el pentester se registrará como un equipo que es un controlador de dominio en el Active Directory. Esto ocurrirá cuando se realizan cambios en el esquema de configuración y en los valores del SPN del equipo. En este instante, se ve a este equipo como un controlador de dominio de confianza, es decir, con él se podrán replicar cambios. 
3. El cambio en un objeto es preparado por el pentester. El equipo hace que este cambio sea posible, es decir, deja preparado el cambio en el DC falso. 
4. La replicación es activada por el pentester y los DC legítimos leen los cambios preparados previamente. Los DC legítimos confirman los cambios.
Hay unos detalles, que también me comentó en su día Carlos, y que son importante para tener en cuenta. Como los cambios en el DC se realizan a través de la replicación, los cambios no son registrados en el registro de eventos del sistema, como sí sucede con otros cambios. Generalmente, estos cambios se registran en el Domain Controller dónde se originaron los cambios, pero, como se puede entender, en este caso no hay un DC real de dónde provienen los cambios. Este hecho hace que la técnica sea difícil de detectar.


Figura 2: DCShadow en BlueHack IL 2018

Otra de las cosas que hay que tener en cuenta son que se utilizan funcionalidades y características propias de Active Directory, por lo que no se entiende, y no es, una vulnerabilidad. Además, es difícil de reparar, aunque se puede esperar alguna contramedida por parte de Microsoft. En resumen, DCShadow permite hacer cambios críticos en la seguridad del Active Directory, y dichos cambios no se pueden detectar, ni, a día de hoy, prevenir.

Jugando con DCShadow

En primer lugar, debemos tener claro que necesitaremos un par de procesos dónde ir jugando con diferentes tokens. En primer lugar, si tenemos un proceso que puede impersonar a SYSTEM, debemos hacer que Mimikatz ejecute con dicho token. Una posibilidad, entre muchas, es utilizar psexec.exe -i -s cmd.exe en una consola dónde ya tenemos privilegio y obtener una nueva consola como SYSTEM.

Figura 3: Ejecutando una consola cmd.exe como SYSTEM

Una vez tenemos la consola como SYSTEM, y podemos asegurarnos con whoami, utilizamos Mimikatz para lanzar un nuevo proceso. Esto también se puede hacer en otra consola aparte, siempre y cuando dicha consola tenga privilegio. Utilizando Mimikatz y el módulo token se puede asegurar que ejecutamos como SYSTEM. El objetivo ahora es hacer Pass the hash a través de la creación de un nuevo proceso en la máquina con la identidad que a nosotros nos interesa.

En este caso, podemos observar que utilizamos el módulo sekurlsa para hacer el Pass the hash y crear el proceso con el Access Token asociado para el Administrador del dominio. Es cierto que para esto necesitamos credenciales de Administrador de dominio, en este caso, su hash NTLM. La instrucción utilizada es sekurlsa::pth /user:Administrato /domain:[dominio] /ntlm:[hash NTLM] /run:[proceso a ejecutar]. Si no indicamos proceso, se ejecutará automáticamente una cmd.exe.

Figura 4: Mimikatz y módulo sekurlsa

Ahora, tenemos un nuevo proceso ejecutándose, el cual utiliza el Access Token del Administrador de dominio. Este proceso nos permitirá muchas cosas, desde poder leer información del DC o de otras máquinas hasta, como veremos, modificar mediante DCShadow cualquier atributo.

En el nuevo proceso, arrancamos Mimikatz y nos encontramos que el módulo lsadump dispone de una opción denominada dcshadow. Esta opción nos permite lanzar la funcionalidad de replicación de información, como si de una actualización para el resto se tratase.

Hay que tener en cuenta que desde esta ventana, la cual tiene el Access Token del Administrador de dominio lanzaremos la orden de replicación, mediante la instrucción lsadump::dcshadow /push. Sin embargo, desde la otra ventana, la cual se ejecuta como SYSTEM, simularemos ser un DC y simularemos haber sufrido cambios en el Active Directory. De esta forma, el resto de DCs legítimos serán replicados con la información falseada y se modificarán los valores en el resto de DCs.

Figura 5: Forzando las actualizaciones con cambios

Entendido esto, en la ventana en la que simularemos ser un DC ejecutamos la siguiente instrucción lsadump::dcshadow /object:[ruta LDAP al objeto] /attribute:[atributo a modificar] /value:[valor para el atributo]. En otras palabras, creamos el cambio y nos hacemos pasar por un DC del dominio.

Figura 6: lsadump::dcshadow

Ahora, en la ventana dónde tenemos el Access Token del usuario administrador de dominio debemos ejecutar la instrucción lsadump::dcshadow /push y los cambios se llevarán a cabo, tal y como puede verse en el siguiente vídeo.

Figura 7: PoC de DCShadow

El resultado, como se puede ver en el vídeo, es la modificación de la descripción del usuario Administrator. Como se dice al principio del artículo, el objetivo no es lograr escalada con esta técnica, si no más bien es lograr persistencia, ya que no solo se puede modificar la descripción, si no que se puede jugar con atributos de seguridad.

Figura 8: Usuario Administrador modificado por DCShadow

Por último, no quería cerrar el artículo sin hablar de la técnica DCSync, la cual también viene con Mimikatz y aporta la posibilidad de consultar información sobre objetos del Active Directory. Por ejemplo, se puede lograr información de los usuarios ejecutando, en la ventana dónde tenemos el Access Token del usuario administrador del dominio, lsadump::dcsync /user:[usuario].

Figura 9: Usando DCSync en Mimikatz

Sin duda, son técnicas modernas para llevar a cabo acciones potentes en un Hacking a Windows en un entorno Active Directory con Windows Server 2016. Como se comentó al principio, DCShadow fue publicada a finales de enero de 2018 en el evento BlueHat y aporta ciertas opciones para el pentester a tener muy en cuenta en tu Ethical Hacking.

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en ElevenPaths

1 comentario:

  1. Muchas gracias!
    Dejo esta referencia para posibles detecciones o ayudas:
    https://blog.stealthbits.com/detecting-dcshadow-with-event-logs/


    Un saludo!

    ResponderEliminar