14.3.08

Instalación y configuración de SNORT en sistemas basados en Debian


SNORT es un sistema open source de detección de intrusos (IDS) y un sistema de prevención de intrusos (IPS) capaz de realizar análisis en tiempo real de tráfico en redes IP. Actualmente se encuentra desarrollo por parte de Sourcefire.

SNORT
realiza análisis de portocolos y es usado habitualmente para boquear o detectar gran variedad de ataques y pruebas como buffer overflows, escaneos de puertos, ataques a aplicaciones web, intentos de OS fingerpirnting, etc.

Este manual, es una adaptación del documento "11 step guide to build a Debian based Intrusion
Detection Sensor (IDS) with Snort 2.4.5 or Snort 2.6"
que se puede encontrar en www.snort.org

Solución basada en Snort+MySQL+PHP+BASE+Apache-SSL.
Se ha utilizado una versión estable Debian 2.6.

Instalamos todos los paquetes necesarios para esta guía:

# apt-get update
# apt-get install ssh
# apt-get install apache-ssl apache-common libapache-mod-php4 \
mysql-server mysql-common mysql-client php4-mysql \
libnet1 libnet1-dev libpcre3 libpcre3-dev autoconf automake1.9 \
libpcap0.8 libpcap0.8-dev libmysqlclient15-dev \
php4-gd php4-pear libphp-adodb vim gcc make \
php4-cli libtool libssl-dev gcc-4.1 g++

Al instlar el apache-ssl nos pedirá los parámetros para configurar el certificado que usará.

A continuación se nos sugiere instalar el firewall lokkit por su sencillez. Obviamos este paso.

Descargamos e instalamos SNORT:

Seguir Leyendo...

Instalamos en este caso la versión 2.8.0.1 (28 de Noviembre de 2007)
La última versión estable a día 12 de Marzo es 2.8.0.2 (19 de Febrero de 2008) y la podemos descargar desde: http://www.snort.org/dl/current/snort-2.8.0.2.tar.gz


# cd /usr/local/src
# wget http://snort.org/dl/old/snort-2.8.0.1.tar.gz
# tar xvzf snort-2.8.0.1.tar.gz
# cd snort-2.8.0.1
# ./configure --with-mysql --enable-dynamicplugin
# make
# make install


Instalamos y configuramos las reglas:
Las reglas VRT (Sourcefire Vulnerability Research Team), son las reglas que desarrolla el equipo de soporte de SNORT. Hay tres tipos de reglas VRT que podremos encontrar en el portal www.snort.org.


  1. Reglas para suscriptores. Es decir, de pago. Permanentemente actualizado.

  2. Reglas para usuarios registrados (basta con crearse una cuenta).

  3. Reglas disponibles para usuarios no registrados. Muy desactualizadas.


  • Por otra parte, hay un grupo de reglas de la comunidad. Son reglas que gente de todo el mundo va desarrolando y envía a snort para que las publiquen.

Descargamos las reglas para la versión 2.8 (tipo 2 :)) en http://www.snort.org/pub-bin/downloads.cgi
Nos registramos y generamos un oink-code -> ...64188359a0f2248... para poder descargarlas.
En este caso las hemos descargado en el directorio /root:

# cd /etc/snort
# mv /root/snortrules-snapshot-2.8.0.1.tar.gz .
# tar xvzf snortrules-snapshot-2.8.0.1.tar.gz MD5 -> 61b7818176609e8753bb10b98ae9a820
# cp /usr/local/src/snort-2.8.0.1/etc/*.conf* .
# cp /usr/local/src/snort-2.8.0.1/etc/*.map .


Configuramos /etc/snort/snort.conf:

var RULE_PATH /etc/snort/rules
var HOME_NET 192.168.1.0/24
var EXTERNAL_NET !$HOME_NET


Podemos crear una regla sencilla para comprobar... (ToDo)

Levantamos snort con:

# /usr/local/bin/snort -Dq -u snort -g snort -c /etc/snort/snort.conf

-c fichero de configuración
-D Ejecuta Snort en modo demonio
-g Indica el grupo (elimina privilegios de root a Snort después de terminar su inicialización)
-q Modo Quiet. No muestra información de inicialización ni banner.

Si tenemos apache2 previamente instalado, podemos tener problemas entre el apache2 y apache-ssl


Configuramos MYSQL:
Ponemos password a root de mysql si no lo tiene ya:

# mysqladmin -u root password "password"

Iniciamos mysql:

# mysql -u root -p

Creamos la BD snort:

mysql> create database snort;

Creamos un usuario "snort" en la BD y le asignamos permisos:

mysql> grant CREATE, INSERT, SELECT, DELETE, UPDATE on snort.* to snort@localhost;

Le asignamos un password.

mysql> SET PASSWORD FOR snort@localhost=PASSWORD('password');


