Demostración en vídeo de este post
WinRM es la implementación de Microsoft para el protocolo WS-Management, el cual es habitual en sistemas Windows y muy especialmente en sus versiones Server. Ha sido diseñado con el objetivo de permitir la administración remota del sistema y si bien, no viene habilitado por defecto en las estaciones de trabajo basadas en Windows (7, 8, 8.1 o 10), en los sistemas Windows Server es un servicio que suele estar disponible por defecto en el puerto 5985.
Si se cuenta con acceso al sistema, ya sea teniendo el usuario y la contraseña, el usuario y el hash NTLM de su contraseña o un ticket TGT de Kerberos, es posible realizar una conexión contra dicho servicio y obtener una shell en el sistema. Evidentemente, esto significa que puede ser útil en la etapa de post-explotación cuando ya se ha conseguido acceso al sistema y se tiene cierto control sobre él. Esto nos lleva a una de las utilidades más interesantes que se encuentran disponibles actualmente para poder establecer conexiones contra el servicio de WinRM y llevar a cabo pruebas de post-explotación, se trata de Evil-WinRM
Hay 4 métodos de instalación que se encuentran disponibles en la documentación del repositorio, no obstante considero que la instalación partiendo del código fuente es muy sencilla y permite tener el código actualizado en cualquier momento simplemente ejecutando un “git pull”, en este caso el único requisito es instalar las gemas de Ruby que son dependencias obligatorias y que también se indican en la documentación. Una vez se realiza la instalación del programa, basta con ejecutar el script “evil-winrm.rb” y ver las opciones que admite.
A partir de este punto es posible realizar conexiones a sistemas Windows que tengan habilitado WinRM. Evidentemente, para llevar a cabo el proceso de autenticación es necesario tener una cuenta de usuario o ticket TGT que sean validos en el objetivo, por ese motivo se trata de una herramienta que está orientada a procesos de post-explotación. A continuación, se describe cómo utilizar Evil-WinRM con los diferentes escenarios en los que nos podemos encontrar durante un proceso de post-explotación en sistemas Windows.
En el caso de que se cuente con un usuario y contraseña validos es tan simple como indicar esos detalles mediante las opciones “-u” y “-p”. Con la opción “-u” hay que indicar el usuario con el que se pretende realizar la conexión y es obligatoria cuando no se realiza el proceso de autenticación usando Kerberos. Por otro lado, en la opción “-p” hay que indicar la contraseña y es opcional, en el caso de no querer introducirla durante la ejecución del comando, la herramienta la pedirá posteriormente para realizar la autenticación. Evidentemente puede ser una buena práctica no indicar la opción “-p” ya que de esa manera no hay que introducir la contraseña del sistema remoto en plano y tampoco queda registro de ella en el historial de comandos ejecutados.
Como se puede apreciar el procedimiento no puede ser más simple. La herramienta se encarga de realizar una conexión con la IP/hostname indicado en la opción “-i” y dado que no se ha indicado una contraseña con la opción “-p”, se pide luego que se introduzca. A continuación, genera una shell semi-interactiva que permite ejecutar instrucciones en el sistema remoto.
No siempre se contará con el usuario y la contraseña y es posible que durante el proceso de post-explotación se haya conseguido un listado de hashes para todos o algunos de los usuarios disponibles en el sistema comprometido. Si se ha obtenido un hash para una cuenta de usuario, éste se puede utilizar para llevar a cabo el proceso de autenticación sin necesidad de conocer la contraseña (Pass The Hash).
La opción “-H” es precisamente la que permite indicar el hash de la contraseña asociada al usuario que se especifica con “-u”. Como se puede ver en la imagen anterior resulta muy sencillo, aunque evidentemente se ha tenido que obtener el hash de alguna manera durante la post-explotación (usando Mimikatz, Empire Framework, Nishang, PowerSploit, ntdsutil, DiskShadow, VSSAdmin, Metasploit Framework y un largo etcétera).
El mecanismo de autenticación que queda por explicar es el de Kerberos, el cual en realidad es muy simple. Se debe tener un ticket TGT, el cual permitirá autenticarse en el sistema remoto utilizando la cuenta de usuario asociada a dicho ticket. Hay que tener en cuenta que en este mecanismo ya no se utilizan las opciones “-u” y “-p”, en su lugar se debe indicar el dominio del directorio activo (en donde estará el KDC de Kerberos preparado para llevar a cabo el proceso de autenticación) con la opción “-r”.
Aunque en la imagen anterior se puede ver que se ha llevado a cabo el proceso de autenticación sin ningún problema, hay que tener en cuenta 4 detalles importantes:
En el vídeo que está anclado a este post explico en detalle cada uno de estos puntos para que se pueda llevar a cabo el proceso de autenticación correctamente. No es muy complicado, pero en ocasiones puede dar problemas si alguno de los puntos anteriores no se ha hecho bien.
Aunque en este post solamente se han mencionado las alternativas a la hora de autenticarse en un sistema Windows utilizando Evil-WinRM, hay otras opciones que se encuentran disponibles en la herramienta una vez estás autenticado en el sistemas y eso es precisamente de lo que se hablará en el siguiente post.
Un saludo y Happy Hack!
Adastra.