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. 

No hay comentarios:

Publicar un comentario