Instalación de un IDS con Snort. Parte I

En este nuevo artículo se estrena nuestro compañero de SVT Security ServicesJuanjo Martínez. Se trata de Instalación de un IDS con Snort. Parte I.

En este “estreno” que realiza para hacking-etico.com, nos va a publicar una “saga” de Snort. Concretamente, en esta primera parte vamos a ver cómo instalar y configurar nuestro IDS Snort, en futuros artículos veremos la actualización automática de reglas con Pulledpork e instalación y configuración de Snorby y Barnyard2.

Pero, antes de nada, ¿Qué es un IDS?, según la WIKIPEDIA “es un programa de detección de accesos no autorizados a un computador o a una red.”, cuyo funcionamiento de estas herramientas se basa en el análisis del tráfico de red, el cual al entrar al analizador es comparado con firmas de ataques conocidos, o comportamientos sospechosos, cómo puede ser el escaneo de puertos, paquetes malformados, etc. El IDS no sólo analiza qué tipo de tráfico es, sino que también revisa el contenido y su comportamiento.

snort_large

Se puede distinguir dos tipos de IDS los HIDS Y NIDS

  • H-IDS (Sistema de detección de intrusiones en el host), que garantiza la seguridad a nivel de host. Cómo puede ser: OSSEC, SAMHAIN
  • N-IDS (Sistema de detección de intrusiones de red), que garantiza la seguridad a nivel de red. Cómo puede ser: SNORT, SURICATA, BRO-IDS.

Hoy por hoy los principales ids opensource más utilizados son Suricata y Snort. La principal ventaja que tiene suricata sobre Snort es que es multihilo, pero para mí Snort tiene una característica que lo hace muy interesante, que es el uso de preprocesadores.

Y os preguntaréis ¿y qué son preprocesadores?, pues son pequeños plugins que sirven para tratar los paquetes para darle forma de manera que se pueda interpretar la información de estos de forma más sencilla y lógica. Una vez reordenados los paquetes, al pasar por el motor de Detección se le aplicarán las Reglas en busca de patrones de ataques, virus, información, etc…

Bueno, ya que tenemos más o menos claro que es un IDS, pasemos a la acción.

Descarguemos Debian http://cdimage.debian.org/debian-cd/8.2.0/i386/iso-cd/debian-mac-8.2.0-i386-netinst.iso y procedamos a su instalación.

Una vez instalado el S.O lo primero que tenemos que hacer es añadir en el fichero sources.list los repositorios de dotdeb GnuPG. Para ello

1.- Editamos el fichero souerces.list

nano /etc/apt/sources.list

2.- añadimos las líneas

deb http://packages.dotdeb.org wheezy all

deb-src http://packages.dotdeb.org wheezy all

3.- Ejecutamos los siguientes comandos.

cd /usr/src && wget http://www.dotdeb.org/dotdeb.gpg

cat dotdeb.gpg | apt-key add –

A continuación procedemos a la instalación de ssh, en este caso vamos a instalar openssh:

      apt-get install openssh-server

Para que Snort funcione correctamente es necesario instalar una serie de herramientas y librerías que no vienen instaladas por defecto cuando instalamos el S.O.

apt-get install libnet1 libnet1-dev libpcre3 libpcre3-dev libtool libssl-dev gcc-4.4 g++ automake gcc make flex bison libmysqlclient-dev gcc automake autoconf binutils make ethtool

A continuación deshabilitamos ”Large Receive Offload” Y ”Generic Receive Offload” en el colector del interfaz:

ethtool -K eth0 gro off

ethtool -K eth0 lro off

Posteriormente se procede a instalar otras librerías de la cuales utiliza SNORT para su funcionamiento y que yo recomiendo su instalación de forma manual, dichas librerías son: DAQ, libpcap, libdnet.

  1. Instalación de libpcap

cd /usr/src

wget http://www.tcpdump.org/release/libpcap-1.4.0.tar.gz

tar -zxvf libpcap-1.4.0.tar.gz

cd libpcap-1.4.0

./configure –prefix=/usr –enable-shared

make

make install

  1. Instalación libdnet.

cd /usr/src && wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz

tar -zxf libdnet-1.12.tgz && cd libdnet-1.12

./configure –prefix=/usr –enable-shared && make && make install

  1. Instalación de DAQ.

wget https://www.snort.org/downloads/snort/daq-2.0.2.tar.gz –no-check-certificate

tar -zxf daq-2.0.2.tar.gz

cd daq-2.0.2

./configure        

make

make install

