snort ids e ips

11
INSTALANDO Y CONFIGURANDO DEBIAN(SQUEEZE)\SNORT IDS E IPS Instalando y configurando Debian(Squeeze )\Snort IDS e IPS (Autor: Andrés Hernández, email: [email protected], creación: 03/08/2013) Este documento es una traducción, corrección y actualización del original “Building a Debian\Snort based IDS Jason Weir – [email protected] – 12/7/2011”. En este documento se mostrara como instalar y configurar Snort 2.9.5.3, Barnyard2-1.13 beta y BASE 1.4.5. *Importante: este documento está dirigido a usuarios que cuenten con experiencia en entornos Linux y tengan conocimiento en instalación, configuración y corrección de errores en MySQL y Apache, esto debido a que no se abordarán dichos temas de manera específica en este documento. ***Se recomienda seguir estrictamente el orden de ejecución de los comandos, como se presentan en este documento*** Contenido: 1. Instalación de los paquetes base 2. Instalación de prerrequisitos para Snort 3. Instalación y configuración de Snort IDS 4. Instalación de pulledpork y reglas (so_rules, preproc_rules y rules) 5. Prueba de Snort y creación de regla básica 6. Configuración de MySQL para Snort 7. Instalación y configuración de barnyard2 8. Configuración de Apache y PHP 9. Instalación y configuración de BASE 10. Configuración Snort IPS Snort IDS 1. Instalación de los paquetes base Se asume que se ha instalado el SO Debian squeeze 6.0.7 previamente y este se encuentra funcionando con un entorno gráfico y una conexión funcional a Internet, mediante la ANDRES HM 1

Upload: andy-sga

Post on 30-Nov-2015

896 views

Category:

Documents


5 download

DESCRIPTION

Instalación y configuración

TRANSCRIPT

Page 1: Snort IDS e IPS

Instalando y configurando Debian(Squeeze)\Snort IDS e IPS(Autor: Andrés Hernández, email: [email protected], creación: 03/08/2013)

Este documento es una traducción, corrección y actualización del original “Building a Debian\Snort based IDS Jason Weir – [email protected] – 12/7/2011”. En este documento se mostrara como instalar y configurar Snort 2.9.5.3, Barnyard2-1.13 beta y BASE 1.4.5.

*Importante: este documento está dirigido a usuarios que cuenten con experiencia en entornos Linux y tengan conocimiento en instalación, configuración y corrección de errores en MySQL y Apache, esto debido a que no se abordarán dichos temas de manera específica en este documento.

***Se recomienda seguir estrictamente el orden de ejecución de los comandos, como se presentan en este documento***

Contenido:

1. Instalación de los paquetes base 2. Instalación de prerrequisitos para Snort 3. Instalación y configuración de Snort IDS4. Instalación de pulledpork y reglas (so_rules, preproc_rules y rules)5. Prueba de Snort y creación de regla básica6. Configuración de MySQL para Snort 7. Instalación y configuración de barnyard2 8. Configuración de Apache y PHP 9. Instalación y configuración de BASE 10. Configuración Snort IPS

Snort IDS

1. Instalación de los paquetes base

