Instalación de Snort en Debian

De WikiSalud
Revisión a fecha de 15:00 14 oct 2016; Alortiz (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Contenido

Resumen

Configuración y puesta en marcha de un IDS en Debian Jessie con Snort, complementando su funcionalidad con Barnyard2 y PulledPork.

Introducción

La presente guía instala un snort casi listo para entrar en producción según el uso al que se le haya destinado. En cierto momento del procedimiento descrito en esta guía, debe revisar la configuración de IDS con Snort en Debian o IPS con Snort en Debian

La presenta guía es básicamente una traducción de Snort 2.9.8.x on Ubuntu 12, 14, and 15 with Barnyard2, PulledPork, and Snorby, pero he ahorrado muchas explicaciones y tuve razones para no seguir el trabajo con Snorby a la espera de un nuevo lanzamiento

Primeros pasos

Consideramos la idea de trabajar en el directorio /usr/local/src, lo que significa que todas las rutas relativas parten de ese directorio.

Considere que puede usar un servidor externo de postgres o mysql para como almacén para Barnyard.

Considere que el modo promiscuo de la tarjeta de red le permitirá esnifar paquetes en su mismo segmento de broadcast, usualmente un switch (Limitado aún más si este se encuentra configurado con VLAN), así que para capturar tráfico de otros segmentos de la red, debe configurar algo como Port Mirroring o usar algo como un Network Tap.

Instalación de software previo

Instalamos los paquetes de desarrollo y demás librerías que vamos a usar para el proceso de compilación

aptitude install libpcap-dev libpcre3-dev libdumbnet-dev build-essential flex bison zlib1g-dev liblzma-dev openssl libssl-dev autoconf libtool

Los siguientes paquetes sólo son necesarios cuando se piensa configurar a Snort como IPS, ya que son necesarios para activar el módulo NFQ en de DAQ

aptitude install libnfnetlink-dev libnetfilter-queue-dev

Sobre los paquetes para la posterior instalación de Barnyard2, existe una sutil diferencia sobre construirlo con soporte para mysql o postgres (O ambos a la vez) Además, si no se tiene un servidor mysql o postgres externo, será necesario instalar el paquete mysql-server o postgresql respectivamente.

aptitude install libmysqlclient-dev mysql-client 
aptitude install postgresql-client libpq-dev

Procedimiento

DAQ

Empezamos instalando el primer paquete dependencia: DAQ (Data Adquisition library) Obtenemos, configuramos, compilamos e instalamos:

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

./configure
make
make install 
ldconfig

Como una nota, la construcción de los módulos va de la siguiente forma por defecto, y es de lo más interesante a cambiar en las opciones de ./configure si se desea:

Build AFPacket DAQ module.. : yes
Build Dump DAQ module...... : yes
Build IPFW DAQ module...... : yes
Build IPQ DAQ module....... : no
Build NFQ DAQ module....... : no
Build PCAP DAQ module...... : yes
Build netmap DAQ module.... : no

Snort

Obtenemos, configuramos, compilamos e instalamos snort

cd /usr/local/src
wget https://www.snort.org/downloads/snort/snort-2.9.8.0.tar.gz
tar -xzvf snort-2.9.8.0.tar.gz
cd snort-2.9.8.0
./configure --enable-sourcefire
make
make install

La opción --enable-sourcefire habilita las mismas configuraciones tal como la usa la gente de sourcefire, y parece que eso lo hace bastante recomendable en tanto son obviamente ellos los que lo hacen

Primeras configuraciones con snort

  • Creamos los usuarios sin derechos administrativos con los cuales vamos a correr snort.
groupadd snort
useradd snort -r -s /usr/sbin/nologin -c "Snort IDS" -g snort
  • Crea los directorios de snort
mkdir -p /etc/snort/{rules{,/iplists},prepoc_rules,so_rules}
mkdir /usr/local/lib/snort_dynamicrules
  • Crea algunos archivos para almacenar reglas y listas IP
touch /etc/snort/{sid-msg.map,rules/{local.rules,iplists/{black,white}_list.rules}}
  • Existen ficheros de configuración creados durante la compilación, los movemos a su nuevo hogar.
cp /usr/local/src/snort-2.9.8.0/etc/*.{conf*,map,dtd} /etc/snort/
  • Crea los directorios para logging
mkdir -p /var/log/snort/archived_logs
  • Ajusta la propiedade los algunos ficheros y directorios
chown -R snort:snort /etc/snort/ /var/log/snort/ /usr/local/lib/snort_dynamicrules/

Puede revisar que haya realizado bien los pasos anteriores al revisar el directorio con tree

root@snorti:/usr/src# tree /etc/snort/
/etc/snort/
├── attribute_table.dtd
├── classification.config
├── file_magic.conf
├── gen-msg.map
├── prepoc_rules
├── reference.config
├── rules
│   ├── iplists
│   │   ├── black_list.rules
│   │   └── white_list.rules
│   └── local.rules
├── sid-msg.map
├── snort.conf
├── so_rules
├── threshold.conf
└── unicode.map

Instalación de Barnyard2

  • Obtenemos, extraemos, configuramos e instalamos Barnyard
cd /usr/local/src
wget https://github.com/firnsy/barnyard2/archive/7254c24702392288fe6be948f88afb74040f6dc9.tar.gz -O barnyard2-2-1.14-336.tar.gz
tar -xzvf barnyard2-2-1.14-336.tar.gz
cd barnyard2-7254c24702392288fe6be948f88afb74040f6dc9/
./configure --with-mysql --with-mysql-libraries=/usr/lib/`uname -m`-linux-gnu/ --with-postgresql
autoreconf -fvi -I ./m4
ln -s /usr/include/dumbnet.h /usr/include/dnet.h
ldconfig
  • Y ahora entramos a terrenos conocidos
./configure --with-mysql --with-mysql-libraries=/usr/lib/`uname -m`-linux-gnu/ --with-postgresql
make
make install
  • Empezamos la configuración moviendo todos los ficheros a una ubicación compartida con snort:
cp barnyard2-7254c24702392288fe6be948f88afb74040f6dc9/etc/barnyard2.conf /etc/snort/
mkdir /var/log/barnyard2
touch /var/log/snort/barnyard2.waldo
chown -R snort:snort -R /var/log/barnyard2 /var/log/snort/barnyard2.waldo

Configuración

  • Abrimos el fichero de configuaración /etc/snort/barnyard2.conf

Hacia la línea 347 hallamos unos ejemplos de como configurar el acceso a la base de datos, básicamente pueden quedar de esta forma

# Por cierto, ambos pueden perfectamente funcionar al mismo tiempo, el uso de recursos puede hacer que esto no sea la mejor idea a implementar
output database: log, postgresql, dbname=snorti host=192.168.2.3 user=snorti password=snorti
output database: log, mysql, dbname=snorti host=192.168.2.3 user=snorti password=snorti
  • Nos ocupamos de la base de datos a la cual hacemos referencia en el fichero de configuración de barnyard2

El administrador de la base de datos podría crear la base de datos de la siguiente forma:

# En caso de mysql

administrador@bd:~$ mysql -u root -p 
mysql> create database snort;
mysql> grant all privileges on snorto.* to snorto@'%' identified by 'snorto'; 

# En el caso de postgres

root@bd:~# su - postgres
postgres@bd:~$ createuser -DRSP snorto
Ingrese la contraseña para el nuevo rol: 
Ingrésela nuevamente: 
postgres@bd:~$ createdb snorto -O snorto
  • Creamos el esquema según el script que barnyard2 ofrece como usuario que nos han proporcionado:
# MySQL
mysql -h 192.168.2.3 -u snorto -p snorto < /usr/local/src/barnyard2-7254c24702392288fe6be948f88afb74040f6dc9/schemas/create_mysql

# Postgres
psql -h 192.168.2.3 -U snorto snorto -f /usr/local/src/barnyard2-7254c24702392288fe6be948f88afb74040f6dc9/schemas/create_postgresql
  • Configuramos snort para que use unified2, un formato binario en el que le es eficiente escribir, y del cuyos archivos resultantes se servirá barnyard para leer los datos.

Las lineas 521 y 522 del fichero de configuración en snort (/etc/snort/snort.conf) queda de la siguiente forma:

# output unified2: filename merged.log, limit 128, nostamp, mpls_event_types, vlan_event_types
output unified2: filename snort.u2, limit 128

Pulledpork

La última etapa para obtener un IDS funcional son las reglas con las que trabaja. Pulledpork se encargará de obtener las últimas actualizaciones de las reglas de la comunidad, combinarlas con las nuestras y configurar el fichero /etc/snort/sid-msg.map de una manera bastante automatizada.

wget https://github.com/shirkdog/pulledpork/archive/5d3a6b6359bfb09038bb2713bebe9099fbaf4f54.tar.gz
tar xzvf 5d3a6b6359bfb09038bb2713bebe9099fbaf4f54.tar.gz
cd pulledpork-5d3a6b6359bfb09038bb2713bebe9099fbaf4f54/
cp pulledpork.pl /usr/local/bin/
chmod +x /usr/local/bin/pulledpork.pl
cp etc/* /etc/snort/
pulledpork.pl -V

Después de tan ardua instalación, probamos que funcione:

root@snorto:/usr/local/src/pulledpork-72d28b1a1c816509a52bf39c9dbabea98400e6a0# pulledpork.pl -V
PulledPork v0.7.2 - E.Coli in your water bottle!

Configuración

Es altamente recomendable crear una cuenta en http://snort.org para obtener el código Oinkcode que PulledPork necesita para descargar las reglas oficiales. Las listas negras de Talos para uso del preprocesador reputation y las reglas de la comunidad snort son el resto de listas que PulledPork se encargará de integrar en nuestro IDS.

  • Preconfiguramos el fichero al apuntar los archivos a nuestra verdadera ubicación
sed -i 's_/usr/local/etc/_/etc/_g' /etc/snort/pulledpork.conf
  • Luego configuramos de la siguiente forma:
    • Colocar el OinkCode en la línea 19 y 26, en lugar de <oinkcode>. Si no se desea registrar en http://snort.org, habrá que comentar estas líneas.
    • Cambiar en la línea 96: sid_msg_version=1 a sid_msg_version=2
    • Cambiar en la línea 133: distro a distro=Debian-8-0
    • Cambiar la línea 141 para que quede black_list=/etc/snort/rules/iplists/black_list.rules
  • Ejecutamos pulledPork por primera vez, con lo que verificamos la configuración:
pulledpork.pl -E -l -c /etc/snort/pulledpork.conf

Puesta en marcha.

Hasta ahora, tenemos ya todo listo para trabajar, por lo que el paso final es integrarlo al sistema por medio de systemd los unos y crontab el otro.

Para snort, creamos el fichero /lib/systemd/system/snort.service con el siguiente contenido:

[Unit]
Description=Snort NIDS Daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

[Install]
WantedBy=multi-user.target

Lo activamos para que inicie con el sistema y lo iniciamos por esta vez:

systemctl enable snort.service
systemctl start snort.service

Para barnyard, creamos el fichero /lib/systemd/system/barnyard2.service con el siguiente contenido:

[Unit]
Description=Barnyard2 Daemon
After=syslog.target network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/barnyard2 -n -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.u2 -q -w /var/log/snort/barnyard2.waldo -g snort -u snort -D -a /var/log/snort/archived_logs

[Install]
WantedBy=multi-user.target

Activamos e iniciamos:

systemctl enable barnyard2.service
systemctl start barnyard2.service

A PulledPork le colocamos en el crontab para que revise por nuevas reglas a diario.

echo -e '#!/bin/sh\n/usr/local/bin/pulledpork.pl -E -l -c /etc/snort/pulledpork.conf' > /etc/cron.daily/pulledpork

Fuentes

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas