Está en la página 1de 7

ADMINISTRACIN Snort

Deteccin de Intrusiones con Snort

SEGURIDAD SNORT
Bsqueda de ataques ocultos con el sistema de deteccin de intrusos Snort. POR CHRIS RILEY
ace poco implementamos un Sistema de Deteccin de Intrusos (IDS) para una granja de webs alojada remotamente. Tras la configuracin inicial, comenzamos a hacer pruebas y a optimizar el sistema. Tan pronto como se conect, detectamos un tipo de trfico que no debera pasar del DMZ. El cortafuegos controlado por el ISP estaba mal configurado y permita la entrada de casi todo el trfico. Durante el poco tiempo en que estuvo el test en funcionamiento, el IDS registr un gran nmero de escaneos de puertos e intentos de acceso a los servidores principales. Era

obvio, observando estos logs, que los servidores no estaban recibiendo la atencin adecuada. La moraleja de esta historia es que siempre hay que tener un ojo puesto en la red. Incluso aunque no tengamos el problema de un cortafuegos mal configurado, nuestros sistemas pueden beneficiarse de la vigilancia de un IDS. En el nivel ms bsico, lo que un IDS hace es capturar todo el trfico de una red. Luego compara el contenido de los paquetes con reglas especficas para ver si existen vulnerabilidades conocidas o cdigo malicioso.

Cada vez que el IDS encuentra una coincidencia en una regla, se dispara una accin preconfigurada. La accin vara dependiendo de la configuracin de dicha regla, aunque en modo IDS bsico, el sistema simplemente registra el trfico peligroso o enva una alerta. Un sensor, es decir, un equipo situado en el permetro de la red, permanece vigilante al trfico que el cortafuegos deja pasar; con otro sensor, situado en el exterior del cortafuegos, se pueden ver los intentos de acceso. Snort [1] es un IDS alternativo de cdigo abierto, y al igual que otros proyectos de cdigo abierto, cuenta ahora con una rama corporativa, Sourcefire [2]. Lo bueno es que Snort sigue estando disponible bajo licencia GPL.

pcphotos, Fotolia

60

Nmero 46

WWW.LINUX-MAGAZINE.ES

Snort ADMINISTRACIN

En este artculo explicamos cmo usar Snort para vigilar nuestra red.

Instalacin
La instalacin de Snort suele ser sencilla. Quien tenga un gestor de paquetes .dev o .rpm debera encontrar a Snort entre los paquetes disponibles para su distribucin; aunque sea una versin algo ms antigua. En el momento de escribir estas lneas, la ltima versin es la 2.8.3.1. Instalarlo desde las fuentes no es tan sencillo como hacerlo con apt-get, pero dispondremos de muchas ms opciones para la configuracin del sistema. Para compilarlo necesitaremos el tarball con las fuentes y, opcionalmente, la suma MD5 que usaremos para comprobar la integridad del paquete.
wget http://www.snort.org/U dl/snort-2.8.3.1.tar.gz

Opcional:
wget http://www.snort.org/U dl/snort-2.8.3.1.tar.gz.md5

Opcional:
md5sum -cU snort-2.8.3.1.tar.gz.md5 tar -xvf snort-2.8.3.1.tar.gz cd snort-2.8.3.1

Una vez descomprimidas las fuentes, decidimos dnde nos dejar los registros y las alertas. Adems, siempre podemos registrarlo todo en /var/log/snort/ o configurar una ruta escalable ms flexible. Snort soporta una amplia variedad de bases de datos que nos permite centralizar fcilmente la informacin. La eleccin depender de lo que queramos hacer y de la cantidad de trfico con la que pensemos trabajar. Un clculo sencillo puede ser multiplicar por 10 el nivel de trfico estimado. La mayora de las veces la gente se sorprende de cmo un mnimo trfico puede sobrecargar con facilidad nuestro sistema de registros si no se est prevenido. En este ejemplo instalamos MySQL como base de datos para Snort. Si quiere utilizarse otra base de datos, se puede compilar el soporte para la misma mediante las opciones disponibles para ./configure.
./configure with-mysql make sudo make install

