Detección de Intrusiones con SNORT

October 6, 2017 | Author: Jorge Carlos Pescador C | Category: Firewall (Computing), Technology, World Wide Web, Server (Computing), Internet Protocols
Share Embed Donate


Short Description

Descripción: Búsqueda de ataques ocultos con el sistema de detección de intrusos de SNORT...

Description

ADMINISTRACIÓN • Snort

Detección de Intrusiones con Snort

SEGURIDAD SNORT Búsqueda de ataques ocultos con el sistema de detección de intrusos Snort. POR CHRIS RILEY

H

pcphotos, Fotolia

ace poco implementamos un Sistema de Detección de Intrusos (IDS) para una granja de webs alojada remotamente. Tras la configuración inicial, comenzamos a hacer pruebas y a optimizar el sistema. Tan pronto como se conectó, detectamos un tipo de tráfico que no debería pasar del DMZ. El cortafuegos controlado por el ISP estaba mal configurado y permitía la entrada de casi todo el tráfico. Durante el poco tiempo en que estuvo el test en funcionamiento, el IDS registró un gran número de escaneos de puertos e intentos de acceso a los servidores principales. Era

60

Número 46

obvio, observando estos logs, que los servidores no estaban recibiendo la atención 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 más básico, lo que un IDS hace es capturar todo el tráfico de una red. Luego compara el contenido de los paquetes con reglas específicas para ver si existen vulnerabilidades conocidas o código malicioso.

WWW.LINUX-MAGAZINE.ES

Cada vez que el IDS encuentra una coincidencia en una regla, se dispara una acción preconfigurada. La acción varía dependiendo de la configuración de dicha regla, aunque en modo IDS básico, el sistema simplemente registra el tráfico peligroso o envía una alerta. Un sensor, es decir, un equipo situado en el perímetro de la red, permanece vigilante al tráfico 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 código abierto, y al igual que otros proyectos de código abierto, cuenta ahora con una rama corporativa, Sourcefire [2]. Lo bueno es que Snort sigue estando disponible bajo licencia GPL.

Snort • ADMINISTRACIÓN

En este artículo explicamos cómo usar Snort para vigilar nuestra red.

