Inicio arrow Artículos arrow Seguridad arrow Sistema de detección de intrusos con Snort
Menú Principal
Lo más leído
Consigue Firefox
Usuarios
957 registrados
1 hoy
1 esta semana
58 este mes
Último: czar...
Formulario de acceso



... Regenerar clave
... Registro
Sistema de detección de intrusos con Snort Imprimir E-Mail
sábado, 28 de abril de 2007

Un IDS (Intrusion Detection System) es una herramienta que se engloba dentro de las aplicaciones de seguridad y que trata de monitorizar eventos sospechosos ocurridos en un sistema informático determinado. Dichos eventos tendrían como finalidad el compromiso de la seguridad del sistema auditado, lo cual puede evitarse si el sistema de detacción funciona adecuadamente y está bien configurado. Snort es un sniffer de paquetes de red que se adapta a la perfección a la definición de un IDS. 


Escenario

Implementaremos un entorno IDS basado en el software Snort, un sistema de mensajes de funcionamiento y alertas que utilizará MySQL para su almacenamiento y consulta y un sistema basado en el programa BASE (Basic Analysis and Security Engine) que nos permitirá analizar gráficamente los eventos procedentes del software Snort.


Instalación del software

Si bien podemos descargar y compilar todo el software necesario, cualquiera de las distribuciones linux actuales disponen de paquetes precompilados que proveerán a nuestro sistema de todo lo necesario para el correcto funcionamiento de todo nuestro sistema IDS. Daremos igualmente por hecho que disponemos ya de una instalación completa de MySQL y un servidor web bien configurado (por ejemplo, Apache). A continuación se apuntan los distintos paquetes y sus versiones disponibles en el momento de escritura de este artículo:

  • snort-2.6.1.4
  • snortrules-pr-2.4
  • snort-mysql-2.6.1.4
  • base-1.3.5
  • libpcap-0.9.4
  • pcre-6.6-1 (Perl Compatible Regular Expressions)
  • php-gd-5.1.6
  • adodb-494 (ADOdb Database Abstraction Library for PHP)

Comenzaremos por la instalación de Snort desde cualquier herramienta de paquetería automática (tipo yum o apt-get) que hará por nosotros el trabajo de descarga de binarios y de resolución de dependencias:

[root@annie ~]# yum install snort snort-mysql php-gd

Este comando dejará instalado el paquete base de Snort, el soporte para MySQL y las librerías (si no están ya instaladas) libpcap y libpcre.

Si queremos tener un control mayor sobre la instalación o las opciones de compilación, tendremos que descargar el programa de la página oficial (www.snort.org) y compilarlo he instalarlo "a mano" (teniendo en cuenta la instalación de las diferentes dependencias tal que libpcappcre):

[root@annie ~]# ./configure --with-mysql
[root@annie ~]# make
[root@annie ~]# make install

Seguidamente descargaremos e instalaremos las reglas (de la página oficial www.snort.org):

[root@annie /]# cd /etc/snort/
[root@annie snort]# wget http://www.snort.org/pub-bin/downloads.cgi/ Download/vrt_pr/snortrules-pr-2.4.tar.gz
[...]
[root@annie snort]# tar -xvzf snortrules-pr-2.4.tar.gz

El siguiente paso será la descarga e instalación del programa BASE (secureideas.sourceforge.net) y la herramienta ADOdb (adodb.sourceforge.net):

[root@annie snort]# cd /var/www
[root@annie www]# wget http://belnet.dl.sourceforge.net/sourceforge/adodb/adodb494.tgz
[...]
[root@annie www]# tar -xzvf adodb494.tgz
[root@annie www]# rm adodb494.tgz
[root@annie snort]# cd /var/www/html/
[root@annie html]# wget http://dfn.dl.sourceforge.net/sourceforge/ secureideas/base-1.3.5.tar.gz
[...]
[root@annie html]# tar -zxvf base-1.3.5.tar.gz
[root@annie html]# mv base-1.3.5 base
[root@annie html]# rm base-1.3.5.tar.gz

Nótese que para la instalación de los dos programas se sigue la estructura de directorios de una instalación de Apache bajo Fedora Core/Red Hat (/var/www/) y que dicha estructura puede variar dependiendo de la distribución.


Configuración de Snort

En primer lugar, vamos a modificar el fichero principal de configuración de Snort (/etc/snort/snort.conf) en lo que se refiere a las órdenes siguientes (si no existen ya, las crearemos tal cual):