Para ver un listado completo de las opciones soportadas ejecutaremos ./configure -h. Si se producen errores durante la compilacin, quiz sea porque nos faltan algunos archivos de cabecera necesarios. En particular, hay que asegurarse de tener pcre.h, pcap.h, pcapbpf.h y mysql.h en el directorio /usr/include. Si no se encuentran estos archivos, algunas de las dependencias pueden no Figura 1: El archivo snort.conf es el eje central en la instalarse correctamente configuracin de Snort. (Listados 1 y 2). Es posible adems que tengamos problemas con el tanto gratuita como de pago, dependiendo archivo libpcap.so. En determinadas distride cmo de actualizado necesitemos nuestro buciones tenemos que recrear este enlace juego de reglas. Las reglas para los miembros simblico mediante con suscripcin de pago se actualizan 30 das antes que las de los usuarios normales. ln -sU Es mejor no usar las reglas proporcionadas /usr/lib/libpcap.so.<versin>U por la versin liberada, ya que caducan rpi/usr/lib/libpcap.so damente ante nuevos ataques. Una vez nos hemos registrado (o suscrito), ya podemos Una vez hecho make y make install, damos descargar el nuevo juego de reglas para deslos ltimos toques antes de pasar a la comprimirlas en /etc/snort/rules. No hay que configuracin de la base de datos MySQL. olvidarse de la comprobacin del tar con Hay que crear un usuario para Snort (no md5sum. querremos que el servicio se ejecute como Preparacin de la Base de root, verdad?). Para crear un nuevo usuario, Datos ejecutamos los siguientes comandos: Ahora que ya hemos instalado el sistema groupadd snortgrp bsico, ha llegado el momento de preparar la useradd -g snortgrp snortusr base de datos. Una vez tengamos en ejecucin el servidor de MySQL (lo podemos Con ellos creamos el grupo snortgrp y el comprobar con ps -A | grep mysqld to usuario snortusr. Antes de continuar debecheck), podemos empezar con la mos asegurarnos de que nos encontramos configuracin. en el directorio desde el que hemos descomLa configuracin de la base de datos se primido Snort. Los siguientes comandos nos divide en varios apartados. Primero debesirven para crear los directorios necesarios mos elegir una contrasea adecuada, crear la para los archivos de configuracin, reglas y base de datos necesaria y definir la estrucregistros de Snort, y copiar los archivos necetura de las tablas. Nos conectamos como sarios al recin creado directorio /etc/snort. root al servicio de MySQL y creamos la base de datos y los permisos para snortusr. Para mkdir -p /etc/snort/rules abrir la lnea de comandos de MySQL ejecumkdir /var/log/snort taremos mysql -u root -p desde la terminal. touch /var/log/snort/snort.log Luego se nos pide la contrasea del usuario touch /var/log/snort/alert root y entramos al intrprete de mysql>. En chown -R snortusr.snortgrpU l introducimos los siguientes comandos /var/log/snort para la finalizacin del primer apartado de la cp etc/* /etc/snort/ configuracin (hemos de asegurarnos de que cada lnea termina con un punto y coma Para descargar las ltimas reglas debemos ;). conectarnos al sitio web de Snort [1] y regisNos cercioraremos de que las contraseas trarnos. El sitio ofrece opciones de registro que creemos aguantarn bien un posible ata-

WWW.LINUX-MAGAZINE.ES

Nmero 46

61

ADMINISTRACIN Snort

configuracin de Snort. El archivo principal de configuracin, snort.conf (Figura 1), se encuentra en Figura 2: Configuracin de la conexin MySQL en snort.conf. el directorio /etc/ snort. Abrimos este que por fuerza bruta. Se recomienda usar un archivo con un editor de nuestra eleccin y mnimo de ocho caracteres y que contengan echamos un vistazo a las distintas secciones. maysculas, minsculas y caracteres espeCon el archivo de configuracin podemos ciales. usar muchos trucos tiles para la configuracin de nuestro IDS. Por ejemplo, create database snort; necesitaremos aadir informacin acerca de grant INSERT, SELECT on root.*U la red y los servidores, de forma que Snort to snort@localhost; pueda relacionar las reglas correctamente. set PASSWORD for U Para garantizar que el sistema monitoriza el snort@localhost=PASSWORDU trfico adecuado, las variables HOME_NET y (ConTR4sEa_3leg|da); EXTERNAL_NET deben reflejar la infraesgrant CREATE, INSERT, SELECT,U tructura de la red. En una red simple, DELETE, UPDATE on snort.* toU HOME_NET probablemente se defina como snort@localhost; un rango de IPs privado, como grant CREATE, INSERT, SELECT,U 192.168.0.0/24. Esto implica que todo el trDELETE, UPDATE on snort.* toU fico originado en el rango de IPs 192.168.0.1snort; 255 se considerar trfico interno. Estos exit detalles variarn dependiendo de cada configuracin. Si en nuestra red interna hay Cada uno de los comandos debera devolver varias subredes, podemos aadirlas todas una respuesta Query OK. separndolas con comas. La entrada EXTEREn la segunda parte de la configuracin le NAL_NET es un listado de direcciones espepasamos al intrprete de MySQL un script cficas que se considerarn externas. La sencillo. Hemos de asegurarnos de que nos forma ms sencilla de configurarla es encontramos en el directorio donde descomusando el valor !$HOME_NET, que Snort primimos Snort. Ejecutamos entonces el entender como cualquier direccin distinta siguiente comando: de HOME_NET. Especificamos la ubicacin de las reglas de mysql -u root -p schemasU Snort mediante el archivo de configuracin. /create_mysql snort Suponiendo que hemos descargado las reglas en /etc/snort/rules, aadimos esta Una vez que hemos completado ambos misma ruta a la variable RULE_PATH. La pasos, verificamos que todas las piezas se ltima variable a configurar, pero no menos encuentran en su sitio. Para confirmar que importante, es la usada por el IDS para guartodo est bien, entramos en el intrprete de dar la informacin en la base de datos. Cerca MySQL como el usuario de Snort que creadel final del archivo snort.conf hay una secmos antes. Comprobamos la base de datos y cin para configurar la salida de los plugins. la estructura de tabla con los siguientes Debemos descomentar la lnea output datacomandos: base: log,mysql ~ y reemplazarla por la localizacin de la base de datos MySQL show databases; (Figura 2). use snort; Una vez finalizada la configuracin, ya show tables; tenemos la base de un servidor funcional. De exit todas formas, an hay que configurar Snort para que se inicie durante el arranque del sisDespus de preparar la base de datos, ya estatema y asegurarnos de que se ejecuta bajo la mos listos para empezar a configurar Snort. recin creada cuenta del usuario snortusr. Llegados a este punto, podemos probar Configuracin de Snort Snort desde la lnea de comandos con snort Una vez finalizados todos los preparativos, -u snortusr -g snortgrp -c ha llegado el momento de sumergirnos en la /etc/snort/snort.conf. Snort se ejecutar bajo

las credenciales proporcionadas y comenzar a registrar o alertarnos sobre todo el trfico capturado. Al terminar, mostrar estadsticas sobre la sesin (Figura 3). El reporte en pantalla no est mal, pero tampoco es la mejor solucin. Para hacer que Snort arranque al inicio, insertaremos un sencillo script en el directorio /etc/init.d. Para crear el script, abrimos nuestro editor favorito e introducimos las lneas:
#!/bin/bash # # Script de inicio de SnortU -/etc/init.d/snortstart # /usr/local/bin/snort -Dq -u U snortusr -g snortgrp -c U /etc/snort/snort.conf

Una vez colocado el script, ejecutamos chmod +x /etc/init.d/snortstart para que ste sea ejecutable, y update-rc.d /etc/init.d/snortstart defaults 95 para crear los enlaces simblicos necesarios para los distintos niveles de ejecucin. El proceso puede diferir dependiendo de la distribucin de Linux que estemos usando.

Reglas para Snort


Snort proporciona una seleccin de reglas de filtrado para el trfico no deseado. Las mayora de las reglas de Snort son de fcil comprensin y modificacin. Cada regla consta de dos secciones: la cabecera y las opciones. La cabecera describe el mensaje que se mostrar al dispararse la accin. La opcin contiene palabras clave para indicar a Snort

Figura 3: Snort muestra estadsticas sobre la sesin al finalizar.

62

Nmero 46

WWW.LINUX-MAGAZINE.ES

Snort ADMINISTRACIN

cmo debe inspeccionar el paquete, as como referencias tiles para la investigacin, que se mostrarn cada vez que se dispare una alerta. Veamos un ejemplo:
alert tcp $EXTERNAL_NET anyU ->$HTTP_SERVERS U $HTTP_PORTS(msg:WEB-IIS U unicode directorytraversal U attempt; flow:to_ U server,established;content:/ U ..%c1%1c../; nocase; U reference:cve,2000-0884; U reference:nessus,10537;# classtype:U web-application-attack;# sid:982; rev:13;)

En la regla anterior, la cabecera incluye el comando alert tcp $EXTERNAL_NET any ->$HTTP_SERVERS $HTTP_PORTS. Esta cabecera le dice a Snort que alerte cuando se dispare la regla y que examinte slo el trfico proveniente de las redes externas (desde cualquier puerto) y dirigido a los servidores http internos (a los puertos http configurados). Aunque esta declaracin de alerta podra parecer obvia, a veces puede que slo queramos registrar el trfico en la base de datos, o incluso hacer cosas ms avanzadas con las acciones dynamic y activate. Si estamos usando Snort como IPS (Intrusion Prevention System) integrado, podemos usar las opciones Drop, Reject o Sdrop para gestionar el trfico no deseado. Snort puede comprobar paquetes TCP, UDP, IP e ICMP, dependiendo de nuestras necesidades. Si la regla especifica TCP, y entra un paquete UDP, incluso aunque el resto de la cabecera de la regla y las opciones encajasen perfectamente, Snort no realizara ninguna accin. Nuestra regla especifica TCP, perfectamente estndar para el trfico http. La siguiente parte de la cabecera llama a algunas de las variables que definimos en el archivo de configuracin de Snort. La regla examinar el trfico proveniente de la variable $EXTERNAL_NET desde cualquier puerto. La flecha -> indica el sentido del trfico. En este caso, la regla es aplicable a todo lo que venga desde cualquier direccin de $EXTERNAL_NET y cualquier puerto de $HTTP_PORTS. El sentido del trfico es muy importante. En este caso, las respuestas provenientes de los servidores $HTTP_SERVERS sern ignoradas, ya que no concuerdan con el sentido indicado en la regla.

El resto ya son las opciones de la regla. La seccin de opciones comienza dicindole a Snort qu mensaje mostrar en la alerta. En este caso, la regla insta a Snort a mostrar WEB-IIS unicode directory traversal attempt en el Figura 4: Configuracin del acceso a MySQL desde la pgina de registro o la base de configuracin BASE. datos, y tambin en la alerta. listado de reglas. Creando un listado ms Despus de este comando llega la parte centralizado reducimos la cantidad de ms importante de las opciones de la regla: paquetes perdidos y mejoramos el rendila parte encargada de decidir el trfico a miento. Las reglas que dejaremos activas seleccionar. La etiqueta flow indica a Snort sern las que dependan de la infraestructura que slo debe examinar los paquetes enviade nuestra red y nuestros requerimientos en dos al servidor de destino una vez iniciada la general. Para reducir una sobrecarga innecesesin. Este requisito evita que Snort exasaria, desactivamos todas las reglas sobranmine tambin el saludo de tres fases SYN, tes para servicios y protocolos que en realiSYN-ACK, ACK que inicializa la conexin. En dad no usamos. un IDS con mucha carga, eliminar de la regla Por defecto ya hay varias reglas deshabilide comprobacin el trfico de los preliminatadas. Muchas de ellas pueden, ocasionalres puede suponer una mejora muy signifimente, causar falsos positivos, aunque es cativa en el rendimiento del sistema. posible que queramos habilitar algunas para En la seccin content es donde verdaderapropsitos especficos. Una vez ajustada la mente radica el meollo de la regla. Dicho de lista a nuestras necesidades, invertimos algo otro modo, Snort tomar el valor de la etide tiempo proporcionando la informacin queta content y la comparar con las peticiosobre servicios especficos. nes enviadas al servidor. La regla del ejemComo puede observarse, Snort ofrece una plo anterior busca la cadena /..%c1%1c../. serie de variables para simplificar la tarea de Esta cadena utiliza unicode para ocultar un confeccionar las reglas. Sin dichas variables, intento de acceso transversal a otro directosi nuestra empresa tuviese varios servidores rio. La mayora de los sistemas ya son inmuhttp a la escucha en puertos distintos del 80 nes a este tipo de ataques, pero an as se (por ejemplo, el 8080), tendramos que edisiguen viendo muchos con la intencin de tar cada una de las reglas de Snort para alteexplotar esta vulnerabilidad. El comando rar el puerto http y cambiarlo por el 8080. Es nocase que sigue a la etiqueta content indica ms, tendramos que modificar cada regla en a la regla que debe ignorar la capitalizacin cada actualizacin de un juego de reglas. En del texto a la hora de buscar las coincidenvez de eso, podemos usar las variables de cias en el contenido. Snort para definir el valor de $HTTP_PORTS La ltima etiqueta es classtype. La infora 8080. As podemos ejecutar los servidores macin contenida en ella indica a Snort el en cualesquiera puertos sin tener que editar nivel de prioridad del evento. En este caso, el siempre las correspondientes reglas. Para classtype de web-application-attack indica cambiar el valor de $HTTP_PORTS a 8080, una prioridad alta. Estos niveles es ms fcil editamos el archivo snort.conf del siguiente explorarlos y configurarlos a travs del modo: archivo classifications.config. Para ver cmo queda el listado de reglas var HTTP_SERVERSU activas, echamos un ojo de nuevo a /etc/ [10.10.10.100/32,10.10.10.111/U snort/snort.conf y examinamos las reglas que 32] proporcionan una vista general del trfico var HTTP_PORTS [80,8080] entrante. Tambin es posible definir un rango de puerPara ajustar las alertas hasta un nivel tos, en vez de una lista, usando dos puntos manejable y garantizar que monitorizamos (por ejemplo, 8000:8080). los servicios correctos, podemos modificar el

WWW.LINUX-MAGAZINE.ES

Nmero 46

63

ADMINISTRACIN Snort

El archivo snort.conf incluye tambin variables predefinidas para los servicios HTTP, AIM y Oracle. Adems podemos aadir nuestras propias variables en caso de planear usarlas con otros servicios. Proporcionar a Snort la informacin sobre dnde y cmo se configuran los servicios de nuestra red permite a nuestro IDS reducir la sobrecarga, restringiendo las comprobaciones de trfico a una serie de paquetes determinados. Para qu vamos a comprobar el trfico SMTP dirigido a un sistema que slo ofrece servicios de SSH o FTP? En redes de mayor tamao, nunca se puede estar seguro al 100% de qu trfico viaja por los cables. Podra resultar que hay un servicio SMTP ejecutndose en un esquivo servidor, en lo ms recndito de la empresa, desde los inicios de su historia. Snort tambin nos permite crear reglas personalizadas. La mejor forma de aprender a crear nuevas reglas es viendo una ya hecha. Despus de examinar unas pocas, podemos escoger alguna que se parezca mucho a lo que necesitamos y modificarla. Lo ms frecuente es aadir las nuevas reglas personales al archivo local.rules para probarlas. Hacindolo, las protegemos de sobreescrituras producidas al actualizar un nuevo juego de reglas. Las reglas personales nos vienen muy bien en situaciones en las que an no se ha publicado el parche para alguna vulnerabilidad conocida. Al aadir una de estas reglas, dotamos a nuestro IDS/IPS de una capa adicional de proteccin o, al menos, de un sis-

tema de deteccin por si el problema aparece.

Los Preprocesadores de Snort


Los preprocesadores, los cuales podemos activar y desactivar a travs de snort.conf, permiten a Figura 5: Arte ASCII de la vieja escuela: Ojo al cerdito de Snort la manipulacin del trfico la izquierda. entrante. Snort activa automticamente varios preprocesadores para el tramuchos otros proyectos *nix, sin embargo, tamiento del trfico fragmentado, la inspeces fcil hacer que Snort interacte con otras cin del flujo con control de estado, la moniutilidades. Dos de los posibles candidatos torizacin del rendimiento, la decodificacin son Swatch y Logsurfer. del trfico RPC, la monitorizacin del trfico Hay otros productos disponibles para la ftp/telnet/SMTP/DNS/SMB y el escaneo de visualizacin de los datos de Snort en forma puertos. Hay incluso un preprocesador espede grficos y estadsticas. Uno de los sistecialmente diseado para el troyano Back Orimas ms populares es BASE [3] (Basic fice. Cada preprocesador tiene su propio Analysis and Security Engine). Descargamos juego de opciones y configuraciones. Las la versin 1.3.9 de BASE desde el sitio web opciones y configuraciones predeterminadas del proyecto. Para comenzar con este sisdeberan bastar como punto de partida, pero tema necesitamos tener instalado Apache y para sacar el mximo partido a nuestro IDS PHP en el servidor. BASE depende adems debemos invertir algn tiempo en la de ADOdb [4] para el acceso a la base de configuracin del preprocesador. En particudatos a travs de PHP. Por razones de segurilar, el preprocesador sfPortscan puede genedad y rendimiento, siempre es mejor instarar falsos positivos si se configura de forma larlo todo en un sistema distinto del sensor inadecuada. Si comenzamos a recibir falsos de Snort. positivos, podemos deshabilitar fcilmente Ninguna consola de administracin es sfPortscan desde snort.conf. buena si no podemos acceder a ella cuando En el caso de servidores con poca RAM, el IDS est ocupado con otro trfico. A veces podramos tener que ajustar algunas confilo mejor es tener una segunda interfaz de red guraciones relacionadas con la memoria del en el sensor de Snort dedicada especialpreprocesador. Por ejemplo, el preprocesamente para la monitorizacin y la gestin. dor frag3 usa 64MB de RAM de forma predeUna vez instalados los paquetes de Apache, terminada para el almacenamiento y reenPHP y ADOdb, hemos de descomprimir los samblado del trfico fragmentado. Aunque fuentes de BASE en /var/www/base. 64MB no parezca mucho para un servidor LLegados a este punto, cambiamos los de hoy da, se puede apreciar que, aapermisos del directorio /var/www/base de diendo varios procesadores, se puede llegar modo que todo el mundo pueda escribir en a hacer mella en el rendimiento de un servil (chmod 777). Es una prctica terrible en dor. Por contra, si se dispone de una canticuanto a seguridad se refiere, pero slo lo dad de RAM ms que suficiente, podemos necesitaremos as durante el proceso de incrementar la memoria disponible para configuracin. Luego podemos dirigirnos a garantizar que el trfico fragmentado no se nuestra pgina web de BASE, http:// convierte en un problema en entornos con nuestro_servidor/base, y configurar el acceso una carga elevada.

Mejorando el Servidor
Para instalar un servidor de Snort es importante tener en cuenta qu trafico esperamos manejar. Snort puede ejecutarse en casi cualquier tipo de hardware. Pero de todos modos, si queremos tener un IDS rpido y fiable sin un alto porcentaje de paquetes perdidos, Snort necesitar un procesador relativamente potente. Sobra decir que necesitaremos adems espacio de almacenamiento para los registros y alertas. El elemento ms crtico, sin embargo, es una buena interfaz de red. Siempre que nos sea posible, nos aseguraremos de que la interfaz de red es dedicada, y nunca integrada en la placa base. La mayora de los fabricantes actuales ofrecen una tarjeta de red especial para servidores, con un procesador integrado especficamente diseado para el procesamiento del trfico de red.

Registros y Alertas
Nuestro IDS ya est marcando y registrando trfico, y guardando alertas en la base de datos MySQL. Tener una base de datos llena de alertas y trfico registrado es estupendo, sin embargo, recibir una alerta en nuestro escritorio cuando alguien nos escanea los puertos es mejor an. Por desgracia, Snort no proporciona ninguna solucin integrada para enviar alertas a un escritorio remoto. Como ocurre con

Listado 1: Dependencias de Snort


Libpcap Libpcap-dev PCRE PCRE-dev Libnet-1.0.2.a MySQL-Server-5.0 (para MySQL) MySQL-client (para MySQL) MySQL-dev (para MySQL)

64

Nmero 46

WWW.LINUX-MAGAZINE.ES

ADMINISTRACIN Snort

a la base de datos (Figura 4). Habremos de introducir la ruta a los archivos de ADOdb, as como el nombre del servidor MySQL, el nombre de usuario y la contrasea. Si la pgina web de BASE dice que no tiene permiso de escritura sobre los archivos de configuracin, comprobaremos el chmod que acabamos de ejecutar. BASE aade contenido a la base de datos MySQL para registrar los reportes y, una vez completados stos, la instalacin estar completa. Si tenemos problemas, probablemente tengamos que descomentar la extensin mysql.so de nuestro archivo php.ini. No hay que olvidar restablecer los permisos al directorio /var/ www/base para que sea legible por nuestro servidor Apache. Es importante que destaquemos que BASE no proporciona ninguna seguridad integrada para la interfaz web. Por lo que, de ser posible, habilitaremos SSL y nos aseguraremos de que hay un archivo .htpasswd en el directorio de BASE. Adems de en la base de datos, encontraremos registros y alertas en /var/log/snort. Estos archivos de registro contienen los datos de registro completos en formato tcpdump. Si as lo quisisemos, podramos escribir un script para informarnos cada vez que se registra una nueva alerta. Para trabajar con estos archivos, usamos snort -r para procesar el archivo tcpdump y convertirlo en algo ms comprensible. Los parmetros -vd proporcionan informacin adicional. Para facilitar un poco las cosas, Snort soporta adems el uso de BPF [5] (Berkeley Packet Filter) para filtrar la salida de la lnea de comandos.
snort -vd -rU snort.log.1206804587U tcp and src port 22

Listado 2: Dependencias de BASE


apache(-ssl) php5 php5-mysql php5-gd libphp-adodb

snort -vd -rU snort.log.1206804587U not host 192.168.0.1

Prevencin o Deteccin
Snort ofrece varias opciones para la prevencin (y deteccin) de intrusiones. Los tres modos principales para la prevencin de intrusiones son el filtrado integrado, la cooperacin con un cortafuegos existente basado en iptables y el modo TCP-RST. Cuando Snort trabaja como filtro integrado, todo el trfico debe pasar a travs del sistema con Snort antes de que llegue a la red interna. Si el trfico dispara una regla de Snort, se desechan los paquetes que la activaron. La solucin integrada ofrece seguridad avanzada a modo de cortafuegos con un juego de reglas actualizado regularmente. An con todo, la prevencin de intrusiones puede impedir el acceso a los sistemas debido a falsos positivos, o ralentizar la red en caso de que haya ms trfico del que el sensor de Snort fuese capaz de manejar. Para el modo integrado, tendremos que aadir enable-inline a la hora de hacer ./configure. Si ya disponemos de un cortafuegos basado en iptables, podemos configurar Snort para modificar reglas dinmicamente. La opcin de iptables reduce algunos de los retardos en el trfico entrante, pero en general, el sistema ser ms lento en la respuesta a los ataques. Cada vez que el trfico malicioso dispara una alerta, Snort enva un comando al sistema que tiene iptables para que bloquee al atacante. Este estilo de IPS, si no se configura correctamente, podra ser manipulado por un atacante con dotes creativas para provocar una denegacin de servicio a nuestros propios sistemas. Si un atacante falsease trfico malicioso para que pareciese provenir de la pasarela de nuestro proveedor de servicios de internet, o desde nuestro servidor de DNS, podra acabar poniendo servicios necesarios en la lista negra. Para combatirlo, usamos una lista blanca con direcciones que nunca banearemos. Como contrapartida, un atacante que conociese alguna de las direcciones de nues-

tra lista blanca podra falsear ataques para que pareciesen venir desde una direccin en la que confiamos, sin temor a quedar bloqueado. La ltima opcin es permitir a Snort desconectar las conexiones no deseadas mediante el envo de paquetes TCP-RST (a travs del parche flexresp2). Con esto podemos terminar una conexin no deseada desde ambos extremos de la misma. De todas formas, esta solucin provoca una condicin de carrera entre nuestro IPS y el trfico malicioso. El IPS tratar de cerrar la conexin antes de que el atacante complete el ataque. El atacante tiene una ventaja en este caso, debido a que el trfico malicioso ya se encuentra dentro de nuestra red antes de que Snort pueda actuar. Este modo de operar previene ciertos ataques, pero puede resultar menos fiable que las otras tcnicas. La configuracin de nuestro IDS/IPS depender de nuestros requisitos en materia de seguridad. Si pretendemos instalar un Snort como IPS, primero probaremos el servidor en modo IDS hasta haber ajustado bien la configuracin y haber reducido el nmero de falsos positivos. Una vez satisfechos con la configuracin, ya podemos dejar que Snort asuma su nuevo rol de sistema de prevencin.

Conclusin
Snort tiene muchas otras funcionalidades an por descubrir. Por ejemplo, nunca mencionamos el cerdito en arte ASCII retro (Figura 5). Hay muchos libros y recursos en lnea que nos ayudarn a iniciarnos en el sistema de deteccin de intrusos Snort. El sitio web del proyecto Snort contiene un gran nmero de documentos para ayudarnos a resolver problemas. Tambin aqui disponemos de un foro en el que encontraremos noticias y asisI tencia al usuario.

Qu es MD5?
MD5 es una funcin de suma criptogrfica que proporciona una suma de 128 bits basada en el contenido de un archivo. Al descargar un programa o un documento, podemos usar el comando md5sum para garantizar que el archivo descargado es idntico al original. Md5sum compara el valor de la suma de la descarga con una suma MD5 proporcionada por la versin oficial. Son muchos los proyectos de software que proporcionan sumas MD5 de sus binarios. El MD5 normalmente se encuentra en la seccin de descargas del sitio web del proyecto. Esta comprobacin nos puede ayudar a evitar la instalacin de software daado o malicioso.

RECURSOS
[1] Pgina de inicio de Snort: http://www. snort.org [2] Sourcefire: com

http://www.sourcefire.

[3] BASE: Basic Analysis and Security Motor: http://base.secureideas.net [4] ADOdb, librera de abstraccin para bases de datos para PHP: http:// adodb.sourceforge.net [5] BPF (Berkeley Packet Filter): http:// tcpdump.org

66

Nmero 46

WWW.LINUX-MAGAZINE.ES

También podría gustarte