Introducción al Mallory Proxy

Aunque he probado muchos de los proxys que permiten modificar peticiones web “en vivo” como pueden ser burp, webscarab, etc. recientemente descubrí uno bastante interesante, no sólo por los desarrolladores y el contexto en el que se presentó, sino también por las características que presenta y la arquitectura que lo integra. Se trata de Mallory Proxy, un proxy desarrollado por el grupo de expertos en seguridad informática Intrepidus que fue presentado en la Black Hat de 2010.

Mallory está desarrollado en python y se presenta con una parte de la aplicación que se ejecuta en modo servicio y otra como interfaz de configuración e interacción para el usuario.

Para el que quiera probar Mallory, la aplicación dispone de 2 opciones básicamente. La primera es seguir las instrucciones de instalación y descargar e instalar tanto los fuentes del proxy como las dependencias. La segunda es descargase una imagen de VMWare cuyo sistema operativo de base es Ubuntu y que viene tanto con el software como con las dependencias.

En mi caso he optado por la primera opción para montar una pequeña maqueta que permita probar las funciones básicas de este proxy, tal y como se haría con cualquier otro proxy del mismo tipo. Tengo que decir que la instalación viene bastante bien explicada en la web de la aplicación y que no supone ningún gran esfuerzo ni complicación. Además, la aplicación dispone de un script de instalación que básicamente realiza todos los pasos sin tener que interactuar demasiado.

Una de las características que ofrece Mallory Proxy es la capacidad de hacer de proxy MiTM sobre conexiones SSL entre otras. Mallory hace uso de plugins, entre los cuales podemos activar el correspondiente al manejo de tráfico SSL, como puede ser la navegación seguro mediante https. Realmente, lo que quiero demostrar es lo fácil que es para un atacante obtener credenciales de distintos servicios a los cuales se conectan usuarios que no tienen en cuenta aspectos básicos de la seguridad.

Para ello, la idea es crear un punto de acceso sin autenticación, para que por ejemplo cualquier persona pueda conectar su dispositivo móvil sin insertar contraseña de acceso. Este punto de acceso en este caso está conectado a un router con un sistema operativo debian donde está instalado el proxy Mallory. El router ofrece conexión a internet, con lo que la víctima va a navegar sin problemas. El router ejerce de puerta de enlace de la red de los dispositivos que se conectan y a su vez, se han creado reglas en el firewall del router que habilitan el modo transparente de Mallory.

Os comento los pasos esenciales para la prueba que he hecho. Lo primero es arrancar la aplicación. Accediendo a la ruta que podéis ver en la siguiente imagen, ejecutamos el comando indicado:

root@rogue_router:/opt/mallory/current/src# python mallory.py -p sslproto.SSLProtocol 
MALLLLORYYY!!!!!!!!!! 
[*] [2012-11-29 01:12:47,395] INFO:Logging setup complete 
[*] [2012-11-29 01:12:47,408] INFO:ConfigRules.init: LOADING RULES. 
[*] [2012-11-29 01:12:47,413] INFO:ConfigRules.load_config: Rule Action String is:Debug 
[*] [2012-11-29 01:12:47,422] DEBUG:NetfilterTool: Instantiating object. 
Proto is sslproto.SSLProtocol 
[*] [2012-11-29 01:12:47,429] DEBUG:SSLProtocol: Initializing 
[*] [2012-11-29 01:12:47,434] INFO:Configuring command line protocol instance:  for port 443 
[*] [2012-11-29 01:12:47,431] INFO:plugin.http.ObjectEditor: starting XML RPC Server 
[*] [2012-11-29 01:12:47,445] INFO:RPCServer: add_remote_obj - adding remote object
[...]

Lo siguiente es ejecutar la interfaz gráfica de usuario a través de la cuál configuraremos las opciones que consideremos necesarias y además podremos interactuar con el tráfico capturado.

root@rogue_router:python launchgui.py 
[*] [2012-11-29 01:25:18,004] INFO:Logging setup complete 
[...]

Con lo que tenemos la siguiente ventana de la aplicación y donde se nos presentan las opciones básicas de configuración y manipulación del tráfico que pasa a través del propio proxy. En la siguiente captura, tenemos las opciones de configuración de interfaces que emplearemos para efectuar el ataque. En este caso, emplearemos la interfaz eth2 como la interfaz a través de la cuál efectuaremos los ataques, y la interfaz eth0 como interfaz de salida a Internet.

La siguiente pantalla muestra cómo configurar los plugins que disponemos en el proxy Mallory.

Aunque podéis ver que están todos activados, nos interesa el que nombran como “SSL BASE”. Este plugin nos permitirá obtener los credenciales en texto claro, no cifrado, de los usuarios que caigan en la trampa.

Para la prueba que queremos hacer no es necesario configurar nada más, aunque por supuesto podríamos ver parámetros de configuración y otras opciones de la aplicación pero lo dejamos para otros posts… De esta forma, sólo queda indicarle al proxy que empieze a capturar y además le indicaremos que no pare el tráfico, si no que lo transfiera automáticamente, puesto que lo único que queremos es capturar las credenciales de una posible víctima. Si quisiéramos modificar los paquetes capturados por el proxy, desactivaríamos la opción correspondiente y nos permitiría cambiar los valores del paquete tcp/udp que haya capturado, tal y como haría cualquier otro proxy de estas características.

En este punto, ya estamos a punto para realizar un ataque MiTM, por lo que vamos a simular la conexión de una posible víctima conectándose desde un smartphone y visitando mediante el navegador web un portal de una red social conocida, eso sí, empleando https en la conexión. A ver qué sucede…

El usuario introduce la URL de la web que quiere visitar. El proxy captura el tráfico https y es en este momento donde el usuario debe estar atento, puesto que le presenta un certificado que no se considera cómo válido por el propio navegador:

Si el usuario acepta el certificado, estará en manos del atacante y éste tendrá acceso a toda la información en claro, visible desde la interfaz del propio proxy. Entre los datos capturados, el usuario y la contraseña de la web que está accediendo:

Hay que tener en cuenta que si accedemos a los detalles del certificado sí que parecen correctos, aunque tal y como hemos comentado éste no esté validado por el navegador web. Como habréis visto no es nada difícil para un usuario con conocimientos básicos montar este tipo de trampas aprovechándose de aquellas personas que no tienen un mínimo cuidado a la hora de conectarse a cualquier punto de acceso wifi.

Referencias:

Comments

  1. Interesante artículo.

    Tengo una pregunta: ¿este software modifica el contenido automáticamente?, es decir, en base a ciertos patrones se modifique el contenido, como si se tratase de un replace.

    En mi caso por ejemplo, tengo un servidor que actúa de proxy transparente con squid. ¿Existe algún módulo que cumpla con lo que comento arriba?

    saludos!

  2. Hola Adrián,

    Existen varios plugins y como ejemplo puedes tomar uno que invierte la posición de las imágenes de las páginas web que visitas. Es un plugin muy simple y lo podrías tomar como ejemplo para crear tus propios plugins.

    Saludos y gracias por el comentario.