Wireless IDS

Wireless Sniffer: Snort, Snorby, Barnyard2 (Wireless IDS Parte 2)

Objetivo

El objetivo principal es conseguir un Wireless IDS / IPS para una red casera. Para empezar, y probar, implementado en una máquina virtual (Kali linux 2).

En el post anterior se creaba una tarjeta virtual de red (tun/tap) donde se redirigía todo el tráfico wifi capturado y desencriptado. Ahora, usaremos el trío snort + snorby +barnyard2 para implementar el IDS y analizar los resultados con una GUI.

(hay muchos tutoriales en internet para instalar todo esto, una fuente de inspiración ha sido http://digitalcommons.calpoly.edu/cgi/viewcontent.cgi?article=1128&context=cpesp que indica algunos errores, pero son ya obsoletos)

Snort es el conocido IDS, Snorby es el front-end basado en Web y MySQL y Barnyard2 el el que recoge los resultados de snort y los manda a MySQL.

La instalación y configuración es un poco peculiar, así que hay que ir por partes

  1. Instalación de Snorby y configuración
  2. Instalación de Snort y configuración
  3. Instalación de Barnyard2 y configuración
  4. Prueba de Snort + Snorby + Barnyard2 en interface de red local (eth0)
  5. Puesta en marcha del Wireless IDS: Sniff Wifi con airtun-ng / dot11decrytp y el trío Snort + Snorby + Barnyard2

1. Instalación de Snorby y configuración

La web de Snorby indica los pasos para su instalación y configuración: https://github.com/Snorby/snorby

Sin embargo, como siempre, hay particularidades con las dependencias. Tras muchos errores e intentos, los pasos son:

Instalar las dependencias:

apt-get install libmysqlclient-dev postgresql-server-dev-9.4  libpq-dev

Luego nos descargamos los fuentes,

wget https://github.com/Snorby/snorby/archive/master.zip

Seguimos las instrucciones de la web, descomprimir, mover al directorio y ejecutar:

gem install bundler
bundle install

 Para instalar y configurar:

bundle exec rake snorby:setup

Nos muestra error, dado que necesitamos renombrar el archivo de configuración snorby_config.yml

Adicionalmente, tenemos que renombrar el archivo database.yml.example a database.yml y editarlo para indicar el usuario y contraseña de MySQL (root y contraseña vacía en Kali)
Podemos cambiar el password de MySql con lo siguiente (tarda mucho en arrancar mysqld):
$mysqld --skip-grant-table;
$mysql -u root mysql
$mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
$mysq> FLUSH PRIVILEGES;
$mysql> exit
$/etc/init.d/mysql restart

Ahora modificamos el archivo de configuración de la base de datos de snorby con la nueva clave mysql:

Ahora ya podemos ejecutar snorby, para probar, (es necesario que MySQL esté corriendo)

bundle exec rails server -e production

Probamos que funciona todo al conectarnos a http://localhost:3000 con las credenciales snorby@example.com / snorby

2. Instalación de Snort y configuración

Los repositorios de Kali incluyen snort, por tanto basta con instalarlo de la manera habitual (con las reglas por defecto)

apt-get install snort  snort-rules-default

En debian, la instalación es un poco diferente al resto de Linux, se crea un archivo de configuración /etc/snort/snort.debian.conf

No obstante, esto no nos importa mucho, ya que cuando ejecutemos snort, le indicaremos que use el interfaz tap creado para la escucha de los paquetes Wifi desencriptados.

El archivo de configuración por defecto es correcto, hay que asegurarse que la salida de snort es en el formato unified2 (que es lo que interpretará barnyard2), también hay que apuntar el archivo de salida, en este caso snort.log.

NOTA: para la pruebas, es mejor eliminar las opciones nostamp, mpls_event_types y vlan_event_types, dejar sólo lo subrayado, ya que si no no se guardan los pings de las pruebas

Podemos comprobar que snort funciona, ejecutándo snort -i eth0 y haciendo un ping en otra ventana:

Pero no hemos acabado, necesitamos instalar el segundo componente de Snort: daq (Data Acquisition) necesario para el funcionamiento con Branyard2 (si no está provoca un error en relación al archivo daq.h). No queda más remedio que instalarlo según se indica en la web de snort

wget https://snort.org/downloads/snort/daq-2.0.6.tar.gz

Lo extraemos, pero antes necesitamos instalar alguna dependencia para que compile.

apt-get install bison flex

Ahora lo compilamos e instalamos siguiendo las instrucciones ./configure , make, make install

 

3. Instalación de Barnyard2 y configuración

https://github.com/firnsy/barnyard2

Es algo complejo instalar esta herramienta, tras muchos intentos y errores, en Kali 2, puede hacerse:

Descargamos los fuentes:

wget https://github.com/firnsy/barnyard2/archive/master.zip

Lo extraemos, pero antes de seguir, necesitamos instalar alguna dependencia para que compile y además concer el path a las librerías de mysqlclient (en mi caso es Kal de 64 bits)

Primero instalamos las dependencias para la compilación:

apt-get install libtool autoconf

Una vez instalados, en el directorio de Barnyard2, ejecutamos ./autogen.sh

Cuando acabe, antes de compilar, es necesario incluir unos archivos del paquete libdnet (si no, la compilación de Barnyard2 falla con un error por la ausencia de los archivo dnet.h o dnet/sctp.h)
Primero nos descargamos los fuentes:

wget https://github.com/dugsong/libdnet/archive/master.zip

Lo descomprimimos (tenemos en cuenta dónde) y ahora copiamos en el directorio donde tenemos el código de Barnyard2 la carpeta completa include/dnet y los archios .h de la carpeta include, del zip de libdnet que acabamos de descargar y descomprimir:

En mi caso, he ido poniendo cada paquete en un directorio distinto, por tanto copio el directorio completo (cp -R):

Ahora ya podemos seguir con Barnyard2, hay que configurarlo con las opciones de MySQL, y teniendo en cuenta el path a las librerías que antes hemos buscado

./configure --with-mysql --with-mysql-libraries=/usr/lib/x86_64-linux-gnu

Para acabar, make y make install, y tenemos Barnyard instalado.

Para acabar, queda configurar Barnyard con Snort y Snorby

Copiamos el archivo de configuración de Barnyard2 (en nuestro directorio) al /etc/snort/

cp etc/barnyard2.conf /etc/snort/

Y ahora lo editamos, para configurar la base de datos de acuerdo a nuestro objetivo: base de datos de Snorby. Vamos hacia el final del archivo e indicamos nuestros datos: usuario y contraseña de mysql, nombre de la base de datos, host (con localhost no funciona, hay que poner la IP, un nombre para el sensor (da igual)

output database: log, mysql, user=root password=arturo dbname=snorby host=127.0.0.1 sensor_name=kaliCphe

Es necesario un paso más para la correcta ejecución de Barnyard2 con Snort, si ejecutamos ahora Barnyard2 y Snort obtenemos un error:

Tenemos que crear a mano el sidmap, para ello en el directorio /usr/share/oinkmaster ejecutamos el script create-sidmap.pl con las opciones:

 ./create-sidmap.pl /etc/snort/rules > /etc/snort/sid-msg.map

Para finalizar creamos el archivo /var/log/snort/barnyard2.waldo y el directorio /var/log/barnyard2

touch /var/log/snort/barnyard2.waldo
mkdir /var/log/barnyard2

NOTA: algunas correcciones a problemas las he obtenido de http://www.r00tsec.com/2015/06/howto-install-snort-barnyard2-on-ubuntu.html

En este punto está ya todo configurado y preparado para funcionar.

4. Prueba de Snort + Snorby + Barnyard2 en interface de red local (eth0)

Para ejecutar el sistema necesitamos varios pasos en ventanas diferentes:

  1. iniciar el servicio MySQL:
    • /etc/init.d/mysql start
  2. iniciar Snort:
    • snort -c /etc/snort/snort.conf -i eth0
  3. iniciar Barnyard2
    • barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /var/log/snort/barnyard2.waldo
  4. iniciar Snorby (desde su directorio)
    • bundle exec rails server -e production
  5. Navegar a localhost:3000, interface web para snorby
    • Acceder, iniciar el worker (menú administración / Worker Options / start Worker)
    • Probar unos pings o nmap y esperar un poco que snorby vaya capturando y almacenando datos, para ello creamos una regla en el archivo /etc/snort/rules/local.rules
      • alert ip any any > any any ( msg: "ICMP packet detected!"; sid: 1; )

 

Si ejecutamos varios pings / nmap en otra ventana,   Snorby muestra en la web los resultados (tarda un poco…):

5. Puesta en marcha del Wireless IDS: Sniff Wifi con airtun-ng / dot11decrytp y el trío Snort + Snorby + Barnyard2

Llegados hasta aquí, ya se puede ejecutar  y probar el Wireless IDS. Necesitamos primero crear la interfaz virtual tap/tun para capturar los paquetes WiFi desencriptados (en el post anterior) y seguir los pasos del punto 4 anterior, donde la única diferencia es que ejecutaremos snort en el interfaz virtual: snort -c /etc/snort/snort.conf -i at0

Podremos hacer un script que ejecute las distintas ventanas con los pasos, que resumo:

  1. Tarjeta wifi en modo monitor
  2. dejar corriendo una sesión de airodump-ng
  3. ejecutar dot11decrypt o airtun-ng (en este último caso hay que «levantar» el interfaz tap creado)
  4. Reiniciar el Router WiFi para «echar» a todos los clientes y capturar los Handshakes, imprescindibles para capturar los paquetes.
  5. ejecutar el IDS
    • iniciar MySQL
    • iniciar Snort en la tarjeta virtual
    • iniciar Barnyard2
    • iniciar Snorby (podemos abrir el interface web en otro PC o dispositovo)
      • arrancar el Worker

A continuación muestro pantallazos de la WiFi de mi casa, con 3 dispositivos (tablet Android, iPad, y el Portátil donde correl la Máqina Virtual de Kali). Hago unos ping, y además se recoge otro tipo de tráfico (de Akamai, que marca como «severity»)

La interfaz de Snorby muestra tras un rato:

Ya tenemos nuestro Wireless IDS en una Máquina Virtual, la mejora siguiente será dejar un equipo (portátil antiguo o Raspberry Pi o similar) dedicado a esto.

 

2 Comments

  1. Atlas · lunes, 10 abril, 2017 Reply

    Fantastico tutorial!
    habia intentado por dias instalar todo lo que has puesto en distintas distribuciones de linux siguiendo todo tipo de tutoriales, pero no lo habia logrado hasta que di con esta pagina.
    Acabo de realizar los pasos y tengo el IDS ya operativo en una maquina virtual
    Saludos!

  2. Terminator · jueves, 30 noviembre, 2017 Reply

    Me salvaste el semestre amigo…

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.