Instalación La instalación de Snort suele ser sencilla. Quien tenga un gestor de paquetes .dev o .rpm debería encontrar a Snort entre los paquetes disponibles para su distribución; aunque sea una versión algo más antigua. En el momento de escribir estas líneas, la última versión es la 2.8.3.1. Instalarlo desde las fuentes no es tan sencillo como hacerlo con apt-get, pero dispondremos de muchas más opciones para la configuración 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 dónde nos dejará los registros y las alertas. Además, siempre podemos registrarlo todo en /var/log/snort/ o configurar una ruta escalable más flexible. Snort soporta una amplia variedad de bases de datos que nos permite centralizar fácilmente la información. La elección dependerá de lo que queramos hacer y de la cantidad de tráfico con la que pensemos trabajar. Un cálculo sencillo puede ser multiplicar por 10 el nivel de tráfico estimado. La mayoría de las veces la gente se sorprende de cómo un mínimo tráfico 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 compilación, 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 configuración de Snort. (Listados 1 y 2). Es posible además que tengamos problemas con el tanto gratuita como de pago, dependiendo archivo libpcap.so. En determinadas distride cómo de actualizado necesitemos nuestro buciones tenemos que recrear este enlace juego de reglas. Las reglas para los miembros simbólico mediante con suscripción de pago se actualizan 30 días antes que las de los usuarios normales. ln -sU Es mejor no usar las reglas proporcionadas /usr/lib/libpcap.so.U por la versión liberada, ya que caducan rápi/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 configuración de la base de datos MySQL. olvidarse de la comprobación del tar con Hay que crear un usuario para Snort (no md5sum. querremos que el servicio se ejecute como Preparación 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 básico, ha llegado el momento de preparar la useradd -g snortgrp snortusr base de datos. Una vez tengamos en ejecución 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 configuración. en el directorio desde el que hemos descomLa configuración 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 contraseña adecuada, crear la para los archivos de configuración, 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 recién 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 línea 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 contraseña del usuario touch /var/log/snort/alert root y entramos al intérprete de mysql>. En chown -R snortusr.snortgrpU él introducimos los siguientes comandos /var/log/snort para la finalización del primer apartado de la cp etc/* /etc/snort/ configuración (hemos de asegurarnos de que cada línea 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 contraseñas trarnos. El sitio ofrece opciones de registro que creemos aguantarán bien un posible ata-

WWW.LINUX-MAGAZINE.ES

Número 46

61

ADMINISTRACIÓN • Snort

configuración de Snort. El archivo principal de configuración, snort.conf (Figura 1), se encuentra en Figura 2: Configuración de la conexión MySQL en snort.conf. el directorio /etc/ snort. Abrimos este que por fuerza bruta. Se recomienda usar un archivo con un editor de nuestra elección y mínimo de ocho caracteres y que contengan echamos un vistazo a las distintas secciones. mayúsculas, minúsculas y caracteres espeCon el archivo de configuración podemos ciales. usar muchos trucos útiles para la configuración de nuestro IDS. Por ejemplo, create database snort; necesitaremos añadir información 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 tráfico adecuado, las variables HOME_NET y (‘ConTR4sEña_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 tráDELETE, UPDATE on snort.* toU fico originado en el rango de IPs 192.168.0.1snort; 255 se considerará tráfico interno. Estos exit detalles variarán dependiendo de cada configuración. Si en nuestra red interna hay Cada uno de los comandos debería devolver varias subredes, podemos añadirlas todas una respuesta Query OK. separándolas con comas. La entrada EXTEREn la segunda parte de la configuración le NAL_NET es un listado de direcciones espepasamos al intérprete de MySQL un script cíficas que se considerarán externas. La sencillo. Hemos de asegurarnos de que nos forma más sencilla de configurarla es encontramos en el directorio donde descomusando el valor !$HOME_NET, que Snort primimos Snort. Ejecutamos entonces el entenderá como “cualquier dirección distinta siguiente comando: de HOME_NET”. Especificamos la ubicación de las reglas de mysql -u root -p schemasU Snort mediante el archivo de configuración. /create_mysql snort Suponiendo que hemos descargado las reglas en /etc/snort/rules, añadimos 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 intérprete de dar la información 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 ción para configurar la salida de los plugins. la estructura de tabla con los siguientes Debemos descomentar la línea output datacomandos: base: log,mysql ~ y reemplazarla por la localización de la base de datos MySQL show databases; (Figura 2). use snort; Una vez finalizada la configuración, ya show tables; tenemos la base de un servidor funcional. De exit todas formas, aún hay que configurar Snort para que se inicie durante el arranque del sisDespués de preparar la base de datos, ya estatema y asegurarnos de que se ejecuta bajo la mos listos para empezar a configurar Snort. recién creada cuenta del usuario snortusr. Llegados a este punto, podemos probar Configuración de Snort Snort desde la línea 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

62

Número 46

WWW.LINUX-MAGAZINE.ES

las credenciales proporcionadas y comenzará a registrar o alertarnos sobre todo el tráfico capturado. Al terminar, mostrará estadísticas sobre la sesión (Figura 3). El reporte en pantalla no está mal, pero tampoco es la mejor solución. 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 líneas: #!/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 simbólicos necesarios para los distintos niveles de ejecución. El proceso puede diferir dependiendo de la distribución de Linux que estemos usando.

Reglas para Snort Snort proporciona una selección de reglas de filtrado para el tráfico no deseado. Las mayoría de las reglas de Snort son de fácil comprensión y modificación. Cada regla consta de dos secciones: la cabecera y las opciones. La cabecera describe el mensaje que se mostrará al dispararse la acción. La opción contiene palabras clave para indicar a Snort

Figura 3: Snort muestra estadísticas sobre la sesión al finalizar.

Snort • ADMINISTRACIÓN

cómo debe inspeccionar el paquete, así como referencias útiles para la investigación, que se mostrarán 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 sólo el tráfico proveniente de las redes externas (desde cualquier puerto) y dirigido a los servidores http internos (a los puertos http configurados). Aunque esta declaración de alerta podría parecer obvia, a veces puede que sólo queramos registrar el tráfico en la base de datos, o incluso hacer cosas más 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 tráfico 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 realizaría ninguna acción. Nuestra regla especifica TCP, perfectamente estándar para el tráfico http. La siguiente parte de la cabecera llama a algunas de las variables que definimos en el archivo de configuración de Snort. La regla examinará el tráfico proveniente de la variable $EXTERNAL_NET desde cualquier puerto. La flecha “->” indica el sentido del tráfico. En este caso, la regla es aplicable a todo lo que venga desde cualquier dirección de $EXTERNAL_NET y cualquier puerto de $HTTP_PORTS. El sentido del tráfico es muy importante. En este caso, las respuestas provenientes de los servidores $HTTP_SERVERS serán ignoradas, ya que no concuerdan con el sentido indicado en la regla.

El resto ya son las opciones de la regla. La sección de opciones comienza diciéndole 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: Configuración del acceso a MySQL desde la página de registro o la base de configuración BASE. datos, y también en la alerta. listado de reglas. Creando un listado más Después de este comando llega la parte centralizado reducimos la cantidad de más importante de las opciones de la regla: paquetes perdidos y mejoramos el rendila parte encargada de decidir el tráfico a miento. Las reglas que dejaremos activas seleccionar. La etiqueta flow indica a Snort serán las que dependan de la infraestructura que sólo 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 innecesesión. Este requisito evita que Snort exasaria, desactivamos todas las reglas sobranmine también el saludo de tres fases SYN, tes para servicios y protocolos que en realiSYN-ACK, ACK que inicializa la conexión. En dad no usamos. un IDS con mucha carga, eliminar de la regla Por defecto ya hay varias reglas deshabilide comprobación el tráfico 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 sección content es donde verdaderapropósitos específicos. 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 información queta content y la comparará con las peticiosobre servicios específicos. 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 mayoría de los sistemas ya son inmuhttp a la escucha en puertos distintos del 80 nes a este tipo de ataques, pero aún así se (por ejemplo, el 8080), tendríamos que edisiguen viendo muchos con la intención 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 más, tendríamos que modificar cada regla en a la regla que debe ignorar la capitalización cada actualización 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 mación 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 más fácil editamos el archivo snort.conf del siguiente explorarlos y configurarlos a través del modo: archivo classifications.config. Para ver cómo 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 tráfico var HTTP_PORTS [80,8080] entrante. También 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

Número 46

63

ADMINISTRACIÓN • Snort

El archivo snort.conf incluye también variables predefinidas para los servicios HTTP, AIM y Oracle. Además podemos añadir nuestras propias variables en caso de planear usarlas con otros servicios. Proporcionar a Snort la información sobre dónde y cómo se configuran los servicios de nuestra red permite a nuestro IDS reducir la sobrecarga, restringiendo las comprobaciones de tráfico a una serie de paquetes determinados. ¿Para qué vamos a comprobar el tráfico SMTP dirigido a un sistema que sólo ofrece servicios de SSH o FTP? En redes de mayor tamaño, nunca se puede estar seguro al 100% de qué tráfico viaja por los cables. Podría resultar que hay un servicio SMTP ejecutándose en un esquivo servidor, en lo más recóndito de la empresa, desde los inicios de su historia. Snort también nos permite crear reglas personalizadas. La mejor forma de aprender a crear nuevas reglas es viendo una ya hecha. Después de examinar unas pocas, podemos escoger alguna que se parezca mucho a lo que necesitamos y modificarla. Lo más frecuente es añadir las nuevas reglas personales al archivo local.rules para probarlas. Haciéndolo, las protegemos de sobreescrituras producidas al actualizar un nuevo juego de reglas. Las reglas personales nos vienen muy bien en situaciones en las que aún no se ha publicado el parche para alguna vulnerabilidad conocida. Al añadir una de estas reglas, dotamos a nuestro IDS/IPS de una capa adicional de protección o, al menos, de un sis-

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 rápido y fiable sin un alto porcentaje de paquetes perdidos, Snort necesitará un procesador relativamente potente. Sobra decir que necesitaremos además espacio de almacenamiento para los registros y alertas. El elemento más crítico, 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 mayoría de los fabricantes actuales ofrecen una tarjeta de red especial para servidores, con un procesador integrado específicamente diseñado para el procesamiento del tráfico de red.

64

Número 46

tema de detección por si el problema aparece.

Los Preprocesadores de Snort Los preprocesadores, los cuales podemos activar y desactivar a través de snort.conf, permiten a Figura 5: Arte ASCII de la vieja escuela: Ojo al cerdito de Snort la manipulación del tráfico la izquierda. entrante. Snort activa automáticamente varios preprocesadores para el tramuchos otros proyectos *nix, sin embargo, tamiento del tráfico fragmentado, la inspeces fácil hacer que Snort interactúe con otras ción del flujo con control de estado, la moniutilidades. Dos de los posibles candidatos torización del rendimiento, la decodificación son Swatch y Logsurfer. del tráfico RPC, la monitorización del tráfico Hay otros productos disponibles para la ftp/telnet/SMTP/DNS/SMB y el escaneo de visualización de los datos de Snort en forma puertos. Hay incluso un preprocesador espede gráficos y estadísticas. Uno de los sistecialmente diseñado para el troyano Back Orimas más populares es BASE [3] (Basic fice. Cada preprocesador tiene su propio Analysis and Security Engine). Descargamos juego de opciones y configuraciones. Las la versión 1.3.9 de BASE desde el sitio web opciones y configuraciones predeterminadas del proyecto. Para comenzar con este sisdeberían bastar como punto de partida, pero tema necesitamos tener instalado Apache y para sacar el máximo partido a nuestro IDS PHP en el servidor. BASE depende además debemos invertir algún tiempo en la de ADOdb [4] para el acceso a la base de configuración del preprocesador. En particudatos a través 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 fácilmente Ninguna consola de administración 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 tráfico. A veces podríamos 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 monitorización y la gestión. 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 tráfico fragmentado. Aunque fuentes de BASE en /var/www/base. 64MB no parezca mucho para un servidor LLegados a este punto, cambiamos los de hoy día, se puede apreciar que, añapermisos 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 serviél (chmod 777). Es una práctica terrible en dor. Por contra, si se dispone de una canticuanto a seguridad se refiere, pero sólo lo dad de RAM más que suficiente, podemos necesitaremos así durante el proceso de incrementar la memoria disponible para configuración. Luego podemos dirigirnos a garantizar que el tráfico fragmentado no se nuestra página web de BASE, http:// convierte en un problema en entornos con nuestro_servidor/base, y configurar el acceso una carga elevada.

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

WWW.LINUX-MAGAZINE.ES

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)

ADMINISTRACIÓN • 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 contraseña. Si la página web de BASE dice que no tiene permiso de escritura sobre los archivos de configuración, comprobaremos el chmod que acabamos de ejecutar. BASE añade contenido a la base de datos MySQL para registrar los reportes y, una vez completados éstos, la instalación estará completa. Si tenemos problemas, probablemente tengamos que descomentar la extensión 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. Además 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 quisiésemos, podríamos 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 más comprensible. Los parámetros -vd proporcionan información adicional. Para facilitar un poco las cosas, Snort soporta además el uso de BPF [5] (Berkeley Packet Filter) para filtrar la salida de la línea de comandos. snort -vd -rU snort.log.1206804587U tcp and src port 22

¿Qué es MD5? MD5 es una función de suma criptográfica 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 idéntico al original. Md5sum compara el valor de la suma de la descarga con una suma MD5 proporcionada por la versión oficial. Son muchos los proyectos de software que proporcionan sumas MD5 de sus binarios. El MD5 normalmente se encuentra en la sección de descargas del sitio web del proyecto. Esta comprobación nos puede ayudar a evitar la instalación de software dañado o malicioso.

66

Número 46

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

Prevención o Detección Snort ofrece varias opciones para la prevención (y detección) de intrusiones. Los tres modos principales para la prevención de intrusiones son el filtrado integrado, la cooperación con un cortafuegos existente basado en iptables y el modo TCP-RST. Cuando Snort trabaja como filtro integrado, todo el tráfico debe pasar a través del sistema con Snort antes de que llegue a la red interna. Si el tráfico dispara una regla de Snort, se desechan los paquetes que la activaron. La solución integrada ofrece seguridad avanzada a modo de cortafuegos con un juego de reglas actualizado regularmente. Aún con todo, la prevención de intrusiones puede impedir el acceso a los sistemas debido a falsos positivos, o ralentizar la red en caso de que haya más tráfico del que el sensor de Snort fuese capaz de manejar. Para el modo integrado, tendremos que añadir — enable-inline a la hora de hacer ./configure. Si ya disponemos de un cortafuegos basado en iptables, podemos configurar Snort para modificar reglas dinámicamente. La opción de iptables reduce algunos de los retardos en el tráfico entrante, pero en general, el sistema será más lento en la respuesta a los ataques. Cada vez que el tráfico malicioso dispara una alerta, Snort envía un comando al sistema que tiene iptables para que bloquee al atacante. Este estilo de IPS, si no se configura correctamente, podría ser manipulado por un atacante con dotes creativas para provocar una denegación de servicio a nuestros propios sistemas. Si un atacante falsease tráfico malicioso para que pareciese provenir de la pasarela de nuestro proveedor de servicios de internet, o desde nuestro servidor de DNS, podría 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-

WWW.LINUX-MAGAZINE.ES

tra lista blanca podría falsear ataques para que pareciesen venir desde una dirección en la que confiamos, sin temor a quedar bloqueado. La última opción es permitir a Snort desconectar las conexiones no deseadas mediante el envío de paquetes TCP-RST (a través del parche flexresp2). Con esto podemos terminar una conexión no deseada desde ambos extremos de la misma. De todas formas, esta solución provoca una condición de carrera entre nuestro IPS y el tráfico malicioso. El IPS tratará de cerrar la conexión antes de que el atacante complete el ataque. El atacante tiene una ventaja en este caso, debido a que el tráfico 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 técnicas. La configuración 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 configuración y haber reducido el número de falsos positivos. Una vez satisfechos con la configuración, ya podemos dejar que Snort asuma su nuevo rol de sistema de prevención.

Conclusión Snort tiene muchas otras funcionalidades aún por descubrir. Por ejemplo, nunca mencionamos el cerdito en arte ASCII retro (Figura 5). Hay muchos libros y recursos en línea que nos ayudarán a iniciarnos en el sistema de detección de intrusos Snort. El sitio web del proyecto Snort contiene un gran número de documentos para ayudarnos a resolver problemas. También aqui disponemos de un foro en el que encontraremos noticias y asis■ tencia al usuario.

RECURSOS [1] Página 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, librería de abstracción para bases de datos para PHP: http:// adodb.sourceforge.net [5] BPF (Berkeley Packet Filter): http:// tcpdump.org

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF