viernes, 17 de marzo de 2017

Raspaudit

Hoy voy hablar del que fue mi Trabajo de Fin de Grado: Sistema de auditora de redes corporativas usando software libre sobre una Raspberry Pi. El proyecto está escrito en su mayoría en Python, y está formado por un módulo principal que se ejecuta en la Raspberry y que realiza una serie de análisis en la red y un servidor web Django/Apache que funcionaba en un servidor remoto.

Raspberry

Para realizar los distintos análisis, en la Raspberry se ejecuta un script principal, main.py, que se encarga de enviar la información al servidor y de llamar a los tres scripts que realizan cada uno uno de los análisis: pasivo, puertos-servicios y vulnerabilidades.

El análisis pasivo, tras obtener una dirección IP de la red por medio de DHCP, captura todo el tráfico que recibe sin enviar ningún tráfico a la red. De esta forma se evita activar cualquier alarma que pueda variar la información obtenida. La dificultad de esta parte radica en la falta de información existente, tanto sobre el formato de los paquetes de los protocolos analizados (algunos no eran detectados por Scapy, por lo que se necesitaba leerlos en hexadecimal) como en lo referente a Scapy, el cual tiene una curva de aprendizaje bastante elevada.

Este análisis, está implementado por medio de la potente librería Scapy, que facilita el manejo paquetes con Python. Gracias al tráfico que las máquinas envían a direcciones de broadcast (NetBIOS, SSDP...), se puede obtener informaron de las máquinas como su nombre o su sistema operativo y, en el caso de Windows, también la versión de este. Para comentar más detalladamente el análisis pasivo, escribiré una entrada sobre el tema más adelante.

El segundo análisis realizado es el de puertos y servicios. Partiendo de la lista de máquinas ya detectadas se emplea nmap por medio de la librería python-nmap para analizar los puertos y servicios de los nodos de la red y refinar la información sobre el sistema operativo de estos. Solo se estudian los puertos más comunes (e.g. 80, 443, 137...) y aquellos que se sabe que usan las máquinas por haberlos empleado para enviar tráfico broadcast. Por defecto, se emplea la opción -T0, para reducir las probabilidades de detección.

Finalmente se emplea OpenVAS (un conjunto de herramientas de análisis de vulnerabilidades), junto con la librería openvas.omplib, para analizar los puertos detectados como abiertos por nmap en busca de vulnerabilidades. Los principales retos para conseguir que esta etapa se realizara correctamente se debieron a la falta de documentación de OpenVAS, tanto para la instalación como para el procesado en Python de los resultados obtenidos, y en los limitados recursos de la Raspberry, que hacen necesario iniciar la carga de OpenVAS varios minutos antes de su uso. Por lo tanto, esta se realiza justo antes de empezar el análisis pasivo, dando tiempo más que suficiente para la carga de las librerías de detención de vulnerabilidades, que es lo que más tiempo lleva.

Durante todos los análisis, main.py envía cada cierto tiempo la información al servidor en formato JSON. Durante el último (vulnerabilidades), además de enviar un resumen de los resultados en JSON, se sube también al servidor el informe HTML generado automáticamente por OpenVAS. Aunque en las primeras pruebas este tráfico se enviaba por la propia red a auditar, se decidió después emplear una conexión auxiliar (3G/4G o WiFi) para ello, reduciendo el uso de la red objetivo. En todo caso toda la información se envía cifrada usando HTTPS.

Servidor

El servidor es el que recibe la información de la(s) Raspberries y la muestra de forma gráfica para el usuario. Para recibir la información (en JSON y HTML), dispone de una dirección /upload a donde se conectan las Raspberries. La autenticación de estas se realiza por medio del certificado que llevan instalado, garantizando la seguridad de la comunicación. En cambio, los usuarios finales necesitan un nombre de usuario y una contraseña para acceder. 

La interfaz gráfica ofrecida muestra (de izquierda a derecha):

  • Una lista de los dispositivos (Raspberries) de los que se ha recibido información
  • La lista de redes auditadas para el dispositivo seleccionado
  • Un gráfico de las máquinas detectadas
  • La información de la máquina seleccionada en el gráfico, junto con el enlace al informe de OpenVAS correspondiente en HTML, en caso de estar disponible.

Aplicación web Raspaudit

Conclusiones

En términos generales el proyecto cumplió con lo que me había propuesto. Se realiza un análisis bastante completo de las máquinas con las que se comparte dominio de broadcast y se envía la información a un servidor remoto por medio de una conexión independiente. 

