martes, junio 06, 2017

Manipulación en memoria de los tokens de servicios Windows

Cuando estamos en un pentesting y tenemos que conseguir el máximo privilegio en una máquina es importante tener conocimientos sobre las vulnerabilidades actuales que permitan la elevación de privilegio, por ejemplo la de MS16-135 o el Hot Potato o Tater, conocer herramientas, como Windows Exploit Suggester, que nos permitan relacionar o localizar posibles vulnerabilidades que permitan elevar privilegios, técnicas de bypass de UAC o pequeños trucos que debidos a fallos de configuración puedan acabar permitiendo dicha elevación de privilegio como, por ejemplo, la de los servicios y la falta de comillas en la ruta de los binarios.

Figura 1: Manipulación en memoria de los tokens de servicios Windows

Sea como sea, existen diversas formas y vías que debemos conocer. También es interesante entender cómo funciona el entorno Windows y sus tokens en memoria. Hoy hablaremos de la manipulación de los tokens en entornos Windows. Es cierto, que siempre podremos utilizar los otros métodos para lograr la escalada, pero una vez lograda ésta, hay que tocar y cambiar los tokens que nos pueden proporcionar acceso a recursos a los que, a priori, no teníamos.

Gestión de Tokens en Windows

En primer lugar, si nos fijamos en los servicios que se ejecutan en un sistema Windows nos encontramos con la cuenta Servicio de red. Esta cuenta tiene un menor privilegio, por lo que, si el proceso es comprometido, no se podrá acceder a datos tan sensibles, como si el proceso se estuviera ejecutando como Administrador o SYSTEM.

Figura 2: Servicio arrancado con la cuenta "Network Service"

Podemos pasar de un nivel de privilegios proporcionado por Network Service a SYSTEM. Una vez tenemos una sesión sobre la máquina remota, podemos ver con el comando getuid en Meterpreter, a que cuenta pertenece el proceso. Como se ve en la imagen, en este caso, tenemos la cuenta de servicio de red. Con el comando getprivs podemos echar un ojo a los privilegios o acciones que puede realizar el proceso.

Figura 3: Usuario co que corre la sesión de Meterpreter

Si nos fijamos en los tokens disponibles, en primera instancia no tenemos el token de SYSTEM disponible. El módulo incognito que viene con Metasploit nos permite hacer este listado de tokens y poder manipularlos. Hay otras opciones como el script Invoke-TokenManipulation que viene en Powersploit para Powershell.

Figura 4: Powersploit en GitHub

En este punto podríamos intentar buscar una vulnerabilidad o aprovecharnos de las técnicas conocidas o tricks para lograr ejecutar código en un contexto de SYSTEM. Una opción, la cual ya hemos visto en el pasado con Tater, es utilizar RottenPotato.

Figura 5: Listado de tokens disponibles

La idea es sencilla y podríamos hacerlo a través de Tater u otra vulnerabilidad, debilidad o trick que pueda afectar y permitir la elevación de privilegio en Windows. En este caso, utilizamos RottenPotato con el objetivo de lograr la escalada. Si hiciéramos un listado de tokens disponibles aparecería el de SYSTEM y podríamos impersonalizarle.

Figura 6: RottenPotato en GitHub

Por último, nos quedaría lanzar el comando execute –f [ruta al binario] –Hc, dónde –f indica la ruta al binario y –H indica que el proceso se ejecutará de forma oculta.

Figura 7: Subida del exploit de Rottenpotato

Otro ejemplo, sería si un servicio se ejecuta como administrador de la máquina. Es un caso, prácticamente ideal, ya que tenemos todo lo necesario para ejecutar un getsystem y obtener el token de SYSTEM, ya que lo podríamos impersonalizar por permisos.

Figura 8: Servicio corriendo como Administrador

De nuevo, utilizando el módulo incognito listamos los tokens disponibles y podemos observar que SYSTEM se encuentra entre ellos. Utilizando el comando impersonate_token podemos impersonalizar al usuario SYSTEM. Este comando es similar a utilizar la opción getsystem, famosa en Metasploit. Este escenario es un caso muy favorable para el pentester y que radica en un fallo de configuración o en una debilidad, aunque en escenarios como un SQL Server dónde se permite nos lo podemos encontrar en un proyecto de ethical hacking real.

Figura 9: Elevación a SYSTEM

Os dejamos un video resumiendo este escenario y la facilidad para conseguir la manipulación de tokens debido al uso de estas herramientas. Técnicas y herramientas a tener a mano en el día a día para hacer pentesting.

Figura 10: PoC de manipulación de tokens en Windows

En el vídeo tienes un ejemplo completo de todo lo explicado en este artículo, para que lo puedas ver funcionando.

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

No hay comentarios:

Entrada destacada

Programa de Especialización "Inteligencia Artificial para Expertos en Ciberseguridad" 2ª Edición.

Hoy, en medio del verano, os traigo información de la 2ª Edición del   Programa de Especialización  de "Inteligencia Artificial para Ex...

Entradas populares