Pass-The-Hash y Windows Defender Credential Guard en Windows 10

Desde el lanzamiento de Windows 10, Microsoft ha hecho enormes esfuerzos por mejorar la seguridad de la plataforma en diferentes frentes agregando más y más características en cada compilación, trabajo que va teniendo frutos, pues se ha convertido el sistema operativo Microsoft más seguro de todos.

Como vale la pena ir conociendo cómo implementar estas nuevas características, iré escribiendo, conforme pueda y sepa, lo que aprendo por aquí por si alguien más desea hacer pruebas en sus respectivas empresas. Por supuesto, todas las correcciones serán más que bienvenidas.

Una de las nuevas características de seguridad se llama Credential Guard, que básicamente utiliza seguridad basada en virtualización para aislar secretos que puedan llevar a ataques de robo de credenciales. Los secretos se protegen y almacenan en un nuevo componente llamado Insolated LSA; la comunicación con el proceso de LSA se hace a través de RPC. Básicamente previene los ataques protegiendo los hashes de las contraseñas NTLM, Kerberos y las contraseñas de dominio almacenadas en el Credential Manager. Pueden obtener más información del sitio oficial.

Pass-The-Hash es un ataque que utiliza una técnica para obtener los hashes de las contraseñas y reutilizarlos para autenticarse a través de la red en otros equipos hasta lograr ganar privilegios con una cuenta de Active Directory.

Veamos qué tan fácil puede llegar a ejecutarse un Pass-The-Hash en Windows 10 y cómo Windows Defender Credential Guard nos puede ayudar a prevenirlo.

Ejecutando un ataque de Pass-The-Hash

Antes que nada, por si desean seguir el ataque, esto es lo que necesitamos:

1. Mimikatz. Lo pueden descargar desde aquí: https://github.com/gentilkiwi/mimikatz/releases

2. PsExec. Lo pueden descargar desde aquí:
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

3. Entorno de directorio activo

4. Equipo cliente unido al dominio para probar

Notas:

  • Cabe aclarar que obviamente necesitaremos cuentas de dominio con diferentes privilegios para probar.
  • Es probable que deban darle permisos desde el antivirus al Mimikatz, pues normalmente lo bloquean.

Primer paso: obtener el hash NTLM de las contraseñas con Mimikatz

Para poder extraer el hash de las contraseñas de un equipo, cada cuenta de dominio tuvo que haberse conectado de alguna forma, pues al cerrar sesión ya no es posible que Mimikatz cree el hash, así que no lo mostraría en la consola.

No sé si sea diferente con otra aplicación; en mi caso, aunque pude extraer el NTLM hash después de cerrar sesión con otras cuentas, el ataque de Pass-The-Hash no funcionaba correctamente.

Ahora, para mi escenario tengo dos cuentas con las que voy a jugar: Sergio y Andy; la primera, Sergio, es una cuenta de dominio que solo es administradora en el equipo local (no estoy teniendo en cuenta aquí lo de ganar privilegios locales), mientras que la segunda, Andy, es una cuenta que tiene privilegios locales sobre todas las máquinas, incluyendo el controlador de dominio.

Si yo intento hacer conexión utilizando PsExec desde mi cuenta de Sergio, no podré hacerlo por ser una cuenta estándar, más allá de tener privilegios administrativos locales:

SNAGHTML14d1dec7

Afortunadamente, Andy está conectando al equipo, pero necesitamos obtener y reutilizar ese hash para nuestro ataque.

Desde una cuenta local o de dominio con privilegios administrativos en la máquina ejecutamos Mimikatz como administrador:

image

Lo primero es solicitar privilegios a Windows de depuración ejecutando:

privilege::debug

image

Una vez adquiridos los privilegios, es decir, que la consola responda con un OK, vamos a extraer toda la información sobre las contraseñas que están en memoria con el módulo de sekurlsa:

sekurlsa::logonpasswords

image

Inmediatamente veremos datos para todas las cuentas que estén conectadas, incluyendo el más importante para este dato que sería el hash NTLM:

image

Por supuesto, nosotros no estamos interesados el usuario de Sergio, sino en el de Andy. Mimikatz, como dije, me da también el hash de la contraseña correspondiente, siempre y cuando tenga una sesión abierta:

image

