El requerimiento
Para un cliente con el que estuve trabajando recientemente, era necesario interceptar datos en una red. Ciertas acciones deben ser tomadas después de aplicar la lógica de negocios en los datos interceptados.
El enfoque
Después de evaluar otras herramientas, pensamos que tendríamos un pico en MITMProxy, un proxy man-in-the-middle para HTTP y HTTPS con una interfaz de consola interactiva. Proporciona varios modos de proxying como:
- Regular
- Proxy transparente √
- Proxy inverso
- Proxy Upstream
Estábamos buscando configurar un proxy transparente ya que teníamos control sobre los dispositivos conectados a la red, por lo que la configuración de los certificados en ellos no sería un problema.
La puesta en marcha
Tengo una Mac con MacOS HighSierra y un dispositivo de prueba de Android conectado a la misma red Wi-Fi . Tengo MITMProxy instalado usando Brew ,los binarios preconstruidos también se pueden descargar desde su página de lanzamientos .
mitmproxy usa el filtro de paquete pf para implementar el modo transparente. En OSX está integrado en versiones desde OSX Lion. Esto significa que mitmproxy no admite el modo transparente para versiones anteriores de OSX.
Instalación de certificados en el dispositivo
MITMProxy admite HTTPS y HTTP al instalar sus certificados personalizados en los dispositivos del cliente. Inicie el proxy en modo básico ejecutando
mitmproxy --host
Podrá ver la consola interactiva. Ahora actualice la configuración de Wi-Fi -> Seleccionar red -> Configuración avanzada -> Configuración de proxy.Agregue la dirección IP del host como proxy.
En la visita del navegador del dispositivo mitm.it
, seleccione la plataforma correspondiente y siga las instrucciones proporcionadas. El proceso es bastante directo.
Configurando el modo Proxy Transparente
Una vez que tengamos el certificado mitmproxy instalado en el dispositivo. Simplemente complete los siguientes pasos para habilitarlo:
- Habilitar reenvío de IP
sudo sysctl - w net . inet . ip . reenvío = 1
2. Actualice la configuración de pfctl para redirigir el tráfico en los puertos 80y 443 a la instancia de mitmproxy que se ejecuta en el puerto 8080 . Suponiendo que su interfaz de red es en0
agregar la siguiente configuración a un archivo llamado pf.conf
rdr en en0 inet proto tcp a cualquier puerto {80, 443} -> 127.0.0.1 puerto 8080
Las reglas de rdr en pf.conf anteriores se aplican solo al tráfico entrante. Ellos NO redirigir el tráfico procedente de la caja de correr PF sí.
Ejecute el siguiente comando para actualizar las reglas y habilitar pfctl
sudo pfctl - f pf . conf sudo pfctl -e
3. Configure sudoers para permitir que mitmproxy acceda a pfctl. Edite el archivo / etc / sudoers en su sistema como root. Esto solo permite la inspección de la tabla de estado, por lo que no debe ser un riesgo de seguridad indebido. Tenga cuidado al agregar la siguiente línea al final del archivo, sobrescribir otras líneas puede hacer que los usuarios pierdan el acceso a sudo :
TODO TODO = NOPASSWD: / sbin / pfctl -s estado
4. Comience mitmproxy.
mitmproxy -T --host
La -T
bandera enciende el modo transparente y el --host
argumento le dice a mitmproxy que use el valor del encabezado Host para la visualización de URL.
5. Finalmente, configure el dispositivo para usar Mac como su puerta de enlace predeterminada para la red. Agregue la dirección IP de Mac como la puerta de enlace predeterminada.
Ahora podrá interceptar y manipular solicitudes desde el dispositivo conectado a la red.
Fuente: Medium.com