Bastionado, seguridad en sistemas: Introducción a la creación de preprocesadores Snort (I) pre { background:#eeeeee; border:1px solid #A6B0BF; font-size:120%; line-height:100%; overflow:auto; padding:10px; color:#000000 } pre:hover { border:1px solid #efefef; } code { font-size:120%; text-align:left; margin:0;padding:0; color: #000000;} .clear { clear:both; overflow:hidden; }

Bienvenido al blog

Bienvenidos al blog de seguridad en sistemas

viernes, 12 de agosto de 2011

Introducción a la creación de preprocesadores Snort (I)

Después de 20 días sin escribir en el blog por motivos tan importantes como el calor, el trabajo y los estudios me he decidido a retomarlo que lo tenía olvidado. ¿Y que mejor forma que creando el dominio “www.bastionado.com” y un post de Snort?

Snort es una herramienta de prevención y detección de intrusos a nivel de red. Internamente se subdivide en bloques encargados de tratar la información y pasar el resultado al siguiente bloque:

  • El primero bloque es el Sniffer encargado de leer el tráfico.
  • El segundo bloque son los normalizadores encargados de tratar los datos leídos por el Sniffer transformándolos en una estructura de C bien formada.
  • El tercer bloque lo constituyen los preprocesadores, encargados de generar alertas, normalizar los payloads y aportar nuevas funcionalidades al motor de reglas.
  • El cuarto bloque es el motor de reglas, el cual a partir de un listado de reglas es capaz de detectar posibles ataques, notificando de este hecho a los postprocesadores con la directiva indicada en la regla.
  • El quinto bloque son los postprocesadores cuyo objetivo es aplicar la directiva estipulada en la regla, por ejemplo bloquear el tráfico, registrar la alerta en fichero, registrar en una base de datos, syslog, etc.

En ésta entrada veremos como crear un preprocesador básico de Snort de forma sencilla y introductoria. Para ello será necesario tener instalado un Snort en nuestro entorno (mirar manuales en la web de Snort para ello). Para empezar será necesario disponer de las fuentes de Snort de la versión empleada (2.8 o superior) para crearnos el preprocesador al que llamaremos “Blog”, comencemos:
 

# cd /usr/src
(Descargamos las fuentes del Snort que tenemos instalado)
# tar xvfz snort-version.tar.gz
# mkdir /usr/src/snort-version/src/dynamic-preprocessors/blog
# cd /usr/src/snort-version/src/dynamic-examples/dynamic-preprocessor/
# cp spp_example.c sf_preproc_info.h Makefile Makefile.am Makefile.in
/usr/src/snort-version/src/dynamic-preprocessors/blog/
# cd /usr/src/snort-version/src/dynamic-preprocessors/blog/

Modificamos el makefile:

# sed -e "s/dynamic-preprocessors/blog/g" Makefile >> Makefile2
# mv Makefile2 Makefile
# sed -e "s/dynamic-examples/dynamic-preprocessors/g" Makefile >> Makefile2
# mv Makefile2 Makefile
# sed -e "s/spp_example/blog/g" Makefile >> Makefile2
# mv Makefile2 Makefile
# sed -e "s/example/blog/g" Makefile >> Makefile2
# mv Makefile2 Makefile
# mv spp_example.c blog.c

Editamos el fichero "sf_preproc_info.h" con las siguientes modificaciones:

Modificamos esto:
#ifndef SF_PREPROC_INFO_H_
#define SF_PREPROC_INFO_H_
...
define PREPROC_NAME "SF_Dynamic_Example_Preprocessor"
...
#endif /* SF_PREPROC_INFO_H_ */

Por esto:
#ifndef SF_BLOG_INFO_H_
#define SF_BLOG_INFO_H_
...
define PREPROC_NAME "Blog"
...
#endif /* SF_BLOG_INFO_H_ */

Ahora ejecutaremos la primera compilación de nuestro preprocesador "blog" y veremos que no da ningún error:

# make
# make install

Si nos fijamos, al finalizar el "make install" se nos indica el directorio donde ha sido instalado el preprocesador:

Libraries have been installed in:
         /usr/local/lib/snort_dynamicpreprocessor

Veamos que ha creado el "make" en ese directorio "/usr/local/lib/snort_dynamicpreprocessor":

# ls -l /usr/local/lib/snort_dynamicpreprocessor | grep blog
-rw-r--r-- 1 root staff 95638 ago 8 16:32 lib_sfdynamic_preprocessor_blog.a
-rwxr-xr-x 1 root staff 1303 ago 8 16:32 lib_sfdynamic_preprocessor_blog.la
lrwxrwxrwx 1 root staff 40 ago 8 16:32 lib_sfdynamic_preprocessor_blog.so -> lib_sfdynamic_preprocessor_blog.so.0.0.0
lrwxrwxrwx 1 root staff 40 ago 8 16:32 lib_sfdynamic_preprocessor_blog.so.0 -> lib_sfdynamic_preprocessor_blog.so.0.0.0
-rwxr-xr-x 1 root staff 61529 ago 8 16:32 lib_sfdynamic_preprocessor_blog.so.0.0.0

Para confirmar que nuestro Snort espera encontrar los preprocesadores dinámicos en "/usr/local/lib/snort_dynamicpreprocessor" es necesario revisar el tag "dynamicpreprocessor" del fichero de configuración principal de snort, por defecto "/etc/snort/snort.conf":


# grep dynamicpreprocessor /etc/snort/snort.conf
dynamicpreprocessor directory /usr/local/lib/snort_dynamicpreprocessor/

Como vemos el directorio es el mismo puesto que estoy empleando una instalación estándar. En caso contrario, sería necesario mover el preprocesador al directorio que usemos o modificar el makefile para que copie los ficheros al directorio indicado.

En la siguiente entrada veremos como modificar el código del preprocesador que acabamos de crear para añadir funcionalidades en el módulo de preprocesadores y en el motor de reglas. 


No hay comentarios:

Publicar un comentario