Kerberos Double Hop Problem
Introducción
El problema de "Doble Salto" de Kerberos ocurre cuando un atacante intenta utilizar la autenticación de Kerberos a través de dos saltos, por ejemplo, utilizando PowerShell/WinRM.
Cuando ocurre una autenticación a través de Kerberos, las credenciales no se almacenan en la memoria. Por lo tanto, si ejecutas mimikatz, no encontrarás las credenciales del usuario en la máquina aunque esté ejecutando procesos.
Esto se debe a que al conectarse con Kerberos, estos son los pasos:
El Usuario1 proporciona credenciales y el controlador de dominio devuelve un TGT de Kerberos al Usuario1.
El Usuario1 utiliza el TGT para solicitar un ticket de servicio para conectarse al Servidor1.
El Usuario1 se conecta al Servidor1 y proporciona el ticket de servicio.
El Servidor1 no tiene las credenciales de Usuario1 en caché ni el TGT de Usuario1. Por lo tanto, cuando Usuario1 desde Servidor1 intenta iniciar sesión en un segundo servidor, no puede autenticarse.
Delegación no restringida
Si la delegación no restringida está habilitada en la PC, esto no sucederá ya que el Servidor obtendrá un TGT de cada usuario que acceda a él. Además, si se utiliza la delegación no restringida, probablemente se pueda comprometer el Controlador de Dominio desde allí. Más información en la página de delegación no restringida.
CredSSP
Otra forma de evitar este problema, que es notablemente insegura, es el Proveedor de Soporte de Seguridad de Credenciales. Según Microsoft:
La autenticación de CredSSP delega las credenciales de usuario de la computadora local a una computadora remota. Esta práctica aumenta el riesgo de seguridad de la operación remota. Si la computadora remota se ve comprometida, cuando se pasan las credenciales a ella, las credenciales se pueden utilizar para controlar la sesión de red.
Se recomienda encarecidamente que CredSSP esté deshabilitado en sistemas de producción, redes sensibles y entornos similares debido a preocupaciones de seguridad. Para determinar si CredSSP está habilitado, se puede ejecutar el comando Get-WSManCredSSP
. Este comando permite verificar el estado de CredSSP e incluso puede ejecutarse de forma remota, siempre que WinRM esté habilitado.
Soluciones alternativas
Invocar Comando
Para abordar el problema del doble salto, se presenta un método que implica un Invoke-Command
anidado. Esto no resuelve el problema directamente, pero ofrece una solución alternativa sin necesidad de configuraciones especiales. El enfoque permite ejecutar un comando (hostname
) en un servidor secundario a través de un comando PowerShell ejecutado desde una máquina atacante inicial o a través de una sesión de PS previamente establecida con el primer servidor. Así es como se hace:
Alternativamente, se sugiere establecer una sesión de PS con el primer servidor y ejecutar el Invoke-Command
usando $cred
para centralizar tareas.
Registrar la Configuración de la Sesión de PS
Una solución para evitar el problema de doble salto implica usar Register-PSSessionConfiguration
con Enter-PSSession
. Este método requiere un enfoque diferente al de evil-winrm
y permite una sesión que no sufre la limitación del doble salto.
Reenvío de Puertos
Para los administradores locales en un objetivo intermedio, el reenvío de puertos permite enviar solicitudes a un servidor final. Utilizando netsh
, se puede agregar una regla para el reenvío de puertos, junto con una regla del firewall de Windows para permitir el puerto reenviado.
winrs.exe
winrs.exe
se puede utilizar para reenviar solicitudes de WinRM, potencialmente como una opción menos detectable si la supervisión de PowerShell es una preocupación. El siguiente comando demuestra su uso:
OpenSSH
La instalación de OpenSSH en el primer servidor habilita una solución alternativa para el problema del doble salto, particularmente útil para escenarios de caja de salto. Este método requiere la instalación de CLI y la configuración de OpenSSH para Windows. Cuando se configura para la Autenticación de Contraseña, esto permite que el servidor intermedio obtenga un TGT en nombre del usuario.
Pasos de Instalación de OpenSSH
Descargar y mover el archivo zip de la última versión de OpenSSH al servidor de destino.
Descomprimir y ejecutar el script
Install-sshd.ps1
.Agregar una regla de firewall para abrir el puerto 22 y verificar que los servicios de SSH estén en ejecución.
Para resolver errores de Conexión restablecida
, es posible que sea necesario actualizar los permisos para permitir que todos tengan acceso de lectura y ejecución en el directorio de OpenSSH.
Referencias
Última actualización