Una vez terminada la instalación de DAQ, libpcap, libdnet, actualizamos el path de la librería compartida:

echo >> /etc/ld.so.conf /usr/lib

echo >> /etc/ld.so.conf /usr/local/lib && ldconfig

 

Realizados los pasos anteriores podemos proceder a la instalación y configuración de SNORT

  1. Instalación:

cd /usr/src

wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz –no-check-certificate

tar xvfz snort-2.9.7.6.tar.gz

cd snort-2.9.7.6

./configure –enable-sourcefire

make

make install

  1. Creación de directorio y copia de ficheros

mkdir /etc/snort /etc/snort/rules /var/log/snort /usr/local/lib/snort_dynamicrules

mkdir /etc/snort/so_rules /etc/snort/preproc_rules

touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/bylog.waldo /etc/snort/rules/so_rules.rules /etc/snort/snort.stats

cp /usr/src/snort-2.9.7.6/etc/*.conf* /etc/snort

cp /usr/src/snort-2.9.7.6/etc/*.map /etc/snort

cp /usr/src/snort.conf /etc/snort

  1. Ahora creamos el usuario de SNORT Y COPIA DE FICHEROS

groupadd snort

useradd -g snort snort

chown snort:snort /var/log/snort

Ya solo nos queda configurar SNORT y comprobar su funcionamiento

En primer lugar, editamos el fichero de configuración de SNORT   y establecemos las variables de configuración:

nano –c /etc/snort/snort.conf

Línea #45 – ipvar HOME_NET 172.26.12.0/22 – Coloca la red interna que deseas proteger

Línea #48 – ipvar EXTERNAL_NET any – Puedes colocar una red especifica o “any” para cualquier red

Línea #104 – var RULE_PATH ../rules – cambiar ruta por: /etc/snort/rules

Línea #105 – var RULE_PATH ../so_rules – cambiar ruta por: /etc/snort/so_rules

Línea #106 – var RULE_PATH ../preproc_rules – cambiar ruta por: /etc/snort/preproc_rules

Línea #109 – var WHITE_LIST_PATH ../rules – cambiar ruta por: /etc/snort/rules

Línea #110 – var BLACK:LIST_PATH ../rules – cambiar ruta por: /etc/snort/rules

Línea #190 – config pcre_match limit: 3500 – verificar que la línea este descomentada y el valor asignado sea el señalado

Línea #268 – preprocessor frag3_global: max_frags 65536 – verificar que la línea este descomentada y el valor asignado sea el señalado

Línea #276 – preprocessor stream5_global: verificar que estan tal cómo muestro a continuación, si falta lineas añadirlas

preprocessor stream5_global: track_tcp yes, \

   track_udp yes, \

   track_icmp no, \

   track_ip yes, \

   max_tcp 262144, \

   max_udp 131072, \

   max_ip 16384, \

   max_active_responses 2, \

   min_response_seconds 5

Línea #289 – comprobar que existan las siguientes líneas, las que falte se añaden:

preprocessor stream5_udp: timeout 30

preprocessor stream5_ip: timeout 30

Línea #293 – # preprocessor prefmonitor: time 300 file /var/snort/snort.stats pktcnt 10000 – descomentar y cambiar ruta por: /etc/snort/snort.stats

debe quedar asi:

preprocessor perfmonitor: time 300 file /etc/snort/snort.stats pktcnt 10000

Línea #296 – agregar después de “decompress_depth 65535” esto:

max_gzip_mem 104857600

debe quedar asi:

preprocessor http_inspect: global iis_unicode_map unicode.map 1252 compress_depth 65535 max_gzip_mem 104857600

Línea #416 y 419 – opcional para detección de escaneo de puertos o arp spoof) – descomentar

Línea #537 – include classification.config – verificar que la línea esta descomentada

Línea #549 – añadir la siguiente linea si no existiera

include $RULE_PATH/local.rules

y comentar o borrar el resto de reglas

 

Para comprobar el funcionamiento de SNORT, vamos a crear una regla, en primer lugar, editamos el fichero local.rules

nano /etc/snort/rules/local.rules

y añadimos:

alert icmp any any -> $HOME_NET any (msg:”ICMP test”; sid:10000001;)

ahora ejecutamos snort.

/usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0

Y desde otra máquina hacemos ping al equipo en mi caso ping 192.168.5.131

ping y nos tiene que aparecer lo siguiente:

snort-ping

Href1: https://es.wikipedia.org/wiki/Sistema_de_detecci%C3%B3n_de_intrusos

Juanjo Martínez.