Blog

Como montar nuestro IDS (Intrusion Detection System) – Parte I – Instalando Snort

Para ver la serie completa pulsa aquí. Habrá conceptos que se den por obvios ya que están explicados en artículos anteriores.

Buenas a todos! Este es el primer post de una nueva serie dedicada a enseñar de forma practica como podemos montarnos nuestro propio IDS basado en Snort con otras funcionalidades como BASE, que nos va a permitir ver todos los datos de una forma muy gráfica mediante un entorno web, y veremos también como usar Snortby, una aplicación similar a BASE pero mas avanzada para tener control total de nuestra red gracias a nuestro NIDS.

Pero lo primero de todos es explicar que es un IDS, un IPS y demás variantes. IDS son las siglas de Intrusion Detection System, es decir, un sistema de detección de intrusos, que básicamente sirve para detectar un comportamiento anómalo ya sea en la red (En este caso se llaman NIDS ya que son Network Intrusion Detection System), en un host (HIDS de Host Intrusion Detection System) o en una red WiFi (WIDS de WiFi Intrusion Detection System). Este comportamiento anómalo siempre que estemos hablando de un IDS suele basarse en patrones que buscara ya sea en la red, host o red Wifi, donde en caso de coincidencia generara una alarma advirtiendo de un posible ataque.

De forma rápida, el IPS que son las siglas de Intrusion Prevention System, tiene como finalidad anticiparse a los acontecimientos y poder detectar los ataques antes de que lleguen a suceder tomando acciones preventivas, a diferencia del IDS que únicamente avisa cuando algo ya a pasado y a sido detectado. Hay IPS tanto de red, host como WiFi, pero en esta serie únicamente vamos a ver como instalar y configurar un IDS de red basado en Snort.

Y… ¿Que es Snort? Es un sniffer open source construido sobre tcpdump, que nos permite capturar todo el trafico que llega al ordenador donde esta instalado. Una vez tiene todo ese trafico ira parseándolo en búsqueda de posibles coincidencias con los ataques que tiene catalogado Snort en sus reglas (Que se van actualizándose y pueden ser modificadas por cada uno para adaptarlo a sus circunstancias).

Para la instalación yo he utilizado un CentOS 6.4. Un ejemplo típico a nivel empresarial para poder montar esto seria el siguiente escenario:

ips1

 

Donde el IDS/IPS se encuentra a la entrada de la red, pudiendo observar todo el trafico de red mediante el port SPAN del switch de mas alto ‘nivel’ dentro de la organización, de tal forma que sea capaz de avisar/prevenir lo antes posible, aunque sin duda seria recomendable tener también otros IDS en la red interna para evitar posibles ataques desde dentro, pero eso lo veremos mas adelante,

Una vez hemos visto todo esto vamos a ver como instalaríamos el Snort:

Prerequisitos

Actualizar el sistema y reiniciarlo:

yum update -y
reboot

 

Instalamos el repositorio EPEL:

rpm -Uvh http://ftp.uninett.no/linux/epel/6/i386/epel-release-6-8.noarch.rpm

 

Instalamos PCRE, libdnet y otros paquetes necesarios:

yum install libdnet libdnet-devel pcre pcre-devel gcc make flex byacc bison kernel-devel libxml2-devel wget -y

 

Creamos un directorio de Snort para ir guardando el código de los diferentes módulos:

mkdir /usr/local/src/snort
cd /usr/local/src/snort

 

Descargamos e instalamos libpcap:

wget http://www.tcpdump.org/release/libpcap-1.3.0.tar.gz -O libpcap.tar.gz
tar zxvf libpcap.tar.gz
cd libpcap-*
./configure && make && make install
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig -v

 

Descargamos e instalamos DAQ:

cd /usr/local/src/snort
wget http://www.snort.org/dl/snort-current/daq-2.0.0.tar.gz -O daq.tar.gz
tar zxvf daq.tar.gz
cd daq-*
./configure && make && make install
ldconfig -v

 

Creamos un usuario y un grupo para Snort:

groupadd snort
useradd -g snort snort

 

Instalación

Descargamos e instalamos Snort:

cd /usr/local/src/snort
wget http://www.snort.org/dl/snort-current/snort-2.9.4.6.tar.gz -O snort.tar.gz
tar zxvf snort.tar.gz 
cd snort-2*
./configure --prefix /usr/local/snort --enable-sourcefire && make && make install

 

Creamos los links para los ficheros de Snort:

ln -s /usr/local/snort/bin/snort /usr/sbin/snort
ln -s /usr/local/snort/etc /etc/snort

 

Configuramos Snort para que se inicie con el inicio del sistema (Como servicio):

cp rpm/snortd /etc/init.d/
chmod +x /etc/init.d/snortd
cp rpm/snort.sysconfig /etc/sysconfig/snort
chkconfig --add snortd

 

Borramos las siguientes lineas del archivo de inicio del servicio:

vi /etc/init.d/snortd
...
# check if more than one interface is given 
if [ `echo $INTERFACE|wc -w` -gt 2 ]; then
...
else 
 # Run with a single interface (default) 
 daemon /usr/sbin/snort $ALERTMODE $BINARY_LOG $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE $INTERFACE -u $USER -g $GROUP $CONF -l $LOGDIR $PASS_FIRST $BPFFILE $BPF 
fi

 

Comentamos las siguientes lineas del archivo /etc/sysconfig/snort y añadimos / a la variable LOGDIR:

vi /etc/sysconfig/snort
...
LOGDIR=/var/log/snort/
...
#ALERTMODE=fast
...
#BINARY_LOG=1
...

 