Se asume que se ha instalado el SO Debian squeeze 6.0.7 previamente y este se encuentra funcionando con un entorno gráfico y una conexión funcional a Internet, mediante la interfaz eth0, además de contar con los repositorios de su preferencia (sources.list) para la descarga de los paquetes especificados en este documento. (Para este documento la instalación del SO Debian Squeeze 6.0.7 se realizó en una máquina virtual creada en VMware v9.0.2 build-1031769 y se utilizaron los repositorios: deb http://mmc.geofisica.unam.mx/debian/ squeeze main contrib non-free, deb-src http://mmc.geofisica.unam.mx/debian/ squeeze contrib main non-free)

Instalación de SSH:

# apt-get install ssh – Necesitaremos SSH para la conexión a repositorios en Snort y GitHub (Barnyard2).

Andres HM 1

Page 2: Snort IDS e IPS

Instalación de los paquetes base:

# apt-get install apache2 libapache2-mod-php5 libwww-perl mysql-server mysql-common mysql-client php5-mysql libnet1 libnet1-dev libpcre3 libpcre3-dev autoconf libcrypt-ssleay-perl libmysqlclient-dev php5-gd php-pear libphp-adodb php5-cli libtool libssl-dev gcc-4.4 g++ automake gcc make flex bison apache2-doc ca-certificates

2. Instalación de prerrequisitos para Snort

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 de libdnet:

# cd /usr/src# wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz # tar -zxvf libdnet-1.12.tgz# cd libdnet-1.12# ./configure --prefix=/usr --enable-shared # make # make install

Instalación de DAQ:

# apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0 – Prerrequisitos de DAQ# cd /usr/src # wget http://www.snort.org/dl/snort-current/daq-2.0.1.tar.gz # tar -zxvf daq-2.0.1.tar.gz # cd daq-2.0.1 # ./configure # make# make install

Actualizando el path de la librería compartida:

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

Andres HM 2

Page 3: Snort IDS e IPS

3. Instalación y configuración de Snort

Instalación:

# cd /usr/src # wget http://labs.snort.org/snort/2953/snort.conf # wget http://www.snort.org/dl/snort-current/snort-2.9.5.3.tar.gz -O snort-2.9.5.3.tar.gz # tar -zxvf snort-2.9.5.3.tar.gz# cd snort-2.9.5.3 # ./configure --enable-sourcefire # make# make install # mkdir /etc/snort /etc/snort/rules /var/log/snort /var/log/barnyard2 /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# groupadd snort# useradd -g snort snort # chown snort:snort /var/log/snort /var/log/barnyard2 # cp /usr/src/snort-2.9.5.3/etc/*.conf* /etc/snort # cp /usr/src/snort-2.9.5.3/etc/*.map /etc/snort # cp /usr/src/snort.conf /etc/snort

Configuración global:

# nano /etc/snort/snort.conf Editar las siguientes líneas:

Línea #45 - ipvar HOME_NET 172.26.12.0/22 – Coloca la red interna que deseas protegerLínea #48 - ipvar EXTERNAL_NET any – Puedes colocar una red especifica o “any” para cualquier redLí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 #113 - var WHITE_LIST_PATH ../rules – cambiar ruta por: /etc/snort/rulesLínea #114 - var BLACK:LIST_PATH ../rules – cambiar ruta por: /etc/snort/rules Línea #121 - config disable_decode_alerts – verificar que la línea este descomentada Línea #194 - config pcre_match limit: 3500 – verificar que la línea este descomentada y el valor asignado sea el señaladoLínea #268-269 – comentar estas líneas (no son necesarias ya que trabajaremos sobre ipv4)Línea #272 – preprocessor frag3_global: max_frags 65536 - verificar que la línea este descomentada y el valor asignado sea el señaladoLínea #276 – preprocessor stream5_global: – verificar que “track_tcp” tenga como valor asignado “yes”, cambiar: “track_icmp no, \” por “track_icmp yes, \” (si “track_icmp” no se encuentra agregarlo), agregar “track_ip yes, \” y “max_ip 16384, \” - después de esta línea agregar “max_icmp 65536, \”Línea #292 – abajo de esta línea agregar: preprocessor stream5_icmp: timeout 30 y debajo de esta agregar esta línea:Preproccessor stream5_ip: 30

Andres HM 3

Page 4: Snort IDS e IPS

Línea #296 – # preprocessor prefmonitor: time 300 file /var/snort/snort.stats pktcnt 10000 – descomentar y cambiar ruta por: /etc/snort/snort.statsLínea #299 – agregar después de “decompress_depth 65535” esto: max_gzip_mem 104857600 Línea #419 y 422 - (opcional para detección de escaneo de puertos o arp spoof) – descomentarLínea #523 – agregar esta línea: output unified2: filename snort.log, limit 128 (hacer espacio si no hay para agregarla)Línea #535 – include classification.config - verificar que la línea este descomentadaLínea #549-663 (puede variar el número de líneas) – comentar todas las líneas que contengan “include $RULE_PATH” excepto la que contiene “local.rules” Línea #671-673 – descomentar

4. Instalación de pulledpork y reglas

Para mantener nuestras reglas al día usaremos pulledpork.

Instalación de pulledpork:

# cd /usr/src# wget http://pulledpork.googlecode.com/files/pulledpork-0.6.1.tar.gz# tar -zxvf pulledpork-0.6.1.tar.gz # cd pulledpork-0.6.1 # cp pulledpork.pl /usr/local/bin # cd etc/# cp *.conf /etc/snort

Configuración:

# nano /etc/snort/pulledpork.conf

Editar las siguientes líneas:

*Nota: necesitaras darte de alta en la página http://www.snort.org y después de activar tú cuenta deberás solicitar tu Oinkcode.

Línea #20 – Modificar agregando el nombre del paquete de reglas a descargar desde la página de Snort y nuestro oinkcode, siguiendo el ejemplo que se muestra en esa sección.Ej. rule_url=https://www.snort.org/reg-rules/|snortrules-snapshot-2946.tar.gz (este paquete puede ser otro, visitar la página web de Snort para verificar los más actuales) |el_oinkcode_va_aquiLínea #22 – agregar nuestro oinkcode en el área marcadaEj. rule_url=https//www.snort.org/reg-rules/|opensource.gz(esto se queda igual) |el_oinkcode_va_aquiLínea #26 - comentarLínea #71 - cambiar por: rule_path=/etc/snort/rules/snort.rules Línea #86 - cambiar por: local_rules =/etc/snort/rules/local.rules Línea #89 – cambiar por: sid_msg=/etc/snort/sid-msg.map Línea #112 – cambiar por: config_path=/etc/snort/snort.conf Línea #116 – cambiar por: sostub_path=/etc/snort/rules/so_rules.rulesLínea #124 – cambiar por: distro=Debian-Lenny Línea #167 – descomentar y cambiar por: snort_version=2.9.5.3

Andres HM 4

Page 5: Snort IDS e IPS

Línea #171 - descomentar y cambiar por: enablesid=/etc/snort/enablesid.conf Línea #173 - descomentar y cambiar por: disablesid=/etc/snort/disablesid.conf Línea #174 - descomentar y cambiar por: modifysid=/etc/snort/modifysid.conf

# echo pcre:fwsam >> /etc/snort/disablesid.conf - Deshabilitar todo el bloque de reglas fwsam

Iniciar pulledpork # /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -T -l*Ahora puedes ver tus reglas; local.rules y snort.rules en /etc/snort/rules.

Configurando reglas de preprocesador y so_rules

# cd tmp/# tar -zxvf snortrules-snapshot-XXXX.tar.gz – sustituir XXXX por el número de versión marcado que se encuentre en el directorio (este paquete fue descargado previamente por pulledpork)# mv -v preproc_rules/ /etc/snort# mv v so_rules/ /etc/snort# cd rules/# cp *.*¨/etc/snort/rules*Importante: si el paquete de reglas que intentamos descomprimir no se encuentra en del directorio tmp/, tendrá que ser descargado de la página http://www.snort.org, una vez hecho esto se deberán repetir los pasos anteriores ahora desde el directorio en donde se descargó el paquete de reglas.

5. Prueba de Snort y creación de regla básica

Creación de regla de prueba:

# nano /etc/snort/rules/local.rules

Ingresar esta regla simple:

alert icmp any any -> $HOME_NET any (msg:"ICMP ping"; sid:1000000; rev:1;)

Inicio y test de Snort en modo IPS (continuos mode)

# /usr/local/bin/snort -T –c /etc/snort/snort.conf *Al finalizar la ejecución de este comando se mostrara la siguiente leyenda:“Snort successfully validated the configuration!” – esto quiere decir que Snort está bien configurado

# nano /etc/snort/snort.conf*Verificar que la línea 547 sea igual a esto: include $RULE:PATH/local.rules

# /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 *Después de ejecutar este comando abre otra ventana y realiza un ping a cualquier dirección ip que desees, si Snort está funcionando de manera correcta te mostrara algo como esto:

Andres HM 5

Page 6: Snort IDS e IPS

02/09-11:29:43.450236 [**] [1:10000001:0] ICMP ping [**] [Priority: 0] {ICMP} 172.26.12.1 -> 172.26.12.2 02/09-11:29:43.450251 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.2 -> 172.26.12.1 02/09-11:29:44.450949 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.1 -> 172.26.12.2 02/09-11:29:44.450957 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 172.26.12.2 -> 172.26.12.1

Para terminar la ejecución Snort pulsa las teclas: Ctrl+c.

6. Configuración de MySQL para Snort

Creación de la base de datos:

# mysql -u root -p – ingresar password cuando se solicitemysql> create database snort; mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost; mysql> SET PASSWORD FOR snort@localhost=PASSWORD('tupassword'); mysql> exit; Importar la base de datos preconfigurada de Snort:

# cd /usr/src# wget https://github.com/firnsy/barnyard2/archive/v2-1.13.tar.gz# tar –zxvf v2-1.13.tar.gz# mysql -u root -p < /usr/src/barnyard2-2-1.13/schemas/create_mysql snort – ingresar password cuando se solicite# mysql -u root -p – ingresar password cuando se solicitemysql> use snort; mysql> show tables; - con esto debe observar las tablas importadas en la base de datosmysql> exit ;

7. Instalación y configuración de barnyard2 Instalación:

# apt-get install libpcap-dev# apt-get install libtool# cd /usr/src/barnyard2-2-1.13# ./autogen.sh # ./configure --with-mysql # make# make install # mv /usr/local/etc/barnyard2.conf /etc/Snort

Configuración:

# nano /etc/snort/barnyard2.conf - Línea #214- debajo de esta : output alert_fast

Andres HM 6

Page 7: Snort IDS e IPS

Al final del archivo agregar la línea: output database: log, mysql, user=snort password=<mypassword> dbname=snort host=localhost Iniciando barnyard2 y snort: # /usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 & /usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log -w /etc/snort/bylog.waldo

Nuevamente hacemos ping desde consola en otra ventana a una dirección ip.Para verificar que realmente se están guardando los eventos en la base de datos tecleamos: # mysql –u root -p -D snort -e "select count(*) from event" – ingresar password cuando se solicite

8. Configuración de Apache y PHP

Configuración:

# cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled # nano /etc/php5/apache2/php.ini - Línea #517 – cambiar por: error_reporting= E_ALL & ~E_NOTICE # a2enmod ssl # pear config-set preferred_state alpha # pear channel-update pear.php.net # pear install --alldeps Image_Color Image_Canvas Image_Graph # /etc/init.d/apache2 restart

9. Instalación y configuración de BASE Instalación:

# cd /usr/src # wget http://sourceforge.net/projects/secureideas/files/BASE/base-1.4.5/base-1.4.5.tar.gz # tar -zxvf base-1.4.5.tar.gz# cp -r base-1.4.5 /var/www/base # chmod 777 /var/www/base

Configuración:

Abrir en el navegador: https://localhost/base - la dirección ip del servidor apache

1. Click en Continue2. Elegir español e ingresar en “Path to adodb”: /usr/share/php/adodb 3. Click en Continue4. Ingresar Database Name: snort, Database Host: localhost, Database Port: dejar en blanco, Database User Name: snort, Database Password: mypass 5. Click en Continue 6. Llenar el formulario de usuario administrador7. Click en Continue8. Click en "create baseag" 9. Click en Continue to step 5

Andres HM 7

Page 8: Snort IDS e IPS

10. Ahora podemos ver las alertas generadas por Snort de manera ordena y más manejable

Limpiando: # rm /var/www/index.html # chmod 755 /var/www/base # pkill snort && pkill barnyard2# rm -rvf /var/log/snort/* /var/log/barnyard2/* # nano /etc/snort/snort.conf – Línea #548 - agregar: include $RULE_PATH/snort.rules# nano /etc/Snort/Snort.conf - Línea #682-699 - descomentar

*Hasta este punto hemos configurado Snort para que funcione como un IDS (avanzamos a su vez en algunos aspectos de la configuración para IPS), guardando sus eventos en un log y una base de datos haciendo uso de Barnyard2, mostrándolos en un entorno grafico mediante el uso de BASE.

Snort IPS

10. Configuración Snort IPS

Configuración:

# nano /etc/snort/snort.conf – Línea #547 y 548 – comentar# nano /etc/snort/snort.conf – Debajo de la línea #548 – agregar include $RULE_PATH/ips.rules# touch /etc/snort/rules/ips.rules# nano /etc/snort/ips.rulesAgregar la siguiente regla: drop tcp any any -> any 80 (msg:”Bloquea trafico tcp port 80”; sid:2000000; rev:1;)

Agregando iptable:

# iptables -I OUTPUT -p tcp --dport 80 -j NFQUEUE*Para eliminar la iptable usar: iptables --flush

*Nota: podemos crear cualquier regla con su correspondiente iptable.

Inicio y test de Snort IPS (inline mode)

# /usr/local/bin/snort --daq nfq -Q --daq-dir /usr/local/lib/daq --daq-var device=eth0 -c /etc/snort/snort.conf -l /var/log/snort --A full –v

Ahora solo resta navegar en internet en alguna página que utilice el protocolo http y el puerto 80, que en general son la mayoría y veremos como la conexión a dicha página será bloqueada y en la consola de Snort aparecerá la alerta del bloqueo.

Si visualizamos el log alert:

#more /var/log/snort/alert

Andres HM 8

Page 9: Snort IDS e IPS

Podremos observar que nuestra regla de ips esta funcionado y bloquea todo el tráfico tcp por el puerto 80.

Andres HM 9