Sin embargo, sí mejoraría la interfaz web, tanto en cuanto a su apariencia (por ahora no es responsive) como en funcionalidades (e.g. mayor opciones para controlar las Raspberries directamente desde la aplicación web). Además, extensiones como la auditora de redes WiFi pueden ser interesantes de cara a obtener más información relevante sobre las redes de una organización. 

jueves, 2 de marzo de 2017

MitM

Se que hay muchísima información sobre ataques man-in-the-middle en Internet. Sin embargo, tener tantos recursos disponibles puede hacer difícil encontrar lo básico para empezar. Con esta idea en mente, hoy quiero resumir las principales herramientas MitM disponibles para Linux y la forma de hacer con ellas un ARP spoofing, capturando el tráfico de la víctima.

Un ataque man-in-the-middle consiste en situarse en medio de la comunicación de dos partes sin que estas lo detecten. En el caso de redes locales (LAN), donde se suele compartir dominio de broadcast con los objetivos, se suele recurrir al envenenamiento de la caché ARP de la víctima o víctimas y de su puerta de enlace o gateway. Así el atacante puede escuchar todo el tráfico entre la víctima o víctimas e Internet

ARP es un protocolo que permite traducir direcciones IP a MAC, permitiendo a los dispositivos identificarse entre ellos a partir de la dirección IP. Este protocolo no tiene ningún tipo de autenticación, por lo que un atacante puede falsificar mensajes ARP (ARP spoofing), haciendo creer a la víctima que es el servidor o puerta de enlace con la que se quiere comunicar. Para poder capturar la respuesta del servidor, también se debe engañar a este o al router a través del cual se accede, siendo en este caso un MitM full-duplex. En caso contrario se considera half-duplex.

De esta forma el tráfico de la víctima pasa por la máquina del atacante, que lo debe reenviar al destinatario real (evitando que la víctima se quede sin conexión). Cabe destacar que, aunque todo el tráfico pase por la máquina del atacante, si la conexión está cifrada entre el servidor y la víctima, tener acceso a ese contenido es prácticamente imposible. Existen sin embargo métodos para sortear este problema, ya sea obligando al objetivo a establecer la conexión cifrada con la máquina atacante (en cuyo caso necesitaríamos que la víctima aceptase nuestro certificado o que su navegador confiase en nuestra autoridad certificadora) o forzando el uso de conexiones no seguras (e.g. SSLStrip).

La herramienta más extendida para MitM probablemente sea Ettercap, que lleva en funcionamiento desde 2001. Aún así existen otras soluciones, como BetterCAP o MITMf que implementan funcionalidades que me hace tenerlas en cuenta. Por ahora solo voy a comentar como hacer ARP spoofing y captura de tráfico con cada una de las herramientas, sin profundizar en otros aspectos o funcionalidades.

Ettercap

Ettercap lleva disponible bastantes años, por lo que muchas distribuciones Linux permiten instalarlo desde los repositorios del sistema. Además es de código abierto y debido a su amplio uso existe una gran cantidad de plugins disponibles para extender sus funcionalidades. Sin embargo estos se escriben en un lenguaje propio de Ettercap, incrementando la curva de aprendizaje.

Para realizar un ARP spoofing se puede emplear el siguiente comando (10.0.1.18 es dirección IP de la víctima y 10.0.1.1 es la de la puerta de enlace o gateway, aunque en este caso no importa el orden):
ettercap -T -M arp:remote /10.0.1.18// /10.0.1.1//
Por defecto, Ettercap solo captura el tráfico entre las direcciones indicadas. Para que capture también aquellos paquetes que tienen otro destino final (i.e. Internet) se debe de usar el modo remote. También se puede realizar el ataque en modo half-duplex (tráfico solo en un sentido) con la opción one-way, evitando así atacar directamente la puerta de enlace o servidor.


Una cuestión a tener en cuenta al realizar este procedimiento con Ettercap es que no activa automáticamente el reenvío de paquetes IP (IP forwarding), por lo que es necesario hacerlo de forma manual para evitar que la víctima se quede sin conexión.


Por defecto, Ettercap muestra todo el tráfico capturado, lo que en mi opinión no es muy útil, ya 
que hace díficil encontrar lo que se pueda estar buscando

Empleando la opción quiet (-q), Ettercap no muestra cada paquete y podemos consultar las conexiones que se están interceptando (Connections list) pulsando la letra c.


Se puede ver que la salida por pantalla de Ettercap no es del todo idónea. En todo caso, siempre se puede guardar la captura con la opción -w y abrirla luego en Wireshark. O también escuchar el tráfico directamente con este mismo programa.

