Nueva herramienta ProxyMe y ataques de cache poisoning (I)

miércoles, 30 de julio de 2014

ProxyMe es una aplicación proxy desarrollada por nuestro compañero Manuel Fernández de Eleven Paths. Será presentada durante el evento Arsenal del congreso de seguridad Black Hat, que se celebrará entre los días 2 y 7 de agosto del 2014 en Las Vegas. Veamos, en dos entradas, cómo funciona la herramienta y un uso concreto de ProxyMe. Estará disponible para su descarga una vez celebrado el congreso.

ProxyMe es un proxy HTTP/S con una arquitectura modular que permite un desarrollo ágil y rápido de plugins. Estos modifican el comportamiento de las conexiones HTTP/S que pasan a través de él y (al tratarse de un proyecto de código abierto) permite a la comunidad el desarrollo de nuevas características. La finalidad es disponer de un pequeño framework que aporte cierta flexibilidad a la hora de analizar y modificar conexiones de red HTTP/S, así como de una herramienta auxiliar para tareas de pentesting. ProxyMe cuenta ya con un repertorio de plugins que permiten realizar diferentes tipos de ataques, como por ejemplo el conocido "cache poisoning" o "SSLStrip".

Visión global y configuración clásica

Entre los métodos de conexión soportados por ProxyMe a la hora de actuar como un servidor proxy, se encuentran los siguientes (habituales entre los proxies):
  • Modo clásico: Este es el modelo de conexión proxy más conocido. Nos encontramos con este entorno cuando el cliente configura su sistema y/o navegador para que las peticiones HTTP/S pasen a través de un servidor proxy.

Arquitectura de una conexión a través de un servidor proxy

  • Modo transparente: El modo de conexión transparente a través de un servidor proxy es similar al modo clásico, pero en ete el cliente no tiene que configurar su sistema y/o navegador con la dirección del proxy. Será la puerta de enlace la que hará la función de proxy (en la mayoría de los casos).
  • Modo inverso: Este modelo de arquitectura podemos encontrarlo cuando el servidor proxy se sitúa delante de una serie de servidores web. De éste modo, los clientes están forzados a realizar las peticiones HTTP directamente contra el servidor proxy. Este decidirá, en base a determinadas reglas, a cuál de los servidores web debe reenviar la petición HTTP. Se utiliza esta arquitectura comúnmente como firewall, balanceo de carga en granjas de servidores o para cachear contenido estático.

Arquitectura de red de un proxy inverso

Estructura y configuración de ProxyMe

Una vez entendidos estos conceptos de las distintas arquitecturas que podemos encontrar al montar un proxy, será necesario configurar ProxyMe para que actúe en el modo que se desee. La configuración se encuentra localizada en el fichero "/config/configuration.xml".

La configuración de ProxyMe es simple, pero no lo suficiente como para tratarla por completo en este artículo. Por ello, nos limitamos aquí a ver cómo configurar el servidor proxy en el modo clásico y posteriormente configuraremos el plugin "CachePoison.dll" como ejemplo de ejecución de un plugin.

Para establecer el modo de conexión clásico se debe habilitar el flag "openproxy" como se muestra a continuación, e ignorar la configuración de "forwards" que solo aplica cuando se quiere que el proxy funcione en modo inverso."Openproxy" indica que un cliente podrá realizar peticiones web a cualquier servidor web a través del proxy. También es importante configurar el valor "port" que indica en qué puerto TCP estará escuchando el servicio.

Parte del fichero de configuración

Posteriormente, en las últimas líneas del fichero de configuración es posible indicar la lista de plugins que deben ser cargados al iniciar el servicio. En este ejemplo vemos que el único plugin cargado es ‘CachePoison.dll’.

Configuración de plugins

Cada uno de los plugins cargados es ejecutado en dos ocasiones. La primera ejecución se realiza sobre la petición inicial que realiza el cliente (HTTP request). La segunda ejecución se realiza sobre la respuesta del servidor (HTTP response). De éste modo, los plugins tienen un control total sobre todo el flujo que pasa a través del proxy, lo que les permite analizar y modificar cualquier dato que se reciba o se envíe. Adicionalmente los plugins están divididos en cinco capas o anillos, siguiendo una ejecución desde la capa 0 hasta la capa 5. Esto permite que haya un orden de ejecución de plugins en base a la criticidad de la tarea que realiza cada uno de ellos. A continuación se muestra un gráfico explicativo de esta arquitectura.
Flujo interno de ejecución de plugins en ProxyME

En la siguiente entrada, nos centraremos en un ejemplo de uso concreto con el plugin para realizar ataques de cache poisoning.

1 comentario:

  1. Una vez que se descarga el código y se configuran los archivos tal cual se indican en las imagenes; cómo y mediante que se implementa el proxy?

    ResponderEliminar