Noten que el campo de contraseña lo muestra en nulo porque la forma en que se almacenan en Windows 10 difiere de Windows 7 y anteriores, así que no la podemos ver. Si estuviésemos en un Windows 7, habríamos obtenido la contraseña sin problemas.

Como pueden ver, ya tenemos el hash NTLM y eso es todo lo que necesitamos para autenticarnos a través de la red como Andy.

Segundo paso: realizar el ataque de Pass-The-Hash con el hash obtenido

Desde Mimikatz, lanzamos nuestro ataque de Pass-The-Hash con los datos que ya tenemos:

sekurlsa::pth /user:andy /domain:winside.local /ntlm:a87f3a337d73085c45f9416be5787d86

image

Nota: obviamente los datos en usuario, dominio y NTLM van a ser diferentes en cada escenario, pero dejo el comando de forma ilustrativa.

Lo que va a pasar aquí es que Mimikatz va a lanzar el cmd con una identidad falsa, Windows va a creer que era el usuario actual, es decir, Sergio en este caso, pero va a utilizar el hash de la contraseña del usuario de Andy:

image

Nuestro último paso es simplemente utilizar la consola que se nos abrió para autenticarnos en las próximas máquinas como Andy. Por ejemplo, utilizando PsExec nuevamente sobre el controlador de dominio:

PsExec \\LEO cmd.exe

Si le doy un whoami, van a ver que estoy conectando como Andy, gracias a que reutilicé el hash de la contraseña almacenada en memoria de mi equipo:

SNAGHTML14e3f7a6

Suponiendo que logre burlar la seguridad para ejecutar Mimikatz, yo podría, por supuesto, seguir obteniendo el hash NTLM de las credenciales locales hasta llegar a un usuario que tenga realmente poderes sobre el dominio:

image

Implementando Windows Defender Credential Guard

La implementación de Credential Guard es relativamente sencilla, basta con cumplir los requerimientos en las máquinas físicas o virtuales y proceder a desplegarlo a través de una directiva de grupo, manualmente (Registro de Windows) o con un script de PowerShell liberado por Microsoft.

Para mayor claridad, crearemos la GPO para Credential Guard desde cero.

Nos conectamos a la consola de administración de directivas de grupo y creamos la GPO en la OU que corresponda:

image

Yo la llamaré Credential Guard Policies.

image

Hacemos clic derecho sobre la GPO, editamos y navegamos hasta:

Computer Configuration\Policies\Administrative Templates\System\Device Guard

Allí hacemos doble clic sobre la plantilla de Turn On Virtualization Based Security

image

En la plantilla, clic en Enabled, y debajo de Credential Guard Configuration seleccionamos la opción de Enabled with UEFI Lock, esto es para que remotamente no se pueda deshabilitar, pues está protegido por UEFI.

image

Nota: para fines de prueba pueden utilizar la de Enabled Without Lock.

Actualizamos directivas de grupo en el equipo cliente y reiniciamos.

Después de reiniciar, ejecutamos Msinfo32 y verificamos que en la parte inferior la característica de Virtualization Based Security esté en ejecución y lo demás haga referencia a Credential Guard:

image

En caso de que esté habilitado pero no en ejecución, es necesario habilitar manualmente la característica de Hyper-V Hypervisor desde Activar o desactivar características de Windows y reiniciar nuevamente:

image

Obteniendo el hash de las contraseñas con Credential Guard habilitado

Después de que Windows Defender Credential Guard esté habilitado y funcionando, podemos intentar nuevamente utilizar Mimikatz o cualquier otra herramienta que obtenga el hash NTLM de las cuentas y nos encontraremos con algo completamente diferente:

image

Como pueden ver, ya no tengo forma de obtener el hash porque ahora Windows, utilizando la tecnología de seguridad basada en virtualización, más específicamente la de Insolated User Mode, está protegiendo los secretos (credenciales) para que solo unos binarios autorizados puedan llegar a ellos. Si no tengo el hash NTLM, naturalmente, no puedo hacer el ataque de Pass-The-Hash en las máquinas.

Credential Guard está disponible solo en ediciones Enterprise y Education de Windows 10.

Espero sea de utilidad y pueda seguir compartiendo otras tecnologías nuevas de seguridad en Windows 10.

Saludos,

—Checho

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *