Integración de SecurityOnion y Mikrotik

Security Onion, tal como indica su documentación, es una plataforma libre y opensource desarrollada «por defensores para defensores». Básicamente es un NIDS (Network Intrusion Detection System) que busca la integración de diversas herramientas opensource para lograr un mayor control sobre lo que sucede en una red informática.

En este artículo voy a explicar cómo usar packet sniffer de Mikrotik RouterOS para enviar los paquetes hacia SecurityOnion, así cómo también instalar un conversor del protocolo de encapsulamiento TZSP (TaZmen Sniffer Protocol) a PCAP para que estos puedan ser tomados por Suricata.

Al momento de escribir este artículo, la última versión disponible de SecurityOnion es la 2.4.30 y se puede instalar desde una iso o actualizar una instalación previa con el comando soup.

En este caso, no voy a dar detalles de la instalación y configuración de SecurityOnion, ya que la documentación está muy bien explicada y detallada; aunque sí voy a ir haciendo referencia a la documentación en ciertos términos. También voy a aclarar que mi instalación es de tipo STANDALONE y mi linux box está conectado a un puerto del Mikrotik (192.168.0.1/24) y este le brinda una IP (192.168.0.10/24).

Comenzar a sniffear la red:

Para habilitar packet sniffer en RouterOS, utilizando winbox ir a Tools -> Packet Sniffer [Apply] [Start]:

En la solapa Filter se pueden definir filtros para excluir ciertas interfaces por ejemplo. Un caso práctico sería si sólo quiero analizar el tráfico de mi DMZ y no de todo el tráfico que pase por el equipo.

También es posible ser más específico en el tráfico que se quiere sniffear, creando reglas en el Mangle del Firewall. Así mismo, lo veremos en otro post ya que por ahora lo vamos a hacer general; lo cual ya es bastante y muy buen punto de partida.

Retomando la configuración, ya dejamos el Mikrotik enviando datos al SecurityOnion; ahora tenemos que poder recibir esos datos, desencapsularlos y reenviarlos a la interfaz donde escucha Suricata.

Habilitar el Firewall de SecurityOnion:

Packet Sniffer retransmite los paquetes a un puerto UDP (definido en Tools -> Packet Sniffer), el default es 37008 y será el que habilitemos en la interfaz web de SecurityOnion. La configuración del firewall de este appliance es diferente a un firewall convencional, eso está explicado acá.

Para ello ir a Administration -> Configuration y de lado derecho, arriba, habilitar la opción Show all configuration settings, including advanced settings:

Luego, ir a Firewall -> hostgroups -> customhostgroup0 y setear el valor con 192.168.0.1 la ip del router. En Firewall -> portgroups -> customportgroup0 -> udp, setear el valor 37008.

Por último, tenemos que habilitar la regla que «permita recibir en el puerto UDP 37008 todo lo que venga de 192.168.0.1»; Firewall -> role -> standalone -> chain -> DOCKER-USER -> hostgroups -> customhostgroup0 -> portgroups y setear el valor customportgroup0 y también hacer lo mismo para el chain INPUT: Firewall -> role -> standalone -> chain -> INPUT -> hostgroups -> customhostgroup0 -> portgroups y setear el valor customportgroup0

Desencapsular y retransmitir:

Cómo los paquetes que envía Packet Sniffer no son legibles por Suricata, es necesario hacer uso de la herramienta tzsp2pcap para desencapsular y tcpreplay para volver a transmitir los paquetes a la misma interfaz del SecurityOnion.

tcpreplay se instala vía repositorio de paquetes, pero tzsp2pcap no. Para usarlo es necesario clonar el repositorio y compilarlo; en un terminal ssh de SecurityOnion, mandale tecla:

#Habilitar el repositorio de paquetes EPEL
sudo dnf install epel-release
#Instalar Development Tools para obtener librerias y compilador de C
sudo dnf groupinstall "Development Tools"
#Instalar tcpreplay
sudo dnf install tcpreplay
#Clonar y compilar la librería libpcap que utiliza tzsp2pcap
#Asumiendo que el directorio de trabajo es /home/asd/
cd /home/asd
git clone https://github.com/the-tcpdump-group/libpcap.git
cd libpcap
./autogen.sh
./configure
make
sudo make install
#Luego, ya podemos compilar tzsp2pcap
cd ..
git clone https://github.com/thefloweringash/tzsp2pcap
cd tzsp2pcap
./configure
make

Si todo ha ido bien, en el directorio /home/asd/tzsp2pcap veremos el binario con los atributos de ejecución

Es hora de hacer una prueba para ello, en la consola ejecutamos tzsp2pcap y le enviamos lo paquetes PCAP a tcpreplay para que este los envíe a la interfaz donde escucha suricata.

#El binario corre en bucle, la opción -i hace referencia a la interfaz donde escucha suricata, notar el signo - al final.
./tzsp2pcap -vv -f | /usr/bin/tcpreplay --topspeed -i bond0 -

En el stdout veremos:

Y en la sección Alerts de SecurityOnion, comenzaremos a recibir alertas:

Por último, me gustaría contarte cómo configurar el comando anterior para que se corra como un servicio en linux y así no tener que ejecutarlo manualmente cada vez y que al reinicio también se active de forma automática.
Para esto, creamos un archivo en /etc/systemd/system y le agregamos los datos del servicio cómo te muestro a continuación:

nano /etc/systemd/system/tzsp2pcap.service

Copiar y pegar:

[Unit]
Description=Tazmen protocol to pcap converter
After=network.target
Requires=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=3
ExecStart=/bin/sh -c "/home/asd/tzsp2pcap/tzsp2pcap -vv -f | /usr/bin/tcpreplay --topspeed -i bond0 -"

[Install]
WantedBy=multi-user.target

Salimos con [Ctrl] + [x] y guardamos los cambios. Luego, activar el servicio y habilitarlo para inicio automático:

systemctl start tzsp2pcap.service
systemctl enable tzsp2pcap.service

Conclusión:

Con una infraestructura de red basada en Mikrotik, logramos visibilidad de la red a través de SecurityOnion utilizando Packet Sniffer. Detallando la instalación y configuración necesaria tanto en el Mikrotik como en SecurityOnion para lograr la integración con tzsp2pcap y tcpreplay.