viernes, enero 30, 2015

Compilando Snort desde las fuentes

Snort es un un sistema de detección de intrusiones de red cuya función es detectar posibles amenazas de seguridad que existan en la red . Funciona leyendo todo el tráfico que circula por la red a la cual está conectado, procesándolo y posteriormente analizándolo a través de una serie de reglas buscando los patrones de tráfico que le indiquen éstas en búsqueda de posibles amenazas, que en caso de encontrarse lanzar la correspondiente alarma.

Hace algunos años escribí esta pequeña nota sobre la compilación de snort pero desde entonces ha cambiado bastante la manera de hacerlo.Además, Snort suele venir ya de serie en muchas distribuciones de Linux, con lo cual no es realmente necesario compilarlo como se cuenta en esta nota. Sin embargo, si se quiere experimentar con ciertas versiones, puede ser necesario compilarlo desde fuentes, saber cuales son sus dependencias y como integrar todo el paquete. En esta pequeña nota se cuenta como realizar todo el proceso para la versión de Snort estable disponible en la fecha de publicación.

El proceso de compilación lo he llevado a cabo tanto en una Debian Wheezy, sólo con los paquetes debhelper, build-essential , bison y flex instalados, así como en MacOS X 10.9 Mavericks con todo el entorno de Xcode y la línea de comandos instalada.

Para instalar Snort es necesario en primer lugar instalar varios paquetes que necesita, así como la librería de captura de datos que provee el propio snort llamada daq. Para empezar, hay que compilar ésta última librería que la única dependencia que tiene es libpcap en una versión superior a la 1.0.0 que se puede bajar de la página web de tcpdump. Para instalar la dependencia de libpcap necesaria para compilar daq hay que dar los siguientes pasos (en este caso usando la versión 1.6.2)

baldurgate:~ terron$wget http://www.tcpdump.org/release/libpcap-1.6.2.tar.gz
baldurgate:~ terron$wget http://www.tcpdump.org/release/libpcap-1.6.2.tar.gz.sig
baldurgate:~ terron$gpg --verify libpcap-1.6.2.tar.gz.sig1
baldurgate:~ terron$tar zxvf libpcap-1.6.2.tar.gz
baldurgate:~ terron$cd libpcap-1.6.2/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v2

Una vez que tenemos la librería libpcap instalada y compilada, pasamoa a compilar e instalar la librería daq

baldurgate:~ terron$wget https://www.snort.org/downloads/snort/daq-2.0.4.tar.gz
baldurgate:~ terron$tar zxvf daq-2.0.4.tar.gz
baldurgate:~ terron$cd daq-2.0.4
baldurgate:~ terron$./configure ./configure -—prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Ahora es necesario instalar las librerías mínimas que necesita Snort para compilarse aparte de daq. Estas librerias son zlib, pcre y dnet. En el caso de quererse activarse más opciones es necesario compilar más librerías.

Compilar e instalar pcre

baldurgate:~ terron$wget http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz
baldurgate:~ terron$wget http://sourceforge.net/projects/pcre/files/pcre/8.36/pcre-8.36.tar.gz.sig
baldurgate:~ terron$gpg --verify pcre-8.36.tar.gz.sig1
baldurgate:~ terron$tar zxvf pcre-8.36.tar.gz
baldurgate:~ terron$cd pcre-8.36
baldurgate:~ terron$./configure --prefix=/usr/local --enable-utf --enable-jit
baldurgate:~ terron$make
baldurgate:~ terron$make check
baldurgate:~ terron$su
baldurgate:~ terron#make install

Compilar e instalar libdnet:

baldurgate:~ terron$wget https://libdnet.googlecode.com/files/libdnet-1.12.tgz
baldurgate:~ terron$tar zxvf libdnet-1.12.tgz
baldurgate:~ terron$cd libdnet-1.12/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Me encontré con un bug curioso cuando compilé esta librería en Debian que es que no generaba el nombre correctamente, le faltaba el .so. Luego no arrancaba el Snort compilado contra ella. Lo solucioné sencillamente copiando la librería (como root).

baldurgate:~ terron#cd /usr/local/lib
baldurgate:~ terron#cp libdnet.1.0.1 libdnet.1.0.1.so
baldurgate:~ terron#ldconfig -v

Compilar e instalar zlib

baldurgate:~ terron$wget http://zlib.net/zlib-1.2.8.tar.gz
baldurgate:~ terron$tar zxvf zlib-1.2.8.tar.gz
baldurgate:~ terron$cd zlib-1.2.8/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Opcionalmente, también se puede compilar el soporte para lzma. Para ello se va a compilar el paquete xz que nos da soporte para esta librería

baldurgate:~ terron$wget http://tukaani.org/xz/xz-5.2.0.tar.gz
baldurgate:~ terron$wget http://tukaani.org/xz/xz-5.2.0.tar.gz.sig
baldurgate:~ terron$gpg --verify xz-5.2.0.tar.gz.sig1
baldurgate:~ terron$tar zxvf xz-5.2.0.tar.gz
baldurgate:~ terron$cd xz-5.2.0/
baldurgate:~ terron$./configure --prefix=/usr/local
baldurgate:~ terron$make
baldurgate:~ terron$make check
baldurgate:~ terron$su
baldurgate:~ terron#make install
baldurgate:~ terron#ldconfig -v

Compilar e instalar Snort

baldurgate:~ terron$wget https://www.snort.org/downloads/snort/snort-2.9.7.0.tar.gz
baldurgate:~ terron$tar zxvf snort-2.9.7.0.tar.gz
baldurgate:~ terron$cd  cd snort-2.9.7.0/
baldurgate:~ terron$make
baldurgate:~ terron$su
baldurgate:~ terron#make install

Ahora, como superusuario podemos probarlo. Por ejemplo, como un simple sniffer como tcpdump como snort -i interfaz bgp expresion

Notas

  1. Todas las verificaciones de claves gpg suponen que se tienen la clave pública con las cuales se van a verificar en el anillo local. En caso de que no exista se pueden traer con gpg --recv-keys
  2. Esto se hace para rehacer la caché de las librerias dinámicas, en principio Linux. En OS X no hace falta

No hay comentarios: