on

Cómo evadir las restricciones de seguridad establecidas en un kiosko

Se define como kiosco aquella máquina, puesta a disposición pública, para que usuarios utilicen los servicios ofrecidos por la empresa que facilita su acceso.

 

Seguro que muchos habéis visto algún kiosko similar, ofreciendo diversos servicios a través de Internet, ya sea en aeropuertos, estaciones de tren o incluso en oficinas bancarias. Dichos kioskos suelen presentar una serie de restricciones de seguridad, mediante las cuales se trata de acotar las funcionalidades que desde dicho sistema se puedan realizar, ofreciendo como interface con el usuario únicamente un navegador, sin posibilidad aparente de que éste pueda interactuar con el sistema subyacente.

En el presente artículo se presentarán una serie de técnicas, las cuales pueden ser utilizadas para evadir los controles de seguridad dispuestos en el kiosko, logrando en muchos casos interactuar libremente con el sistema operativo, e incluso escalar privilegios dentro del mismo.

Obtención de herramientas instaladas en el kiosko

En el caso en que el navegador proporcionado por el kiosko sea Internet Explorer, podemos utilizar el manejador res:// para inferir la existencia o no de binarios, y por lo tanto enumerar el software instalado.

Para realizar dicha comprobación, deberemos ejecutar, desde la barra de direcciones, el siguiente código javascript, o similar:
[sourcecode language=’javascript’]
javascript:var aux = new Image();aux.src=”res://c:\windows\Microsoft.NET\Framework\v1.0.3705\mscormmc.dll/#2/#10″;if (aux.height != 30) { alert(“El binario  existe”); } else { alert(“El binario N0 existe”); }
[/sourcecode]
El valor del objeto Image, en nuestro ejemplo llamado aux, por defecto tiene los siguientes atributos: aux.height=30 y aux.width=28. En el caso en que exista el fichero, dichos valores por defecto serán modificados, y por lo tanto podremos inferir si el fichero existe:

 

 

Obtención de información sobre el navegador proporcionado por el kiosko

Con frecuencia, las políticas establecidas en el kiosko no permiten la consulta directa de cierta información relativa al mismo, como por ejemplo una consulta de la versión del navegador utilizado. Para evadir dicho control y obtener el nombre del navegador, versión, plataforma utilizada y useragent, podríamos ejecutar el siguiente código javascript, desde el campo de direcciones del navegador proporcionado por el kiosko.

[sourcecode language=’javascript’]
javascript: alert(navigator.appName+”,”+navigator.appVersion+”,”+navigator.platform+”,”+navigator.userAgent);
[/sourcecode]

Revelación de variables del navegador

Por otro lado, y apoyándonos en un servidor web controlable por el auditor, podemos acceder a una URL que contenga el siguiente código, con el objeto de averigurar la IP pública del kiosko:

[sourcecode language=’html’]

IP del kiosko: <? print($_SERVER[‘REMOTE_ADDR’]);$hostname=gethostbyaddr($_SERVER[‘REMOTE_ADDR’]);print(” : $hostname”); ?>

 

[/sourcecode]

Revelación de la dirección IP con la que el kiosko sale a Internet

Me parece muy bien, pero ¿Cómo puedo acceder al sistema de ficheros?

Para aquellos kioskos que, sí o sí, has de interactuar únicamente con el navegador, la forma más fácil de poder pegarle un vistazo a lo que hay debajo es la siguiente:

Ejecutemos el siguiente código javascript desde el campo de direcciones del navegador:

[sourcecode language=’javascript’]javascript:document.execCommand(“SaveAs”);[/sourcecode]

Con lo que obtendremos un dialog que nos debería permitir navegar por el sistema de ficheros:

Obtención de un dialog, mediante el cual poder explorar el sistema de ficheros

Como plan alternativo, y en el caso en que el código javascript anterior no hubiese resultado exitoso, es posible abrir un dialog desde un componente flash ubicado en un servidor Web controlado por el auditor:

 

 

Y ahora… ¿Algún modo para ejecutar otros programas residentes en el kiosko?

Sí. La forma más rápida es utilizar una serie de manejadores, que el navegador puede tener vinculados al software que se desea ejecutar. Algunos de estos manejadores pueden ser:

callto:// Telnet://
gopher:// NNTP://
Hcp:// Ldap://
Rlogin:// Search-ms://
Mailto://

Ejecución de software no contemplado para uso público desde el kiosko

¿Otros modos de abuso? Por supuesto…

Desde el momento en que cualquier usuario puede conectarse a su propio servidor Web, se abre un amplio abanico de posibilidades que, sin un adecuado bastionado del kiosko, pueden facilitar diversos vectores de abuso.

Un vector de abuso puede ser la ejecución de applets dispuestos por el usuario, los cuales se ejecutará en el kiosko. Como ejemplo de este vector de abuso, se puede disponer de una shell de python, posibilitando a atacantes el desarrollo y ejecución cualquier tipo de programa realizado en python, java e incluso interactuación con el sistema.

Consola proporcionada por jython habilitada en el kiosko

Una vía más directa es la utilización de applets firmados para ejecutar cualquier aplicación del sistema:

Ejecución del bloc de notas desde un applet

Del mismo modo con el que pueden ejecutarse comandos del sistema desde un applet hecho en java, con su debida firma, pueden ejecutarse comandos del sistema utilizando ActiveX o incluso aplicaciones desarrolladas en .Net.

Ejecución de binarios, albergados en un servidor web controlado por el usuario del kiosko. Dichos binarios podrían ser ejecutados tras la descarga directa, encapsulados en un fichero .zip o incluso dispuestos mediante un objeto flash.

Descarga de zip, extracción de binario y ejecución del mismo

En kioskos, con frecuencia se encuentran establecidas ciertas directivas de grupo que impiden la ejecución de una shell, como puede ser:

Opción DisableCMD habilitada

En tal caso, para poder visualizar correctamente la shell deberemos parchearla para que no tenga en cuenta la directiva de grupo anteriormente mencionada, o bien utilizar una shell previamente desbloqueada.

Una vez obtenida una shell de sistema, completamente operativa, se posibilita que el intruso pueda elevar privilegios o incluso que la intrusión se propague hacia otros entornos, como pueda ser una red de kioskos, o incluso instalar cualquier tipo de malware en los mismos.

Por todos estos motivos, no está de más hacer hincapié en la importancia de bastionado exhaustivo de sistemas tan expuetos a diferentes amenazas como pueden ser los kioskos.

Todas estas técnicas y herramientas, entre otras, están dispuestas en una suite orientada a auditar kioskos llamada ikat, de Paul Craig, cuya versión 3 es accesible desde http://ikat.ha.cked.net, las cuales pueden ayudarnos a determinar el nivel de seguridad no sólo de kioskos, sino de cierto perfil de estaciones de trabajo e incluso entornos Citrix, cuyas técnicas de análisis, y dependiendo de la configuración, pueden ser análogas a las aquí enumeradas.

Sin más, un fuerte abrazo y hasta la próxima.

Demo Free Trial MSSP
Program