Instalación de un IDS con Snort. Parte I
En este nuevo artículo se estrena nuestro compañero de SVT Security Services, Juanjo 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.
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.
- 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
- 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
- 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
- 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
- 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
- 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
y nos tiene que aparecer lo siguiente:
Href1: https://es.wikipedia.org/wiki/Sistema_de_detecci%C3%B3n_de_intrusos
Juanjo Martínez.