Buscar en este blog

31.3.07

Intrusion Detection System (IDS) con SUSE y Snort

Los sistemas actuales en los que residen servicios de acceso público, como servidores de correo y hosting, están expuestos a posibles ataques externos a través de Internet.
También ocurre lo mismo en los ordenadores personales, pero cuando se trata de sistemas críticos, es una buena idea tener un "perro de guardia" dedicado a husmear el tráfico que entra y sale para intentar detectar posibles ataques.

Estos perros guardianes pueden ser de muchos tipos. Particularmente aquí se explican los IDS (sistemas de detección de intrusiones).

Los IDS se suelen implementar dentro de las redes locales, como sistemas autónomos a los que se envía "copia" de TODOS los paquetes que recorren la red. También se suelen implemetar en las pasarelas entre redes. Esto es así porque la idea principal es que el sistema no va a dar realmente ningún servicio a los usuarios ni a la red, pero necesita recibir (al menos una copia de) todos los paquetes que pululan por la red. De esta forma, y utilizando filtros específicos y patrones predeterminados para muchos tipos de ataques puede identificar que máquina está siendo atacada.
Si se implementa un un gateway entre dos redes, no se precisará hacer copia de los paquetes para enviarlos al IDS. Basta que "eche un vistazo" al tráfico que está pasando por el gateway.
Pero esto puede llegar a sobrecargar el gateway en redes con mucho tráfico, de forma que una solución superior consiste en tener un sistema dedicado a IDS al que se envía una copia de los paquetes.

Normalmente esto se implementa con una función de los "switch" de red que se conoce como "port mirroring". Activando esta función se consigue que de todas las conexiones que se producen entre dos host cualesquiera de la matriz de interconexión interna del switch hagan un "relay" de esos paquetes hacia uno de los puertos (físicos) que especifiquemos y que será en el que irá conectado el IDS.

En los siguienetes esquemas podemos ver las diferencias.


Un IDS implementados sobre la pasarela de red, lugar por donde pasa todo el tráfico





IDS implementado con PORT-MIRRORING sobre el switch


A continuación se explican los pasos para implementar un IDS de esta segunda forma.
Los pasos para establecer el "port-mirroring" dependerán de cada modelo de switch en particular. Además, esta es una función que no todos los modelos suelen implementar, aunque sí suele estar disponible en los modelos de gama media-alta y profesional.

La computadora utilizada ejecutará GNU/Linux; la distribución SUSE 10 Enterprise.
Los detalles para la instalación del sistema operativo tampoco se verán aquí. Simplemente se trata de una instalación simple con las funciones de red activadas.

El software utilizado para hacer las funciones de IDS es "SNORT". Es de código fuente abierto y uno de los más conocidos. Resulta suficientemente bueno para la mayoría de necesidades.

WIKIPEDIA: Snort es un sniffer de paquetes y un detector de intrusos basado en red (se monitoriza todo un dominio de colisión). Es un software muy flexible que ofrece capacidades de almacenamiento de sus bitácoras tanto en archivos de texto como en bases de datos abiertas como lo es MySQL. Implementa un motor de detección de ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier anomalía previamente definida.

Será interesante esa posibilidad de utilizar una base de datos MySQL para almacenar las alertas de seguridad.

Para el análisis y visualización de las alertas se utilizarán dos front-ends: ACID y BASE. Son interfaces web para el análisis de las alertas.

-=RECETA=-:

Instalando suse 10 ......

Paquetes necesarios:

  • snort: Viene compilado con la opción “--with-mysql” de forma que no hace falta el paquete “snort-mysql”
  • mysql
  • mysql-client
  • php5
  • php5-mysql
  • apache2
  • apache2-mod_php5


Arrancar servicios al inicio (comando parecido al conocido "update-rc.d" de Debian)

insserv apache

insserv mysql

insserv snort



Configurar MySQL

Cambiar contaseña 'root:

mysqladmin -u root password NUEVAPASS

Crear una bbdd para snort

mysql -u root -p

create database snort;

Crear un usuario con acceso total a esa base de datos

grant all on snort.* to snort@localhost identified by 'PASSWORD';

flush privileges;

Insertar las tablas desde el esquema que hay en: “/usr/share/doc/packages/snort/schemas”

mysql -u snort -p snort < /usr/share/doc/packages/snort/schemas/create_mysql


Configurar SNORT:

Modificar:

/etc/snort/snort.conf

var HOME_NET [192.168.0.0/24,xxxxxxxxxxx/xx] #ESTO AL GUSTO DEL CONSUMIDOR

Configurar las ips de los servidores dns, smtp.....

(outputs-mysql para que almacene el log en una bd MySQL. Buscar alrededor de la linea 570)