var HOME_NET 10.0.0.0/24 (siguiendo la notación de prefijos CIDR)
var EXTERNAL_NET !$HOME_NET
var RULE_PATH /etc/snort/rules
output database: log, mysql, user=snort password=[pass] dbname=snort host=localhost

Básicamente lo que hacemos con este conjunto de líneas es adaptar el programa Snort a nuestra red local (10.0.0.0/24) y no filtrar tráfico que no pertenezca a dicha red (!$HOME_NET). Con RULE_PATH establecemos el directorio donde hemos almacenado las reglas y con output database indicamos la cadena de conexión al servidor de MySQL para la escritura de mensajes. Para no hacer uso del usuario root, crearemos igualmente el grupo y el usuario snort para utilizarlo posteriormente en tareas de acceso y administración:

[root@annie snort]# groupadd snort
[root@annie snort]# useradd -g snort snort

Para ejecutar Snort bastará con teclear lo siguiente en una consola de administración y comprobar que todo arranca sin errores (una vez hayamos visto que todo está correcto, podemos añador la opción -D para correr Snort como demonio):

[root@annie ~]# /usr/sbin/snort -c /etc/snort/snort.conf -i eth0 -g snort [-D]
[...]
        --== Initialization Complete ==--

   ,,_     -*> Snort! <*-
  o"  )~   Version 2.6.1.1 (Build 30)
   ''''    By Martin Roesch & The Snort Team: http://www.snort.org/team.html
           (C) Copyright 1998-2006 Sourcefire Inc., et al.

Si queremos arrancar Snort con el inicio del sistema, bien podemos utilizar los scripts del paquete precompilado (por ejemplo /etc/init.d/snortd en Fedora Core) o añadir una línea con la orden anterior al fichero /etc/rc.local. Se recomienda utilizar ésta última opción o repasar detenidamente el script que se instala junto al paquete, pues puede interesarnos arrancar Snort con opciones distintas a las mostradas (por ejemplo, el script de inicio por defecto de Fedora Core no atiende a la existencia de un usuario llamado snort).

Obviamente, basta con mirar por encima el fichero de configuración snort.conf para percatarse de que las opciones de personalización son mucho más extensas de lo que hemos explicado aquí. Si bien el programa es perfectamente funcional dejando las opciones del fichero por defecto, no estaría de más leerse las páginas del manual y aprender algo más a cerca del uso de los preprocesadores (que permiten una extensión de la funcionalidad de Snort al permitir el acceso a los paquetes antes de que éstos sean procesados por el motor de detección), los plugins de salida y la propia personalización de las reglas.


Creación de la base de datos en MySQL

Crearemos a continuación las tablas necesarias dentro de MySQL, las cuales permitirán la consulta de toda la información proporcionada por Snort. Como hemos dicho anteriormente, se supone MySQL ya instalado y dadas de alta las contraseñas de administración. En el punto anterior, también hemos creado un usuario y un grupo específicos (snort) para acceder a la información e interactuar con el IDS:

[root@annie snort]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21233 to server version: 5.0.27-log

mysql> create database snort;
Query OK, 1 row affected (0.03 sec)
mysql> grant INSERT,SELECT on root.* to snort@localhost;
Query OK, 0 rows affected (0.05 sec)
mysql> SET PASSWORD FOR snort@localhost=PASSWORD('[pass]');
Query OK, 0 rows affected (0.02 sec)
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE on snort.* to snort;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye

Un vez creada la tabla y dado acceso al usuario, usaremos el script create_mysql para completar la estructura de la tabla snort. Dicho script se encuentra en la rama de instalación del programa Snort o en la rama de documentación del mismo (por ejempo, en la instalación del paquete rpm de Fedora Core, el script se sitúa en /usr/share/doc/snort-x.x.x/create_mysql):

[root@annie snort]# mysql -u root -p < /usr/share/doc/snort-2.6.1.1/create_mysql snort

Para comprobar que todo se ha creado de forma correcta, ejecutaremos las órdenes siguientes dentro del intérprete de MySQL:

[root@annie snort]# mysql -u root -p
Enter password:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| info23             |
| database001        |
| database002        |
| mysql              |
| snort              |
| test               |
+--------------------+
6 rows in set (0.01 sec)

mysql> use snort

Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_snort  |
+------------------+
| data             |
| detail           |
| encoding         |
| event            |
| icmphdr          |
| iphdr            |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
+------------------+
16 rows in set (0.00 sec)

mysql> exit;
Bye

Podemos observar claramente cómo la base de datos llamada snort aparece en el listado de la consola y nos fijaremos también en la estructura de la misma, creada por el script en el paso anterior.


Configuración del entorno BASE

Atenderemos ahora a la configuración del programa BASE. Como hemos dicho antes, damos por hecho que un servidor de páginas web está correctamente instalado y funcionando. El fichero principal de configuración de BASE es base_conf.php. Dicho fichero se puede encontrar con el nombre base_conf.php.dist en el directorio raíz de la instalación, así que lo renombraremos quitando la extensión .dist y lo editaremos para cambiar algunos parámetros y ajustarlos a nuestras necesidades. A continuación se escriben las líneas básicas a cambiar (o a incluir), sin perjuicio de que el lector cambie cualquier otra que se adapte bien a sus necesidades:

$BASE_urlpath = '/base';

$DBlib_path = '/var/www/adodb/';
$DBtype = 'mysql';

$alert_dbname   = 'snort';
$alert_host     = 'localhost';
$alert_port     = '';
$alert_user     = 'snort';
$alert_password = '[pass]';

Aunque las opciones modificadas no necesitan demasiada explicación, cada una de las mismas viene bien documentada en el fichero de ejemplo, así que remitiremos al mismo para la búsqueda de cualquier tipo de información.

Si todo ha quedado bien configurado, estaremos en condiciones de introducir la ruta de BASE en la barra de direcciones de un navegador (por ejemplo http://localhost/base) y obtener una pantalla similar a la siguiente:

Para terminar la configuración, es necesaria la creación de una serie de tablas que den funcionalidad al programa BASE. Esto se hace pulsando sobre el link Setup page de la pantalla anterior y seguidamente sobre el botón Create BASE AG de la nueva pantalla. Así quedará instalado el programa por completo.


Comprobar la configuración

A continuación, vamos a abrir una consola con el usuario root y procederemos a comprobar que todo funciona correctamente. En primer lugar, será necesario comprobar que todos los servicios que hacen falta están corriendo:

[root@annie snort]# ps -ef|grep snort && ps -ef|grep httpd && ps -ef|grep mysqld
root   9409    1 3 15:39 ? 00:00:04 /usr/sbin/snort
root  25569    1 0 13:56 ? 00:00:00 /usr/sbin/httpd
root   2341    1 0 Apr16 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql  2374 2341 0 Apr16 ? 01:28:51 /usr/libexec/mysqld

Ahora es el momento de monitorizar los eventos y ver si Snort funciona bien. La forma más sencilla de hacer esto es dejar una consola abierta con el fichero de mensajes del IDS y ejecutar alguna herramienta de escaneo de puertos y vulnerabilidades que nos permita ver las respuestas de Snort, como pudiera ser Nessus (www.nessus.org), un potente programa para auditoría de seguridad.

Veamos la respuesta de Snort a un escaneo de puertos desde el exterior:

[**] [122:1:0] (portscan) TCP Portscan [**]
04/28-00:42:02.268085 89.118.45.26 -> 10.10.0.67
PROTO255 TTL:0 TOS:0x0 ID:0 IpLen:20 DgmLen:162 DF

O a un ataque directo contra el servidor de FTP:

[**] [1:1748:8] FTP command overflow attempt [**]
[Classification: Generic Protocol Command Decode] [Priority: 3]
04/28-00:41:56.376196 89.118.45.26:22294 -> 10.10.0.67:21
TCP TTL:53 TOS:0x0 ID:28973 IpLen:20 DgmLen:142
***AP*** Seq: 0xB1B71F2D  Ack: 0xCF3F3CB8  Win: 0xFB04  TcpLen: 20


Comentario[s]
Snort en Fedora core 6
Escrito por Joroba el 2007-11-24 03:44:35
Estoy instalando Snort en Fedora core 6, pero al ejecutarlo con la siguiente instrucción: 
[root@Joroba snort]# /usr/sbin/snort -c /etc/snort/snort.conf -i eth0 -g snort 
 
Aparece el siguiente error: 
 
ERROR: ERROR /etc/snort/rules/web-misc.rules Line 452 => unable to parse pcre regex "fn=Eyed{4}_d{2}.log/Rmsi" 
Fatal Error, Quitting.. 
 
Si pudieran ayudarme a corregir este error os lo agradeceria.nullnull

Sólo los usuarios registrados pueden escribir comentarios.
Por favor, valídate o regístrate.

Powered by AkoComment 2.0!

 
< Anterior   Siguiente >