BetterCAP

Con la intención de suplir las carencias de Ettercapevilsocket comenzó el desarrollo de esta herramienta de código abierto. En ciertas distribuciones como Kali Linux esta herramienta puede ser instalada directamente desde los repositorios. En el resto de distribuciones solo necesitamos el entorno RubyGems y seguir los pasos que se indican en la web oficial (en inglés).

Una vez instalada, para capturar el tráfico entre 10.0.1.18 y la puerta de enlace (detectada automáticamente por BetterCAP), solo hay que ejecutar el siguiente comando:
bettercap -T 10.0.1.18 --full-duplex

Por defecto, BetterCAP trabaja en modo half-duplex, para que capture tráfico en ambos sentidos hay que usar la opción --full-duplex. Con esta herramienta no es neceario activar IP forwading ya que lo hace automáticamente por nosotros.

Captura con BetterCAP

En comparación con Ettercap, BetterCAP muestra la información de una manera más resumida y organizada. Es mucho más cómodo que bucear entre toda la información que aparece con Ettercap, y en caso de querer hacer un análisis más exhaustivo del contenido siempre se puede guardar la captura (opción --sniffer-output) y analizarla luego con Wireshark.

Además, BetterCAP también resuelve las direcciones IP, obteniendo así el nombre del dominio junto con el recurso solicitado dentro de este, lo que facilita averiguar que páginas visitó la víctima de un vistazo. Para peticiones HTTPS (cifradas), solo obtenemos el nombre del dominio, pero no el recurso, ya que esa información no se transmite en claro. 

En este caso concreto, no obtenemos el dominio que introdujo la víctima (google.es) sino https://arn09s11-in-f163.1e100.net, que es el resultado de hacer una consulta DNS inversa (e.g. dig -x 172.217.22.163) de la dirección IP de destino. De todas formas, me sigue pareciendo más útil y claro que lo que muestra Ettercap.


MITMf

Lo primero que hay que tener en cuenta con esta herramienta es que, aun usando Kali Linux, la instalación es un poco más compleja en los casos anteriores. Sin embargo, tampoco es difícil, y los pasos a seguir están recogidos aquí (en inglés). Eso sí, la ruta que emplean para el comando source /usr/bin/virtualenvwrapper.sh no es correcta para Kali Linux. Para cualquier distribución, podéis comprobar la ruta del script con el siguiente comando:
find / | grep virtualenvwrapper.sh
Una vez instalado, para realizar un ataque análogo a los anteriores, podemos usar el siguiente comando (10.0.1.23 es dirección de la víctima y 10.0.1.1 es la puerta de enlace o gateway):
./mitmf.py -i eth0 --spoof --arp --target 10.0.1.23 --gateway 10.0.1.1
La información mostrada por MITMf es similar a la de BetterCAP, aunque, al contrario que esta, también trata de identificar el navegador y el sistema operativo de la víctima
Sin embargo, BetterCAP tiene como punto positivo que también muestra conexiones HTTPs y el marcado por colores hace más fácil la lectura de los datos.

Caputura de MITMf que muestra las conexiones de la víctima y realiza fingerprinting básico del navegador y del sistema operativo de la víctima.

Conclusiones

En general, para realizar un ataque MitM simple, cualquiera de las herramientas realiza la tarea correctamente. En cuanto a la información que muestra por defecto, la de BetterCAP es más clara, y MITMf realiza fingerprinting básico del navegador y del sistema operativo de la víctima. Sin embargo, en cualquier caso las capturas se pueden guardar en formato PCAP y ser analizadas más adelante, por lo que tampoco decanta claramente la balanza.

En cuanto a las herramientas que incluye cada una de ellas, Ettercap, posiblemente por su antigüedad, tiene una gran cantidad de plugins disponibles, escritos en un lenguaje específico. Para BetterCAP, los plugins se pueden realizar en cualquier lenguaje, ya que los paquetes se reenvían a ellos, actuando como un proxy. Además, incluye por defecto utilidades para crear conexiones HTTPS suplantando al servidor o para realizar ataques de tipo SSLStrip. Finalmente, MITMf incluye una gran cantidad de plugins: inyección/modificación de tráfico, SSLStrip+, secuestro de sesiones, JavaScript Keylogger...

Por tanto, todas las herramientas proporcionan características básicas similares, y la elección de una u otra debería venir dada por las características avanzadas que se necesiten en cada situación concreta. Para ver una comparativa más extensa entre BetterCAP y MITMf, con comentarios de los creadores de ambas herramientas, podéis consultar este hilo de Reddit (en inglés)