Utilizar para la linea que esta comentada (descomentándola claro):

output database:log, mysql, user=snort password=snort dbname=snort......


Personalizar las reglas:

Comentar los includes de ****.rule

/etc/sysconfig/snort

SNORT_ACTIVATE=”yes”

SNORT_PROMISC=”yes”

Personalizar las reglas:



De esta forma, SNORT analiza el tráfico y almacena lo que le parece reseñable, pero necesitamos alguna herramienta, a poder ser gráfica, en la que se nos muestren los resultados y podamos filtrar toda esa información.

Dos Front-ends probados: ACIDLAB y BASE


INSTALACIÓN DE ACIDLAB


Descargar “acidlab” y descomprimirlo en “htdocs”

AcidLab utiliza una base de datos mysql para él. En vez de crearla, con otro usuario/contraseña y demás, aprovecharemos la que tenemos para snort añadiendole las tablas que necesita.

mysql -u snort -p snort < /srv/www/htdocs/acid/create_acid_tbls_mysql.sql

Editar “./acid_conf.php”

Configurar las dos conexiones a bases de datos mysql que aparecen entre las lineas 30 y 45 aproximadamente.

Instalar AdoDB. Son unas librerias php que deben colocarse en el mismo directorio que acidlab

descargarlo de: adodb.sourceforge.net


tar xvfz ado.....tgz

cp -a adodb /srv/www/htdocs/acid


Editar “/srv/www/htdocs/acid/acid_conf.php”

Linea 12: $Dblib_path =” ./adodb” //mejor poner la ruta entera, pero asi ya va



Reiniciar los servicios: snort, mysql, apache

Probarlo todo: hacer un escaneo de puertos desde otra ip y mirar en “http://localhost/acid

DEBEN SALIR VARIAS ALERTAS YA AHÍ


Instalación de “oinkmaster”: Es un script que se conecta a la web de reglas de snort y las actualiza con las ultimas versiones. Las que vienen instaladas son las originales de cuando se empaquetó la aplicación.

Ir a Http://oinkmaster.sourceforge.net/

Descargar

decomprimir

copiar:

oinkmaster.conf --> /etc

oinkmaster.pl -->/usr/bin



Registrarse en snort.conf


User Name: tururu
Password: tururu

Recoger código de activación.

Editar “/etc/oinkmaster.conf”

url = “descomentar lo de la versión 2.4 e introducir el código de activación

y lo mismo en la de “Community Rules”


Comando para actualizar lista de reblas: hay que ponerlo en el crontab

oinkmaster.pl -o /etc/snort/rules/ 2>&1 | logger -t oinkmaster


NOTA: acid no pide usuario ni contraseña ni nada. SE DEBE poner una autentificación http.


BASE – OTRO VISOR DE ALERTAS


wget http://belnet.dl.sourceforge.net/sourceforge/secureideas/base-1.2.6.tar.gz

Descomprimir y meter la carpeta “base” en “htdocs”


cp /srv/www/htdocs/base/base_conf.php.dist /srv/www/htdocs/base/base_conf.php

Descargar “adodb” y ponerlo dentro de la carpeta “base” también


Editar ese archivo (base_conf.php):


(aprox. Linea 44): $BASE_urlpath = '/base'

(aprox. Linea 66): $Dblib_path='./adodb'

Configurar las bases de datos.

Una es la propia de snort, la otra que viene son las tablas extra que metimos en la base de datos de snort con el “acid”, de forma que hay que crearlas/añadirlas con las herramientas del otro paquete.

Necesita la extensión: php5-db


Se necesita “pear”

Instalar extensiones de PEAR:

pear5 channel-update (LISTA DE EXTENSIONES DISPONIBLES EN EL SERVIDOR

pear5 install Image_Color (INSTALACIONES VARIAS...)

pear5 install Image_Canvas

pear5 install Image_Graph


Tiene traducción al español. Viene incluida. Solo hay que cambiar la opción del archivo de configuración de “base”.

Último detalle:

Cambiar en el “php.ini” (/etc/php5/apache2/php.ini)

“error_reporting” debe quedar como: error_reporting E_ALL & ~E_NOTICE


ACTUALIZACIÓN IMPORTANTE:


Hay documentado por la red un error en esta configuración. Se da en ocasiones que "SNORT" pierde la conexión con la base de datos de forma permanente, de forma que se dejan de registrar alertas y es como si el sistema se parase ya que deja de realizar sus funciones.
Para evitarlo, añadir las siguientes lineas al archivo de configuración de MySQL ("/etc/my.cnf") en la sección "[mysqld]":

[mysqld]

[...]
wait_timeout = 604800
interactive_timeout = 604800
[...]