Snort + Base en OpenBSD

Snort es uno de los sistemas de detección de intrusos (IDS) más populares. Base es una de sus múltiples herramientas de análisis básico y OpenBSD es uno de los sistemas operativos más seguros. Haremos una instalación básica para guardar todas las alertas en base de datos (MySQL) y veremos los primeros resultados.

Antes de nada un poco de teoría de Sistemas de detección de intrusos, tipos y características...

IDS, HIDS

Los IDS, en principio, solo capturan alertas ocurridas en el host local donde están instalados. Aunque, por extensión, todos los Sistemas de Intrusion, del tipo que sean, son tambien llamados IDS:
  • IDS: Intrusion Detection System
  • HIDS: Host Intrusion Detection System
  • NIDS: Network Intrusion Detection System
Estos sistemas detectan alertas snifando el tráfico que pasa por su tarjeta de red. Por lo que si son colocados en los lugares correctos (p.e. los firewalls, gateways etc) nos detectan los ataques producidos a cualquiera de los hosts de nuestra red. Los DIDS (Distributed Intrusion Detection System) son NIDS donde los sensores que detectan y recolectan información están distribuidos en diferentes puntos/hosts en la red. Snort también puede actuar como NIDS. (leer más).

Instalación de Snort

Usaremos binarios puesto que la máquina es bastante obsoleta y no queremos sufrir un infierno compilando. Como podeis comprobar, se trata de una OpenBSD-3.9:
# pkg_add -r ftp://ftp.openbsd.org/pub/OpenBSD/3.9/packages/i386/snort-2.4.3-mysql.tgz
snort-2.4.3-mysql:pcre-6.4p1: complete
snort-2.4.3-mysql: complete
--- snort-2.4.3-mysql -------------------
An up-to-date set of rules is needed for Snort to be useful as an IDS.
These can be downloaded manually or net/oinkmaster can be used to
download the latest rules from several different sources.

It is recommended that snort be run as an unprivileged chrooted user.
An _snort user/group and log directory has been created for this
purpose.  You should start snort with the following options to take
advantage of this:
        -u _snort -g _snort -t /var/snort
and if you want to log:
        -l /var/snort/log
#
Bajamos las RULES de la versión 2.4 (usuarios no registrados, para probar):
# wget -c http://www.snort.org/pub-bin/downloads.cgi/Download/vrt_pr/snortrules-pr-2.4.tar.gz
# mkdir -p /etc/snort/rules
# mv snortrules-pr-2.4.tar.gz /etc/snort/rules/
# tar xfvvz snortrules-pr-2.4.tar.gz  

Configuración MySQL

Conectamos con mysql para crear base de datos, usuario y demás (ojo con el socket si lo tenemos configurado para httpd chrooted):
# mysql -u root --socket=/var/www/var/run/mysql/mysql.sock -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE snort;
Query OK, 1 row affected (0.29 sec)

mysql> GRANT INSERT, SELECT ON snort.* to snort@localhost;
Query OK, 0 rows affected (0.53 sec)

mysql> SET PASSWORD FOR snort@localhost = PASSWORD('password');
Query OK, 0 rows affected (0.05 sec)

mysql> GRANT CREATE, UPDATE, INSERT, DELETE, SELECT ON snort.* TO snort@localhost;
Query OK, 0 rows affected (0.00 sec)
Importamos la estructura de la base de datos. En OpenBSD no instala ningún archivo donde importarla, con lo aquí dejo una copia: create_mysql.gz.
# gunzip -d create_mysql.gz
# mysql -u root --socket=/var/www/var/run/mysql/mysql.sock -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> USE snort;
Database changed
mysql> source create_mysql;
Query OK, 0 rows affected (0.27 sec)
Query OK, 1 row affected (0.11 sec)
Query OK, 0 rows affected (0.04 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.00 sec)
...
mysql>

Configuración Snort

