Análisis de Tráfico mediante Proxies de Interceptación

Los proxies de interceptación son la herramienta básica cuando estamos realizando pruebas o auditorías sobre aplicativos web.

Sus características más importantes son las siguientes:

  • Interceptan toda la comunicación entre un navegador y el aplicativo web alojado en el servidor. Para ello se sitúan en medio de la comunicación.
  • Permiten modificar la petición HTTP realizada por el navegador antes de ser enviada al servidor.
  • Permiten modificar la respuesta HTTP realizada por el servidor antes de ser interpretada por el navegador.

Proxies de interceptación
Los proxies de interceptación son la herramienta básica utilizada para localizar y comprobar vulnerabilidades en aplicativos web (y también móviles). Estas herramientas nos permiten interceptar toda la comunicación (realizada a través de los protocolos HTTP y HTTPS) entre un navegador y el aplicativo web alojado en el servidor. Además, también nos permiten modificar la petición HTTP realizada por el navegador antes de ser enviada al servidor o la respuesta HTTP antes de que la reciba el navegador.

Además, al contrario que otros proxies de interceptación, los proxies específicos de los protocolos HTTP y HTTPs presentan en una interfaz sencilla la comunicación HTTP reensamblada. Es decir, obtenemos la petición y respuesta HTTP totalmente reensamblada sin importar la cantidad de paquetes de capas inferiores que hubieran sido necesarios para transmitir esta comunicación.

A continuación se muestra el diagrama de uso de un proxy tipo HTTP. Como podéis apreciar se sitúa entre el navegador y el servidor, de esta manera, tendremos que configurar nuestro navegador web deseado para que sea un cliente de nuestro proxy de interceptación (normalmente se instalará y ejecutará en el mismo equipo que el navegador).

Este procedimiento nos permite conocer toda la información intercambiada entre ambas partes de la comunicación. Además, nos permite modificar las peticiones y respuestas HTTP para introducir datos no esperados por el aplicativo y comprobar cómo se comporta la aplicación en cada caso.

Por otro lado, estos proxies de interceptación permiten interceptar y examinar el tráfico cifrado mediante el protocolo HTTPS. Para poder realizar esta acción, el proxy de interceptación genera y presenta al navegador un certificado SSL (autofirmado) con el que cifra la comunicación entre el navegador y el proxy. Como el proxy es el que generó el certificado de esta comunicación es capaz de interceptar y descifrar el tráfico hasta este punto. Por último, la comunicación entre el proxy y el servidor legítimo se realiza cifrando el tráfico con el certificado del servidor legítimo y nuestro proxy actúa a modo de cliente. A la hora de gestionar la respuesta se realiza el mismo proceso pero a la inversa.


Existen numerosos proxies de interceptación disponibles, todos presentan unas características similares en cuanto a la funcionalidad de interceptación y modificación de la información transmitida por el protocolo HTTP/HTTPS. Sin embargo, algunos ofrecen ciertas mejoras como la posibilidad de automatizar ciertas tareas, la realización de pruebas automáticas, etc.

Los proxies más utilizados son los siguientes:

  • ZAP: Proxy de interceptación desarrollado por el proyecto OWASP.
  • BurpSuite: Sin lugar a duda es el proxy más utilizado.