Descargamos las reglas de Snort desde http://www.snort.org/snort-rules para lo cual tendremos que registrarnos, y las metemos dentro de /usr/local/src/snort.

You have to register to the site in order to get the free register user rules
or you can pay and get the most update rules as a "Subscriber user"

 

Extraemos las reglas en el nuevo directorio:

cd /usr/local/snort
tar zxvf /usr/local/src/snort/snortrules-snapshot-2*

 

Creamos el directorio para el login de Snort:

mkdir -p /usr/local/snort/var/log
chown snort:snort /usr/local/snort/var/log
ln -s /usr/local/snort/var/log /var/log/snort

 

Creamos los links para las reglas dinámicas y para los directorios:

ln -s /usr/local/snort/lib/snort_dynamicpreprocessor /usr/local/lib/snort_dynamicpreprocessor
ln -s /usr/local/snort/lib/snort_dynamicengine /usr/local/lib/snort_dynamicengine
ln -s /usr/local/snort/lib/snort_dynamicrules /usr/local/lib/snort_dynamicrules

 

Damos permisos a Snort:

chown -R snort:snort /usr/local/snort

 

Comentamos las siguientes lineas de la configuración de Snort y añadimos el output:

vi /usr/local/snort/etc/snort.conf
...
#preprocessor reputation: \
#   memcap 500, \
#   priority whitelist, \
#   nested_ip inner, \
#    whitelist $WHITE_LIST_PATH/white_list.rules, \
#   blacklist $BLACK_LIST_PATH/black_list.rules
...
output unified2: filename snort.log, limit 128
...

 

Creamos el directorio para las reglas dinámicas:

mkdir /usr/local/snort/lib/snort_dynamicrules

 

Copiamos las reglas dinámicas:
– Sistemas i386:

cp /usr/local/snort/so_rules/precompiled/RHEL-6-0/i386/2.9*/*so /usr/local/snort/lib/snort_dynamicrules/

 

– Sistemas x86_64:

cp /usr/local/snort/so_rules/precompiled/RHEL-6-0/x86-64/2.9*/*so /usr/local/snort/lib/snort_dynamicrules/

 

Realizamos el dump de las reglas:

snort -c /usr/local/snort/etc/snort.conf --dump-dynamic-rules=/usr/local/snort/so_rules

 

Habilitamos todas las reglas dinámicas:

vi /usr/local/snort/etc/snort.conf
...
# dynamic library rules
include $SO_RULE_PATH/bad-traffic.rules
include $SO_RULE_PATH/chat.rules
include $SO_RULE_PATH/dos.rules
include $SO_RULE_PATH/exploit.rules
include $SO_RULE_PATH/icmp.rules
include $SO_RULE_PATH/imap.rules
include $SO_RULE_PATH/misc.rules
include $SO_RULE_PATH/multimedia.rules
include $SO_RULE_PATH/netbios.rules
include $SO_RULE_PATH/nntp.rules
include $SO_RULE_PATH/p2p.rules
include $SO_RULE_PATH/smtp.rules
include $SO_RULE_PATH/snmp.rules
include $SO_RULE_PATH/specific-threats.rules
include $SO_RULE_PATH/web-activex.rules
include $SO_RULE_PATH/web-client.rules
include $SO_RULE_PATH/web-iis.rules
include $SO_RULE_PATH/web-misc.rules
...

 

Comprobamos que Snort funciona de forma correcta:

snort -c /usr/local/snort/etc/snort.conf -T

 

Una vez echo esto ya tendríamos nuestro Snort funcionando perfectamente aunque de momento sin ningún tipo de entorno gráfico, por lo que para probarlo y testear un poco con el podríamos realizar el siguiente comando:

snort -c /usr/local/snort/etc/snort.conf -A console

 

Lo cual nos va a permitir ver únicamente las alarmas que genere el Snort por la consola. También podríamos probar a modificar algunas reglas, introducir las nuestras y un sin fin mas de cosas, pero eso sera en el próximo post.
Espero que os haya gustado!

Parte II – Instalando Barnyard

 

Un saludo,
Eduardo – eduardo@highsec.es – @_Hykeos

  1. Jaime
    Jaime04-09-2014

    Hola Eduardo, me parece un post muy interesante y es un tema que me apetece conocer en profundidad, pero veo que te centras demasiado en el como se hace y no en el porqué.Instalas muchos paquetes y cambias muchas configuraciones pero no explicas el porqué de cada una.

    Además echo de menos un “Ir a siguiente”, ya que se hace un poco pesado el tener que buscar el siguiente post por los tags de la página.

    Son solo críticas constructivas a un trabajo muy bueno, de verdad ¡enhorabuena!

    • Eduardo Arriols
      Eduardo Arriols04-20-2014

      Buenas Jaime, muchas gracias por la critica, para los siguientes post tendré en cuenta lo que me comentas 😉

      En cuanto al ir a siguiente ya lo he puesto en todos y lo haré a partir de ahora en los post para que sea mas cómodo.

      Un saludo,
      Eduardo.

  2. Francisco
    Francisco09-29-2014

    Hola Eduardo…voy a seguir estos tutos…a ver si consigo hacer funcionar un snort..porque hasta ahora, me ha sido imposible…te comento si lo consigo

  3. Francisco
    Francisco09-29-2014

    Ok, probado la primera parte y funcionando!!! enhorabuena..he visto muchos tutos…y este uno de los pocos que lo ha hecho funcionar. veremos los siguientes!!!

Leave a Reply

*

    No Twitter Messages