Muchas organizaciones cuentan con dispositivos de seguridad para filtrar URL o sitios que ayudan a prevenir y proteger que sus usuarios se expongan a páginas maliciosas con paquetes de exploits y para cumplir con las políticas de la organización.
En este artículo presentaré una prueba de concepto (PoC, Proof of Concept) de HoneyProxy para mostrar la modificación de peticiones y respuestas tanto del cliente y servidor, así como su ejecución con diferentes opciones que permiten a los investigadores de seguridad poder analizar el tráfico e interactuar con sitios maliciosos o malware. Además, de forma particular mostraré en la PoC cómo observar el tráfico, modificar la URL en la solicitud del cliente, el encabezado de respuesta del servidor y respuestas del servidor para mostrar imágenes en el mismo servidor o en uno remoto. Esto puede ser utilizado para analizar el tráfico de red, identificar equipos infectados con malware o interactuar con el malware durante un análisis dinámico.
A continuación, se muestra el proceso y flujo al visitar una página web:
- Solicitud: el usuario abre el navegador y teclea la dirección URL del sitio. Se resuelve el nombre de dominio y el navegador web del cliente genera una solicitud empleando el método GET del protocolo HTTP. Durante este proceso se envían otros campos dentro de la solicitud como el equipo y agente de usuario.
- Respuesta: el servidor procesa la solicitud del cliente y responde con un código de estado 200 (Ok), indicando que la solicitud del cliente se completó con éxito. Además, se envía la fecha y hora, servidor y longitud del contenido por mencionar algunos.
Figura 1. Visita a página web (de Sergio Anduin Tovar Balderas)
Un proxy es intermediario entre un cliente y un servidor, su funcionamiento es el siguiente:
- El cliente envía una solicitud al servidor
- El Proxy recibe la solicitud del cliente, la procesa y envía la solicitud al servidor
- El servidor procesa la solicitud y responde
- El Proxy recibe la respuesta del servidor, la procesa y envía la repuesta al cliente
Figura 2. Proxy (de Sergio Anduin Tovar Balderas)
El proxy, al interceptar las conexiones que hace un cliente a un servidor, permite mejorar el rendimiento de sitios web (caché) o proporcionar control de acceso al permitir o bloquear cierto tipo de tráfico de red por mencionar ejemplos. Principalmente existen los proxy de envío (forward), inverso (reverse) y transparente (transparent), y pueden tener otras características como autenticación, filtrado por dirección IP o contenido, listas negras, entre otras, y diversas aplicaciones en su uso.
HoneyProxy
HoneyProxy es un proxy de hombre en el medio (mitm, man-in-the-middle) ligero que permite la inspección y análisis de tráfico HTTP(S) en tiempo real. HoneyProxy cuenta con diferentes opciones que son útiles durante una revisión de seguridad a una aplicación web o de un dispositivo móvil. También posibilitan modificar las solicitudes o respuestas para examinar el tráfico de red durante el análisis dinámico de malware. En la publicación Implementación de HoneyProxy del Proyecto Honeynet UNAM se presentaron las características, el funcionamiento e implementación de HoneyProxy.
HoneyProxy tiene diferentes modos de operación (regular, transparente, etcétera), el modo determinará si el cliente necesita realizar alguna configuración. Cuando se ejecuta HoneyProxy utiliza las opciones preestablecidas o las que se encuentran el archivo de configuración (default.conf). Cuando el cliente realiza una solicitud a un sitio web, la solicitud es recibida por HoneyProxy y procesada para enviarla al servidor. En este punto, la solicitud puede ser modificada antes de su envío (solicitud modificada). Posteriormente el servidor recibe, procesa y genera una respuesta ante la solicitud del cliente. HoneyProxy recibe la respuesta y también puede ser modificada antes de su envío al cliente (respuesta modificada). Durante este proceso HoneyProxy emplea las bibliotecas para su funcionamiento, utiliza los programas (scripts), registra el tráfico y los sitios en las bitácoras, inicia la interfaz web de HoneyProxy para observar las solicitudes y respuestas y generar reportes.
Figura 3. Panorama general de funcionalidad (de Sergio Anduin Tovar Balderas)
Prueba de concepto de HoneyProxy
En esta PoC se muestra la ejecución de HoneyProxy empleando diferentes opciones. Se presentará desde la forma básica para iniciar el proxy, el uso de diferentes tipos de autenticación y cómo modificar las solicitudes y respuestas.
Para presentar la capacidad para manipular las solicitudes del cliente y las respuestas del servidor que tiene HoneyProxy, se utilizarán las siguientes URL:
- Principal del servidor (http://lucas.honeynet.unam.mx): muestra el contenido de la página principal
- Ruta ip (http://lucas.honeynet.unam.mx/ip): muestra la dirección IP pública del cliente
Las siguientes figuras muestran las páginas que se utilizarán en la prueba de concepto.
Figura 4. Página principal
Al visitar la URL http://lucas.honeynet.unam.mx/ip se muestra la dirección IP pública del cliente.
Figura 5. Página para conocer la dirección IP pública del cliente
En la prueba de concepto se utilizará el puerto 8080 para el proxy, el 8081 para la interfaz web de HoneyProxy y se configurará manualmente el proxy en el navegador web. La configuración del proxy depende del navegador web (Chrome, Explorer, Edge, Opera, Safari, Firefox) que utilicemos. Es posible configurar HoneyProxy en modo transparente para que los usuarios no configuren su navegador.
Para configurar el proxy en Firefox se siguen los siguientes pasos: ingresar al menú, preferencias, avanzado, red, conexión, configurar, seleccionar la configuración manual del proxy, ingresar el nombre de dominio (honeyproxy.honeynet.unam.mx) o dirección IP (172.16.16.108) y puerto (8080).
Figura 6. Configuración de un proxy en Firefox
Para iniciar HoneyProxy es necesario ejecutarlo a través de Python, si no se especifican opciones a través de la línea de comandos, emplea los valores preestablecidos. El proxy se encuentra en el puerto 8080 y la interfaz web en el puerto 8081, ambos sin autenticación (autenticación anónima).
Figura 7. Ejecución básica de HoneyProxy (autenticación anónima)
Esta forma de ejecución activa la autenticación en la interfaz web de HoneyProxy y en el proxy. Los datos de acceso para la interfaz web se muestran cuando inicia y para el proxy se permite autenticar con cualquier usuario y contraseña (autenticación no anónima).
Figura 8. HoneyProxy con autenticación no anónima
Se puede especificar el usuario (sean) y contraseña (lucas) en el proxy a través de la opción singleuser.
Figura 9. Autenticación para un usuario
La herramienta htpasswd sirve para crear y manipular un archivo de contraseñas, los archivos de autenticación básica del servidor HTTP Apache. Se crea un archivo de contraseñas con dos usuarios.
Figura 10. Creación de archivo de contraseñas
Es posible utilizar un archivo de contraseñas (autenticacionHoneyProxy) para especificar los múltiples usuarios que se podrán autenticar en el proxy.
Figura 11. Autenticación a través de un archivo de contraseñas
Como se mencionó anteriormente es posible emplear un archivo de configuración con nuestras configuraciones, en la siguiente figura se muestra cómo utilizar el archivo de configuración sean.conf.
Figura 12. Uso de archivo de configuración (sean.conf) personalizado
A continuación, se muestra cómo modificar la solicitud del cliente. En específico, se cambiará la URL http://lucas.honeynet.unam.mx/ip por http://lucas.honeynet.unam.mx. El proceso es el siguiente:
- El cliente envía una solicitud (paso 1) HTTP para obtener (método GET) la página web con URL http://lucas.honeynet.unam.mx/ip.
- HoneyProxy recibe la solicitud, la procesa y modifica (paso 2, solicitud modificada) para enviarla al servidor web y pueda atenderla (respuesta).
- En los pasos 3 y 4 la respuesta del servidor viaja sin ser modificada, contiene la página principal.
Figura 13. Proceso de modificación de la solicitud (de Sergio Anduin Tovar Balderas)
La opción replace permite reemplazar el patrón especificado y el argumento ~q sirve para que el patrón que se busca remplazar concuerde con la solicitud, se remplaza ip por una cadena vacía (quita la palabra ip de la URL).
Figura 14. Ejecución de HoneyProxy para remplazar la URL
Se puede observar que la URL contiene la ruta /ip pero el contenido muestra la página principal.
Figura 15. Navegador web del cliente con ruta /ip y contenido de la página principal
Las siguientes tres pruebas utilizan la opción replace en conjunto con el argumento ~s que permite remplazar el patrón que concuerde con la respuesta (respuesta modificada).
El campo Server del encabezado de respuesta del servidor web contiene información sobre el programa utilizado por el servidor como una descripción del tipo de sistema operativo e información de los módulos instalados.
Figura 16. Encabezado de respuesta del servidor
En esta primera prueba se sustituirá parte del encabezado de respuesta del servidor, en particular "Apache" por "Lucas Server".
Figura 17. HoneyProxy modifica la respuesta del servidor (superior) y la Solicitud del cliente y respuesta del servidor (inferior)
Siguiendo con las pruebas, esta modifica la respuesta del servidor (respuesta modificada) remplazando la imagen phu.png por unam.png.
Figura 18. HoneyProxy remplaza la respuesta del servidor por otra la imagen
Se puede apreciar la imagen original de la página http://lucas.honeynet.unam.mx/ip al inicio de la prueba de concepto.
Figura 19. Navegador web del cliente con respuesta modificada (imagen del mismo servidor)
La última prueba remplaza la imagen phu.png por una URL que apunta a la imagen h-cert-logo.png que se encuentra en un servidor remoto, este remplazo es una respuesta modificada.
Figura 20. HoneyProxy remplaza la respuesta del servidor por otra imagen
Se puede observar que la imagen cambia y se encuentra alojada en otro servidor web.
Figura 21. Navegador web del cliente con respuesta modificada (URL externa)
Conclusiones
HoneyProxy es una herramienta que asiste a los investigadores de seguridad en el análisis de tráfico HTTP(S). Además, permite modificar las solicitudes y respuestas HTTP justo en el momento en el que son recibidas, para enviarlas al servidor durante el estudio de algún malware o aplicación web, mejorando la interacción al hacer más fluida la comunicación. Es posible utilizar programas (scripts) para tareas específicas que requiera el analista, así como especificar las opciones que requiera y guardar los eventos del análisis para mostrarlos como evidencia.
Conoce otras herramientas en nuestra página del Proyecto Honeynet UNAM.
Referencias
- Hils, Maximilian. (2013). HoneyProxy. GitHub. Recuperado el 14 de diciembre de https://github.com/mhils/HoneyProxy
- Tovar Balderas, Sergio Anduin. (diciembre 2017). Implementación de HoneyProxy. Proyecto Honeynet UNAM Chapter. Recuperado el 8 de enero de 2018. http://www.honeynet.unam.mx/es/content/implementacion-de-honeyproxy
- Mozilla. (2018). Recursos y especificaciones de HTTP. Recuperado el 18 de enero de 2018 de https://developer.mozilla.org/es/docs/Web/HTTP/recursos_y_especificaciones
Si quieres saber más, consulta:
- Proyecto Honeynet UNAM
- Glastopf: Honeypot de aplicaciones web – I
- Glastopf: Honeypot de aplicaciones web – II
- Cowrie Honeypot: Ataques de fuerza bruta
- Conpot: Honeypot de Sistemas de Control Industrial
- Implementación del honeyclient Thug
- PoC: Captura de malware con el honeypot dionaea - parte i
- PoC: Captura de malware con el honeypot dionaea - ii
- Implementación de un spampot para la captura de correo electrónico no deseado
- Spampot para captura de correo electrónico no deseado - ii
- Ghost: honeypot para malware que se propaga a través de dispositivos usb - parte i
- Ghost: honeypot para malware que se propaga a través de dispositivos usb - parte ii
- Frameworks para monitoreo, forense y auditoría de tráfico de red – i
- Frameworks para monitoreo, forense y auditoría de tráfico de red-ii (PoC)