OWASP ZAP proxy
ZAP es el proxy de interceptación del proyecto OWASP (https://www.zaproxy.org/), se distribuye mediante licencia open source. Dispone de capacidades de interceptación HTTP/HTTPS, posee módulos de automatización de tareas y un Marketplace con sistema de plugins. Además, tiene un scanner automático de vulnerabilidades web que nos ayudan en la localización de ciertas vulnerabilidades.

En esencia, ZAP es lo que se conoce como un "proxy de interceptación". Se interpone entre el navegador web del usuario que realiza las pruebas de auditoría y el propio aplicativo web que estamos auditando. De esta manera el auditor puede interceptar e inspeccionar los mensajes enviados entre el navegador y la aplicación web, modificar el contenido si es necesario y luego reenviar esos paquetes al destino.

Uso
Al iniciar ZAP podremos ver que es un proxy de interceptación con distintas secciones:
  • 1.- Barra de menu: proporciona acceso a muchas de las herramientas automáticas y manuales.
  • 2.- Barra de herramientas: incluye botones que brindan fácil acceso a las funciones más utilizadas.
  • 3.- Esquema de árbol: muestra el árbol de sitios y el árbol de scripts.
  • 4.- Ventana del área de trabajo: muestra solicitudes, respuestas y guiones y le permite editarlos.
  • 5.- Ventana de información: muestra detalles de las herramientas automáticas y manuales.
  • 6.- Pie de página: muestra un resumen de las alertas encontradas y el estado de las principales herramientas automatizadas.

Para poder establecer ZAP como proxy tendremos que comprobar, y en caso que lo deseemos configurar, las direcciones IP y el puerto en el que escucha el servidor proxy (Podemos iniciar varios proxies sobre el mismo ZAP siempre que se configuren en distinto socket).

Una vez configuradas la dirección IP y puerto en las que presta servicio el proxy, habrá que indicar a nuestro navegador web que utilice dicho proxy para conectarse a internet.

Interceptación de peticiones HTTP
Una vez configurado nuestro navegador web para indicarle que utilice nuestro ZAProxy para realizar cualquier comunicación, todas las peticiones y respuestas HTTP/HTTPS pasarán a través del proxy y quedarán registradas en el historial.

Recordad de la sección anterior, que la manera que tienen estos proxies de interceptación de poder interceptar y modificar peticiones de tipo HTTPS es presentar su propio certificado autofirmado en el navegador para poder descifrar esta comunicación y poder registrar y manipular las peticiones. Dado que es un certificado que nuestro navegador no conoce nos presenta una ventana de warning en la que deberemos aceptar la conexión. En caso contrario el navegador no permitirá utilizar nuestro proxy.

Por eso este tipo de Técnica "Man in the Middle" no se puede realizar mediante el protocolo HTTPS sobre un navegador que no controlemos nosotros.

Esta ventana de "warning" aparecerá en nuestro navegador siempre que intentemos acceder a una nueva URL a través de nuestro proxy ZAP dado que no reconoce la entidad certificadora. Si queremos evitar que aparezca este mensaje cada vez que utilizamos el proxy podemos instalar la CA del proxy (que es la que va a firmar los certificados) en nuestro navegador como una entidad de confianza.

Una vez se acepta el riesgo asociado al certificado veremos como en el historial se recoge toda la comunicación establecida entre el navegador y el aplicativo web.

En caso de querer modificar las peticiones o las respuestas HTTP hay que forzar la interceptación mediante el botón habilitado para ello. Una vez habilitada el propio proxy para la comunicación y la presenta al auditor en un formato adecuado para que pueda modificar cualquiera de sus componentes.

Burp Suite proxy
Proxy de interceptación de la compañía PortSwigger (https://portswigger.net/burp), se distribuye en dos versiones. Una gratuita que incorpora todas las opciones menos las funcionalidades del escáner automático. Y otra modalidad de pago que proporciona la funcionalidad del escáner. Además, incorpora un sistema de plugins que pueden ser instalados para aumentar las capacidades del proxy (algunos plugins sólo están disponibles para la versión de pago).

Podéis utilizar la versión Community (gratuíta) para realizar pruebas básicas, las limitaciones más importantes que presenta son las siguientes.

  • No se puede guardar la sesión, de tal manera que el historial de peticiones y respuestas HTTP se perderá al cerrar BurpSuite.
  • No se puede utilizar la funcionalidad del escáner automático de BurpSuite.
  • No se pueden utilizar muchos de los plugins ya que dependen de la versión Pro de BurpSuite.
  • La funcionalidad de repetición de peticiones HTTP "Repeater" establece un retardo en la versión Community lo incrementa la cantidad de tiempo necesario para realizar un ataque por esta vía.

También podéis utilizar un a versión Trial de la versión Pro en caso de querer comprobar las características más importantes del producto.

Uso
Al iniciar la herramienta se comprueba que disponemos de varias opciones. Una de ellas es la pestaña de "Proxy", en la que podremos comprobar y configurar todas las opciones disponibles para utilizar BurpSuite como Servidor Proxy.

Además, BurpSuite integra un navegador web tipo Chromium el cual no comprueba la validez del certificado del proxy además de deshabilitar todas las protecciones de seguridad en este navegador. El uso de este proxy embebido simplifica toda la tarea de configuración del navegador del auditor que puede centrarse en realizar la auditoría sobre el aplicativo sin estar preocupado en si cierto ataque o vulnerabilidad no está teniendo éxito por alguna medida de protección del navegador.

Para poder iniciar este proxy simplemente habrá que invocarlo desde la pestaña "Proxy" y en la sección intercept disponemos de un botón que nos inicia el proxy.

Interceptación de peticiones HTTP
Dada la facilidad que nos ofrece BurpSuite para iniciar el navegador web chromium nos permite empezar a navegar sobre el aplicativo a auditar de una forma rápida. Todas las peticiones y respuestas HTTP/HTTPS pasarán a través del proxy y quedarán registradas en el historial.

A diferencia de lo que sucedía con ZAP, si estamos utilizando el propio Chromium, iniciado desde BurpSuite, no recibiremos ningún error del certificado, en caso de que interconectemos otro navegador web para que utilice nuestro proxy BurpSuite (al igual que hacíamos en el apartado de ZAProxy) en ese caso si obtendremos un error en el certificado y será necesario seleccionar la opción "Aceptar el riesgo" o incluso instalar la CA de BurpSuite en el navegador para que la reconozca como una entidad certificadora de confianza.

En caso de querer modificar las peticiones o las respuestas HTTP hay que forzar la interceptación habilitando la opción "Intercept" de la pestaña "Proxy" en BurpSuite. Una vez habilitada el propio proxy para la comunicación y la presenta al auditor en un formato adecuado para que pueda modificar cualquiera de sus componentes.

Otra de las funcionalidades de BurpSuite es que dispone de una función llamada inspector que agrupa todos los datos de las peticiones y las respuesta en secciones (parámetros, cabeceras, etc) os recomiendo siempre que tengáis que modificar o inyectar datos en la petición realizarlo desde la ventana del inspector debido a que si necesitáis introducir algún carácter especial, el propio injector lo edita en la  petición con la codificación necesaria para poder enviar este tipo de caracteres a través de la petición HTTP (lo codifica en formato URL).

Automatización de conexiones a servidores web con BurpSuite
En ciertas pruebas que realizaremos a lo largo de una auditoría web tendremos que enviar una misma petición varias veces, incluso modificando algún dato de la propia petición. El uso de esta casuística es muy común en este tipo de pruebas:

  • Ataques de fuerza bruta sobre la autenticación.
  • Intento de acceso a un recurso mediante su identificador.
  • Prueba de payloads.
  • Averiguación de usuarios.

El propio proxy de BurpSuite nos proporciona ciertas funcionalidades que nos permitan automatizar este tipo de tareas. De esta manera no es necesario depender de ninguna otra herramienta externa y toda la configuración queda autocontenida en el propio proxy.

A continuación se muestran las opciones de automatización más utilizadas en BurpSuite:

Automatización del envío de peticiones

En ocasiones es necesario enviar una petición múltiples veces modificando únicamente una pequeña porción de información de la petición HTTP. Para estas ocasiones, Burp Suite dispone de dos funcionalidades que nos ayudan en este tipo de tareas.

  • Repeater: Burp Repeater es una herramienta disponible en Burp Suite proxy que permite manipular y reemitir manualmente solicitudes HTTP individuales y analizar las respuestas de la aplicación. Puede enviar una solicitud a Repeater desde cualquier lugar dentro de Burp, modificar la solicitud y remitirla una y otra vez. Esta opción nos permite automatizar en cierta medida el proceso de enviar una petición cuando queremos probar varios datos de entrada, de esta manera no es necesario acceder a la funcionalidad que deseamos probar a través del navegador cada vez que queramos modificar un input en la petición.
  • Intruder: Burp Intruder está diseñado específicamente para automatizar el envío de peticiones HTTP de manera totalmente desatendida. Intruder le permite configurar en que parte de la petición HTTP insertará el código o dato necesario para realizar la tarea. Normalmente el tipo de información a sustituir se puede precargar en base a una lista de datos o se pueden utilizar las opciones de generación de datos (cadenas numéricas o strings). Burp intruder recogerá la lista de datos a sustituir en la petición HTTP e iterará sobre la lista utilizando cada uno de los datos suministrados para enviar una petición HTTP y registrar la respuesta devuelta por el aplicativo para poder comprobar si en la respuesta hemos conseguido el resultado esperado.

Automatización de autenticación del protocolo HTTP
Burp Suite dispone de varios ajustes que permiten configurar Burp para realizar automáticamente la autenticación de la plataforma en los servidores web de destino.

Se pueden configurar diferentes tipos de autenticación y credenciales para hosts individuales. Los tipos de autenticación admitidos son: Autenticación básica, NTLMv1 y NTLMv2. Los campos de dominio y nombre de host solo se utilizan para la autenticación NTLM.

La opción "Solicitar credenciales en caso de error de la plataforma" permite que Burp muestre una ventana emergente interactiva cada vez que se encuentra una error de autenticación para que el auditor pueda introducir las credenciales manualmente.

El acceso a esta configuración se encuentra en la pestaña "User options" de BurpSuite apartado "Connections/Plattform authentication".

Automatización mediante macros y/o gestor de sesiones
Además de las opciones vistas anteriormente, BurpSuite dispone de herramientas más avanzadas de automatización que permiten automatizar tareas mediante la programación de secuencias tipo "Macro".

Por otro lado también dispone de una funcionalidad de "gestión de sesiones" que permiten a Burp Suite gestionar distintas tareas y procedimientos relacionados con la gestión de sesiones como realizar la autenticación de un usuario en un formulario de autenticación web, recoger un token o un segundo factor de autenticación y utilizarlo, y otra serie de casuísticas.

Normalmente estos dos componentes van de la mano dado que la funcionalidad de gestión de sesiones se apoya en la generación de macros para automatizar estas tareas.