Ejecutamos el script que creará las tablas de la BD snort:

# cd /usr/local/src/snort-2.8.0.1/schemas
# mysql -u root -p <>


Configuramos snort para que utilice mysql:
Editamos /etc/snort/snort.conf y buscamos, descomentamos y configuramos la linea:

output database: log, mysql, user=snort password=mipass dbname=snort host=localhost


Reiniciamos snort

# kill -9 pid

Hacemos un escaneo a la máquina con nmap por ej. y comprobamos que ha guardado algún evento con:

# mysql -u root -p -D snort -e "select count(*) from event"


Configuramos apache-ssl:
Si tenemos apache2 instalado, deberemos eliminarlo del arranque.
Para ésto, podemos poner:

# update-rc.d -f apache2 remove


Editamos /etc/apache-ssl/httpd.conf
Buscamos y descomentamos:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps


Editamos /etc/php4/apache/php.ini y descomentamos:

extension=mysql.so


Reiniciamos apache:

/etc/init.d/apache-ssl restart


Instalamos BASE (Basic Analysis and Security Engine. Front-end web para analizar alertas del snort):

# cd /var/www
# rm index.html (opcional)
# wget http://internap.dl.sourceforge.net/sourceforge/secureideas/base-1.2.5.tar.gz
# tar xvzf base-1.2.5.tar.gz
# mv base-1.2.5 base
# chmod 777 base


Abrimos un navegador y escribimos en la barra de direcciones https://[ip_servidor]/base
Pulsamos continue, elegimos idioma y ponemos como path del adodb -> /usr/share/php/adodb
Pulsamos "continue".

Introducimos los siguientes parámetros:

Database Name: snort
Database Host: localhost
Database Port: (en blanco para puerto por defecto)
Database User Name: snort
Database Password: pass


Pulsamos "continue":

Introducimos usuario -> root y su contraseña, y nada más (tampoco marco el check).

Pulsamos "continue":
Pulsamos sobre el botón "create baseag" y nos informa de si se ha creado todo correctamente.
Pulsamos "Ir al paso 5"

Y ya lo tenemos funcionando...


Cambiamos permisos al directorio base:

# chmod 755 /var/www/base


Para que funcionen las gráficas:
Cambiamos el siguiente enlace:

# rm /etc/alternatives/php
# ln -s /usr/bin/php4 /etc/alternatives/php


Ejecutamos:

# pear config-set preferred_state alpha

Editamos /etc/php4/cli/php.ini y descomentamos:

extension=gd.so


Ejecutamos:

# pear install Image_Color
# pear install Image_Canvas
# pear install Image_Graph

Reiniciamos apache-ssl.

Barnyard (programa para procesar logs de eventos de forma unificada, mejora el rendimiento de snort y proporciona tolerancia a fallos en caso de caída de la BBDD)
En este caso no lo instalamos.

Pasando del banyard

Configuramos actualizaciones de las reglas:
Descargamos e instalamos oinkmaster para que haga actualizaciones automáticas de las reglas:

# cd /usr/local/src
# wget http://internap.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster-2.0.tar.gz
# tar xvzf oinkmaster-2.0.tar.gz
# cd oinkmaster-2.0
# cp oinkmaster.pl /usr/local/bin
# mkdir /usr/local/etc
# cp oinkmaster.conf /usr/local/etc


Editamos /usr/local/etc/oinkmaster.conf y nos vamos a la linea:

#Example for Snort-current...

Y descomentamos la siguiente linea:

url = http://www.snort.org/pub-bin/oinkmaster.cgi/oinkcode/filename

Sustituimos [b]oinkcode[/b] por uno válido: ...64188359a0f22...

A continuación hacemos:

# mkdir /tmp/oinktest
# /usr/local/bin/oinkmaster.pl -o /tmp/oinktest

Si todo va bien nos descargará más reglas, las desempaquetará e instalará...

Podemos añadir una copia de seguridad de las reglas antes de instalarlas con la opción -b (sin probar)

# mkdir /tmp/OINKBACK por ej
# /usr/local/bin/oinkmaster.pl -o /tmp/oinktest -b /tmp/OINKBACK

Ésto, hará una copia de las reglas en OINKBACK antes de instalar las nuevas.

Creamos el script de inicio de SNORT:
Creamos y editamos /etc/init.d/snort
Añadimos al fichero lo siguiente:

#!/bin/bash
/sbin/ifconfig eth0 up
/usr/local/bin/snort -Dq -u snort -g snort -c /etc/snort/snort.conf -i eth1


Lo hacemos ejecutable:

#chmod +x /etc/init.d/snort-barn

Utilizamos update-rc.d will para crear los enlaces en los directorios rc?.d:
#update-rc.d snort defaults 95

Reiniciamos y comprobamos que todo funciona correctamente

FINE