En OpenBSD el fichero de configuración principal de Snort se encuentra en /etc/snort/snort.conf, donde tendremos que indicarle al menos que guarde las alertas y los logs en MySQL, parámetros de red y poco más:
var HOME_NET 192.168.0.0/24

var DNS_SERVERS $HOME_NET
var SMTP_SERVERS $HOME_NET
var HTTP_SERVERS $HOME_NET
var SQL_SERVERS $HOME_NET
var TELNET_SERVERS $HOME_NET
var SNMP_SERVERS $HOME_NET

var RULE_PATH ../rules/rules

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

Arrancando Snort

Recomiendan:
# snort -bDI -A fast -c /etc/snort/snort.conf
  • -b –> Log paquetes en formato binario ( tcpdump -r file)
  • -D –> Modo daemon
  • -I –> Indica la interfaz por la que llego el paquete
  • -A –> Tipo de alerta ( fast= una linea en el fichero alert)
  • -c –> Fichero de reglas
Aunque mi opción ha sido más simple (con un ojo siempre en /var/log/daemon y /var/log/messages por posibles problemas de permisos, logs...):
# snort -bDI -A fast -c /etc/snort/snort.conf

Instalando BASE

Basic Analysis and Security Engine. Desgargamos la última release (19.04.07) dentro del DocumentRoot y descomprimimos:
# wget -c http://kent.dl.sourceforge.net/sourceforge/secureideas/base-1.3.5.tar.gz
# tar xvvz base-1.3.5.tar.gz
Una vez dentro del directorio, encontramos en sql/ lo necesario para montar las tablas que BASE usará para sus propios análisis. Agregaremos el esquema a la base de datos snort anteriormente creada:
# cat sql/create_base_tbls_mysql.sql | mysql -u root --socket=/var/www/var/run/mysql/mysql.sock  -D snort -p
# mysql -u root --socket=/var/www/var/run/mysql/mysql.sock -p
...
   mysql> show tables;
+------------------+
| Tables_in_snort  |
+------------------+
| acid_ag          |
| acid_ag_alert    |
| acid_event       |
| acid_ip_cache    |
| base_roles       |
| base_users       |
| data             |
| detail           |
| encoding         |
| event            |
| icmphdr          |
| iphdr            |
| opt              |
| reference        |
| reference_system |
| schema           |
| sensor           |
| sig_class        |
| sig_reference    |
| signature        |
| tcphdr           |
| udphdr           |
+------------------+
Vemos que se han creado nuevas tablas con el prefijo acid, esto es porque BASE está basado en ACID -muerto o desactualizado desde el 2003-.
En las instrucciones hay que resolver algunas dependencias de BASE para que funcione correctamente, ADODB es una de ellas:
# wget -c http://puzzle.dl.sourceforge.net/sourceforge/adodb/adodb494.tgz
# tar xfvvz adodb494.tgz
Image_Graph la otra:
# wget -c http://download.pear.php.net/package/Image_Graph-0.7.2.tgz
# wget -c http://pear.php.net/get/Image_Canvas-0.3.0.tgz
# wget http://pear.php.net/get/Image_Color-1.0.2.tgz
Una vez hemos descargado Image_Graph de Pear lo descomprimimos en el directorio Images/ que previamente tendremos que crear, quedando de la siguiente forma:
 base/
   |- Images/
   |- Canvas/
   |- Graph/
   |- docs/
   |- tests/
   |- Canvas.php
   |- Color.php
   |- Graph.php
El siguiente paso será acceder vía web al BASE recién instalado: http://localhost/base/ -donde proceda- y seguir las instrucciones:
Snort Base
Snort Base
Snort Base
Snort Base
Snort Base
Snort Base
Nota: He tenido que tocar más de una vez durante la instalación el archivo base_conf.php para editar la variable $DBlib_path del adodb dependiendo del punto de la instalación en el que te encuentres. Al final ha quedado $DBlib_path = ‘adodb/’;

Referencias

sysadmin openbsd

About the author

Óscar
has doubledaddy super powers, father of Hugo and Nico, husband of Marta, *nix user, Djangonaut and open source passionate.