miércoles, 12 de julio de 2017

Manipulación de Tokens de Windows en memoria

Compartir este artículo:
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 matchear 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.

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.

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.


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.


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.

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.


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.


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.

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.


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 pentesting real.

No hay comentarios:

Publicar un comentario