1 de febrero de 2012

Client Side Attacks (II): Infectando Navegadores

  ****************************************************
    Client Side Attacks (I): Introducción
    Client Side Attacks (II): Infectando Navegadores
    Client Side Attacks (III): Sacando provecho
    Client Side Attacks (IV): Otros ataques
  ****************************************************

En la entrada anterior vimos en qué consistían los ataques del lado del cliente con un ejemplo práctico que permitía robar la sesión de un usuario que se viera afectado por un Cross Site Scripting. Pero, ¿cómo sacar provecho de este tipo de ataques en un caso real como podría ser un test de intrusión?

Teniendo en cuenta que hasta ahora nos estamos centrando únicamente en los XSS, cuando intentamos responder a la pregunta anterior, se nos plantean dos grandes problemas. El primero de ellos es tener el conocimiento suficiente de Javascript como para ser capaces de programar un exploit y el segundo es cómo conseguir infectar al mayor número de usuarios posible o al menos a aquellos que nos interesan para conseguir nuestro objetivo.

Esta entrada la voy a dedicar al segundo de estos problemas...

Infectando Navegadores

Lo habitual es pensar en enviar un correo electrónico o publicar el enlace en algún blog o red social para que la gente pinche sobre él. Pero en estos casos nos encontramos con el problema que ya planteamos en la entrada anterior con soft: en el momento que el usuario abandone la URL con el XSS inyectado, perderemos el control sobre el navegador del usuario.

Una manera de solucionarlo es publicar el código malicioso en sitios como foros (cada vez en más difícil encontrar foros vulnerables a Cross Site Scripting) o incluso en algún dominio que controlemos y atraer a los usuarios hasta él... Aunque puestos a desear, está claro que lo mejor es inyectar el código en donde los usuarios ya están y donde pasan la mayor parte de su tiempo; es decir, en las redes sociales o páginas de inicio típicas como motores de búsqueda o escritorios web.

Esto puede parecer bastante difícil. ¿Un Cross Site Scripting en Google? Sí, los hay, pero se puede obtener el mismo resultado de maneras más fáciles y, sobretodo, duraderas.

Yo, al igual que otra mucha gente que conozco, utilizo iGoogle como página de inicio. Tanto éste como otros escritorios web se componen de gagdets, que no son más que iframes con alguna URL dentro... Es decir, que si alguien se entretiene y publica un gadget con un contenido atractivo además del código malicioso y lo comienza a distribuir... es muy fácil que la gente se lo instale en su escritorio web y cada vez que entren (que debería ser bastante a menudo) tendremos nuestro script/exploit en sus navegadores.

Además, para compartir un gadget para iGoogle, ni siquiera hace falta publicarlo en su directorio de gadgets. Basta con distribuir una URL como la siguiente que, además, pertenece a Google y parece totalmente inofensiva, facilitando ser publicada y distribuida a través de redes sociales:

http://www.google.es/ig/directory?hl=es&type=gadgets&url=www.sitiomalicioso.com/gadget.xml




El contenido del fichero XML que muestra la URL anterior (gadget.xml) es el siguiente:

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
    <ModulePrefs
        author="Attacker"
        author_email="fakemail@gmail.com"
        author_location="123 Fake Street"
        description="This gadget is a PoC for La X marca el lugar"
        title="La X marca el lugar Gadget!!"
        directory_title="La X marca el lugar Gadget!!"
        thumbnail="http://www.sitiomalicioso.com/LaX_trans.png">
        <Require feature="views" />
    </ModulePrefs>
    <Content type="url" view="home" href="http://www.sitiomalicioso.com/index.html" />
</Module>

Con él se definen cada uno de los campos que luego se muestran en la imagen anterior y se especifica (línea 13, tag Content) la URL que estará dentro del iframe del gadget final. Si os interesa saber más sobre cómo diseñar vuestros gadgets podéis consultarlo en la Guía del desarrollador de iGoogle.

Si desde la URL anterior pulsamos en el botón "Añadir ahora",  el gadget se instala, pasando a formar parte de nuestro iGoogle:


Una vez instalado funciona como cualquier otro gadget "oficial", permitiendo incluso que los propios usuarios lo compartan por el procedimiento habitual desde el enlace que se proporciona en iGoogle.

Llevando esta idea un poco más al extremo y ya puestos... ¿por qué no implementar un jueguecillo de esos que enganchan para Facebook y que incluya nuestro script? Con un FarmVille o similar podríamos llegar a tener miles (millones) de usuarios infectados al cabo de unas semanas.

Por tanto, ya hemos conseguido solucionar el segundo de nuestros problemas. Infectar a muchos usuarios de una manera sencilla y sin llamar la atención con spam. En la próxima entrada, veremos qué hacer desde los navegadores una vez que ya los controlamos ;)