LLOPIS - Sistema de Monitorización Del IDS Snort
LLOPIS - Sistema de Monitorización Del IDS Snort
LLOPIS - Sistema de Monitorización Del IDS Snort
SISTEMA DE
MONITORIZACIÓN DEL
IDS SNORT
2016/2017
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Resumen
Durante los últimos años, los ataques cibernéticos han sufrido un importante
incremento, llegando a generar pérdidas millonarias a las organizaciones afectadas. A
su vez, las técnicas de ataque han aumentado en diversidad, además de ser cada vez
más sofisticadas e inteligentes.
Así pues, el objetivo de este trabajo será el de realizar un servidor centralizado que
reciba datos estadísticos del IDS Snort y que estos se muestren en una interfaz gráfica
para simplificar el estudio del rendimiento, con el fin de optimizar el funcionamiento
del sistema IDS.
3
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Abstract
In recent years, cyber-attacks have experienced a significant increase, generating
millions in losses to the organizations concerned. In turn, attack techniques have
increased in diversity, being more sophisticated and intelligent.
A good alternative to improve the security of our data would be the installation of
IDS or Intrusion Detection Systems, whose main function is to detect unwanted access
or anomalous behavior in our network.
This project will study the operation of IDS Snort, an intrusion detection system
based on network which detects possible attacks by analyzing each packet of network
traffic with a rules engine of known attacks.
The main problem of IDS systems, and motivation of this work, is that when they
work with a quantity of traffic that they can not maintain the rhythm of the real-time
analysis of the packages, they begin to let some of them go unanalyzed. Therefore, an
unusual traffic peak can be used to mask a cyber-attack. Maintaining optimum
performance of the IDS system is therefore a fundamental task if you want to detect all
attacks and not go unnoticed.
Thus, the aim of this work is to create a centralized server which receives statistical
data from the Snort IDS and this data is shown in a graphical interface to simplify the
study of the performance, in order to optimize the operation of the IDS system.
Tabla de contenidos
1. Introducción ........................................................................................... 12
1.1. Marco de estudio y justificación ....................................................................... 12
1.2. Objetivos del trabajo ......................................................................................... 13
1.3. Enfoque y método seguido................................................................................ 14
1.4. Breve resumen de los siguientes capítulos de la memoria ............................... 15
2. Estado del Arte ....................................................................................... 16
2.1. Sistema de Detección de Intrusos ..................................................................... 16
2.1.1. Funcionamiento y características ................................................................. 17
2.1.2. Tipos de IDS .................................................................................................. 18
2.2. SNORT .............................................................................................................. 19
2.2.1. Funcionamiento ............................................................................................ 19
2.2.2. Módulos y componentes .............................................................................. 20
2.3. Estado del Arte.................................................................................................. 21
3. Análisis del Problema .............................................................................. 29
3.1. Análisis de las soluciones ................................................................................. 32
3.2. Solución propuesta .......................................................................................... 32
4. Diseño de la Solución ............................................................................... 35
5. Implementación...................................................................................... 38
5.1. Primera parte: envío de datos estadísticos de Snort ....................................... 38
5.2. Segunda parte: Implementación de la herramienta ......................................... 41
6. Pruebas con Datos Reales ......................................................................... 53
6.1. Detectando ataques e intrusiones con la herramienta ..................................... 57
7. Conclusión ............................................................................................ 59
8. Trabajos futuros..................................................................................... 60
9. Glosario/Diccionario................................................................................. 61
10. Referencias............................................................................................ 62
11. ANEXO ................................................................................................ 63
11.1. Instalación Snort en el cliente ......................................................................... 63
11.1.1. Sobre esta guía ............................................................................................. 63
11.1.2. Instalando Ubuntu ....................................................................................... 63
11.1.3. Configuración de la tarjeta de red ................................................................ 63
11.1.4. Instalando los Pre-Requisitos de Snort ....................................................... 64
11.1.5. Instalando Snort........................................................................................... 65
11.1.6. Configurando Snort en Modo NIDS............................................................. 65
11.1.7. Probando Snort ............................................................................................ 68
7
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Lista de figuras
Ilustración 1. Esquema proyecto
Ilustración 2. Ubicación de IDS antes y después de un Firewall y en varios
segmentos de red
Ilustración 3. Interfaz de SAM (Snort Alert Monitor)
Ilustración 4. Interfaz de Scanmap3d
Ilustración 5. Interfaz Cyberprobe
Ilustración 6. Interfaz BASE
Ilustración 7. Gráficas 1 PMGraph
Ilustración 8. Gráficas 2 PMGraph
Ilustración 9. Gráficas 3 PMGraph
Ilustración 10. PMGraph
Ilustración 11. Zoom out PMGraph
Ilustración 12. Boceto aplicación web
Ilustración 13. Esquema diseño de la herramienta
Ilustración 14. Configuración preprocesador perfmonitor
Ilustración 15. Configuración rendimiento reglas y preprocesadores
Ilustración 16. Samba: configuración carpeta compartida
Ilustración 17. Ejecución globalStats-agent.py en el inicio del sistema con
rc.local
Ilustración 18. Programación en el crontab para el reinicio de Snort
Ilustración 19. Programación en el crontab para la ejecución de los agentes
Ilustración 20. Muestra de código snortperformance.go
Ilustración 21. Muestra de código spDB.go
Ilustración 22. Muestra de código router.go.
Ilustración 23. Muestra de código webController.go
Ilustración 24. Muestra de código index.html
Ilustración 25. Muestra de código main.css
Ilustración 26. Muestra de código app.js
Ilustración 27. Ejecución de la herramienta SnortPerformance
Ilustración 28. Interfaz SnortPerformance sin datos
Ilustración 29. Cuadro de información SnortPerformance
Ilustración 30. Gráficas 1 SnortPerformance
Ilustración 31. Valores de los datos sobre la gráfica
Ilustración 32. Gráficas 2 SnortPerformance
Ilustración 33. Deshabilitación de parámetros sobre las gráficas.
Ilustración 34. Gráficas 3 SnortPerformance
Ilustración 35. Interfaz estadísticas de reglas sin datos
Ilustración 36. Interfaz estadísticas de preprocesadores sin datos
Ilustración 37. Gráficas estadísticas e histórico de datos de reglas
Ilustración 38. Gráficas de estadísticas de preprocesadores
Ilustración 39. Histórico de datos estadísticos de preprocesadores
Ilustración 40. Diseño de la aplicación web
Ilustración 41. Gráfica 1 SnortPerformance con datos reales
Ilustración 42. Gráfica 2 SnortPerformance con datos reales
Ilustración 43. Gráfica 3 SnortPerformance con datos reales
Ilustración 44. Histórico de datos estadísticos reales
9
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
1. Introducción
1.1. Marco de estudio y justificación
Las propiedades de gran valor necesitan ser protegidas, tanto de posibles robos como
de destrucción de las mismas. Es por esto que se instalan alarmas en hogares y en
vehículos.
En el momento en que la alarma detecta alguna acción sospechosa, puede avisar en
tiempo real a los propietarios y a la policía para que los daños sean los menores
posibles.
La misma protección debería de ser aplicada en los sistemas informáticos, y con ello, a
los datos, ya que hoy en día, es una información muy valiosa, sobre todo para las
empresas.
Por esta razón, se deberían de instalar unas “alarmas” en las redes y en el momento en
que se detecte alguna acción sospechosa, avisar en tiempo real para poder detenerla,
con el fin de mantener los sistemas seguros y libres de intrusiones. Esto sería la función
de los IDS: Intrusion Detection System, o Sistemas de Detección de Intrusos.
Más concretamente, un IDS es un programa de detección de accesos no autorizados a
un host o a una red. El funcionamiento de esta herramienta se basa en el análisis
pormenorizado del tráfico de red, el cual se compara con una base de firmas de ataques
conocidos o comportamientos sospechosos, como puede ser el escaneo de puertos,
paquetes malformados, etc. Además, también revisa el contenido de los paquetes y su
comportamiento.
En la actualidad, por lo que se está observando, cada vez son más comunes los ataques
a toda organización de los cuales se pueda sacar beneficio. El caso más reciente y que
afectó a grandes compañías como Telefónica, la red de hospitales británica o el
ministerio del Interior ruso, es el famoso ransomware llamado “Wanna Cry”, traducido
al español “Quiero Llorar”.
El vector de entrada de este virus era mediante correos de entrada y archivos adjuntos
maliciosos, los cuales engañaban al usuario para que se descargara el fichero anexado y
lo ejecutara. Una vez infectado, Wanna Cry cifraba todos los datos del equipo afectado y
se expandía de manera lateral por toda la red, aprovechando una vulnerabilidad de los
sistemas operativos Windows, infectando así otros equipos a su alcance y una vez
infectados, repetían el mismo procedimiento pidiendo un rescate de 300 dólares por
cada equipo afectado si se querían recuperar los datos cifrados.
Con un IDS, con las firmas actualizadas de las últimas vulnerabilidades, analizando el
tráfico de la red, se hubiera podido detectar los intentos de explotación de dicha
vulnerabilidad y avisar a tiempo para que el impacto del ataque sobre la organización
fuese el menor posible.
Este proyecto se ha pensado con la finalidad de crear una aplicación web para la
monitorización de un sistema IDS Snort. A continuación, se puede observar un
esquema de la infraestructura en la que se apoyaría el proyecto:
13
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
4. Crear agentes (programas) que parseen los datos estadísticos generados por Snort y
envíen éstos a la herramienta diseñada, con el formato adecuado.
5. Diseñar una aplicación web que muestre de manera clara e intuitiva los datos sobre
el rendimiento del sistema de detección de intrusos, haciendo uso de diferentes
tipos de gráficas.
El objetivo final del trabajo es disponer de un servidor que recibirá datos estadísticos
del IDS, con el fin de analizar su rendimiento de una manera rápida y cómoda.
Diseño de la herramienta
Así pues, se procederá a configurar Snort para que genere datos estadísticos sobre su
rendimiento, y a enviar éstos a la herramienta a diseñar para que muestre estos valores
al usuario, mediante una aplicación web que ayude a los técnicos a estudiar el
funcionamiento de los sistemas IDSes.
Documentación de la herramienta
Para la realización del servidor, se hará uso de varios lenguajes de programación: para
la parte del backend, se utilizará GoLang, y para la parte del frontend, se hará uso de
HTML, CSS y JavaScript. Por otra parte, los programas o agentes encargados de
analizar y enviar los datos estadísticos a la aplicación, se desarrollarán en Python.
Finalmente, para almacenar todos los datos, se utilizará una base de datos MongoDB.
Pruebas de la herramienta
Una vez terminada la herramienta, se realizarán una serie de pruebas para comprobar
que la aplicación desarrollada cumple con sus objetivos.
1.4. Breve resumen de los siguientes capítulos de la memoria
15
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Hoy en día, “la Información” es considerada el activo más importante de las empresas.
Si la información de una organización llegara a desaparecer o cayera en manos de la
competencia, tendría un impacto crítico para la organización. Por esta razón, mantener
a salvo “la Información” es un objetivo fundamental en cualquier empresa.
La seguridad de la información se define como el conjunto de medidas preventivas y
reactivas de las organizaciones con el objetivo de resguardar y proteger la información,
buscando la preservación de su confidencialidad, disponibilidad e integridad.
Alguna de estas medidas preventivas sería la instalación de sistemas de detección de
intrusiones, considerando una intrusión, el conjunto de acciones que intentan
comprometer la integridad, confidencialidad o disponibilidad de un recurso.
Los dos grandes sistemas de detección de intrusiones son los IDSes (Intrusion
Detection System) y los IPSes (Intrusion Prevention System). El presente proyecto se
centrará en los sistemas IDS.
Un sistema de detección de intrusos o IDS es un mecanismo de seguridad que lleva a
cabo el análisis automático de parámetros que modelan la actividad de un entorno con
el propósito de detectar intrusiones. Cuando se identifica una condición anómala, el
IDS emite una alerta avisando de la posible intrusión con datos relacionados de la
misma. Por ejemplo, en el IDS Snort, que se explicará más adelante, se puede
configurar para que muestre información ampliada de las alertas que detecte,
mostrando para cada alerta los siguientes datos: tiempo, mensaje de la alerta,
clasificación, prioridad de la alerta, IP y puerto de origen/destino e información
completa de las cabeceras de los paquetes registrados:
Por otro lado, el IPS, o sistema de prevención de intrusiones, tiene como misión
realizar respuestas de contención contra posibles intrusiones, bloqueando los ataques
detectados. Como ya se ha dicho anteriormente, este tipo de software no entra en el
alcance del trabajo.
1. Antes del firewall: se analizaría todo el tráfico, tanto entrante como saliente de la
red, generando un número muy elevado de falsos positivos.
2. Después del firewall: se analizaría todo el tráfico, una vez pasado el cortafuegos,
disminuyendo la cantidad de falsos positivos.
3. Instalando un IDS previo al firewall y otro después de éste: en este caso se unen las
ventajas de las dos alternativas anteriores, pero también existe una gran desventaja,
ya que sería una opción muy costosa de controlar.
4. En el propio Firewall: obteniendo un sistema, el cual, aparte de detectar el tráfico
de red, también lo analiza.
17
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
En la figura anterior se puede observar la ubicación del IDS antes del cortafuegos y
después de él en dos segmentos de red diferentes. En el primer IDS, se analizaría todo
el tráfico, lo cual generaría una gran cantidad de falsos positivos. En los IDS de después
del firewall, se configurarían para que cada uno analizara los segmentos de red
deseados.
Por otro lado, como se ha dicho anteriormente, también sería la composición más
costosa debido al despliegue de los IDSes, su configuración en cada segmento y por
último y la más importante, el análisis de todas las alertas.
Existen diferentes tipos de IDSes, clasificados según su situación física, forma en la que
detectan las intrusiones y según su reacción al detectar un posible ataque:
HIDS (Host IDS): es un IDS particular para un servidor, sólo procesa los
datos asociados a un recurso. El IDS intentará detectar los rastros dejados
por los intrusos en el equipo atacado.
NIDS (Network IDS): es un IDS basado en red, procesa datos asociados a
varios recursos. No tienen por qué analizar el tráfico de toda la red, en él se
pueden indicar las redes o subredes a analizar. Casi ningún NIDS se
configura para que analice toda la red. Este tipo de IDS es, en la actualidad,
el más utilizado.
2.2. SNORT
Así mismo, existen herramientas complementarias a Snort que hacen que este IDS sea
un sistema muy completo y fácil de administrar. Como por ejemplo, herramientas que
almacenan las alertas detectadas por Snort en una base de datos (Barnyard2) y otras
que recogen de esta base de datos las alertas y las muestran en una interfaz gráfica de
fácil manejo (BASE). A su vez, también existen otros programas complementarios para
mostrar informes en tiempo real (ACID) o para convertir a Snort, además de IDS, en
IPS.
Snort, es un software gratuito, bajo licencia GPL y puede ser instalado tanto en
sistemas operativos Windows como en sistemas UNIX/Linux. Además, es un sistema
probado y fiable y que cuenta con un gran soporte y actualizaciones conforme se van
descubriendo nuevas vulnerabilidades a través de los distintos boletines de seguridad.
2.2.1. Funcionamiento
(https://www.snort.org/downloads)
19
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Modo NIDS: se comparan las tramas de todos los paquetes con el conjunto de
reglas o patrones que se tengan configurados, mostrando por pantalla las
coincidencias o almacenándose estas en un sistema basado en registros.
Una vez instalado, se deberán agregar los conjuntos de reglas que se quieran utilizar
para detectar las actividades sospechosas que afecten en la red. Se puede pensar que
agregando todos los conjuntos de reglas que existan, se detectarán más ataques, pero la
realidad es que no. Cuantas más reglas se añadan, más se sobrecarga el programa,
pudiendo llegar a tasas de pérdida de paquetes no analizados muy elevadas, con lo que
habrá ataques que el IDS no detecte.
En este ejemplo, se generará una alerta cada vez que alguien desde una IP externa,
desde cualquier puerto, realice una petición al puerto 80 de una IP interna.
La segunda parte de la regla indica que para que se active, en la petición debe aparecer
“/etc/passwd”, lo cual sería algo sospechoso ya que el recurso anterior es un recurso
privado.
Para comprender mejor este software, en el ANEXO se puede encontrar una guía de
instalación de Snort paso por paso. En ella se detallan las configuraciones y librerías
necesarias para el correcto funcionamiento del IDS Snort.
Snort es un sistema modular compuesto por diferentes partes, cada una encargada de
funciones independientes que dotan a este IDS de mayor dinamismo e
interoperabilidad.
1. Interfaz de red
2. Método de captura
3. Filtro BPF
4. Preprocesadores
5. Motor de reglas
6. Filtrado de eventos
7. Salida
En primera instancia, se le debe indicar a Snort en qué interfaz, o interfaces debe
analizar el tráfico y con qué métodos (DAQ, AF-PACKET, PF_RING, NFQ, otros).
Posteriormente se tendrá que aplicar un filtro BPF (Berkeley Packet Filter) o filtrado de
paquetes para cada interfaz configurada, ya que cada proceso separado tiene una
configuración diferente.
Llegado a este punto, los preprocesadores arreglan, rearman o modifican los datos para
dejarlos preparados y que posteriormente serán analizados en busca de intrusiones por
el motor de reglas. Algunos preprocesadores también pueden realizar la función de
detección de amenazas buscando anomalías en las cabeceras de los paquetes y
generando alertas en caso de encontrar algo sospechoso.
Una vez preprocesados los paquetes, estos pasan a ser analizados por el motor de reglas
predefinido, cuya función es detectar posibles intrusiones. A cada paquete analizado se
le aplican todas las reglas cargadas. Las reglas que coincidan en los paquetes ejecutarán
su acción asociada.
Una vez explicado el sistema IDS Snort, sobre el que se ha desarrollado la herramienta
de monitorización del presente proyecto, se analizarán las aplicaciones de igual o
parecidas funcionalidades que existen.
4
https://sourceforge.net/projects/snortalertmon/
21
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
5
http://scanmap3d.sourceforge.net/
6
https://sourceforge.net/projects/cyberprobe/?source=directory
Ilustración 5. Interfaz Cyberprobe
Pero sin duda, los dos complementos más utilizados de Snort, que hacen que este IDS
sea un sistema muy completo y fácil de administrar son:
BASE9 (Basic Analysis and Security Engine): se basa en el código del proyecto
Analysis Console for Intrusion Databases (ACID). Esta aplicación es
complementaria a la anterior y recoge las alertas que se almacenan en la base de
datos proporcionando una interfaz web para poder consultar y analizar las
alertas generadas por Snort de manera gráfica.
7
https://www.honeynet.org/project/Nebula
8
https://github.com/firnsy/barnyard2
9
https://sourceforge.net/projects/secureideas/
23
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Sin embargo, herramientas públicas que se centren en el rendimiento del IDS Snort,
que es el objetivo principal del presente proyecto, sólo se tiene constancia del programa
PMGraph.
25
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Para utilizar este script hay que seguir los siguientes pasos:
Donde time 300 indica que el fichero se actualice cada 300 segundos, file
/var/log/snort/stats.log es el fichero generado y pktcnt 10000 es la cantidad de
paquetes a procesar antes del tiempo indicado.
2. Instalar los paquetes necesarios en la máquina para poder ejecutar scripts
desarrollados en perl.
3. Crear la carpeta donde se alojarán los archivos html generados por PMGraph
con las gráficas del rendimiento de Snort:
mkdir /var/www/html/perfstats
27
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
La ejecución del script recopilará los últimos datos del registro generado por
Snort, el cual almacena información del rendimiento del servicio, y con estos
datos creará las gráficas en formato html en la carpeta indicada.
El uso habitual, es configurar dicho programa en el gestor de tareas o crontab para que
se ejecute cada cierto tiempo (un tiempo razonable serían 5 minutos) y las gráficas se
actualicen con los nuevos valores. Para esto, se ejecuta el comando crontab –e y se
añade la siguiente línea en el gestor de tareas para que se actualicen las gráficas cada 5
minutos:
Por otro lado, también existen herramientas gráficas genéricas que se les pueden
entregar los datos del rendimiento generados por Snort y para que generen gráficas con
estos datos, como por ejemplo Zabbix, Zenoss o Nagios.
Después de esta conclusión, se propuso la idea de realizar este trabajo. El objetivo del
mismo es la visualización de los valores estadísticos en una interfaz gráfica para
facilitar a los analistas y administradores de sistemas el estudio del rendimiento del
sistema Snort y poder optimizarlo para que funcione al 100% de sus capacidades.
29
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
runed_per_second,tcp_sessions_dropped_async_per_second,current_attribute_host
s,attribute_table_reloads,mpls_mbits_per_sec.realtime,avg_bytes_per_mpls_packet,
kpackets_per_sec_mpls.realtime,total_tcp_filtered_packets,total_udp_filtered_packe
ts,ip4::trim,ip4::tos,ip4::df,ip4::rf,ip4::ttl,ip4::opts,icmp4::echo,ip6::ttl,ip6::opts,icmp
6::echo,tcp::syn_opt,tcp::opt,tcp::pad,tcp::rsv,tcp::ns,tcp::urg,tcp::urp,tcp::trim,tcp::ec
n_pkt,tcp::ecn_ssn,tcp::ts_ecr,tcp::ts_nop,tcp::ips_data,tcp::block,total_injected_pac
kets,frag3_mem_in_use,stream5_mem_in_use
1465976758,69.897,28.518,0.040,4.538,785,164.554,42.529,37.960,40.690,10.117,299
78,29978,17.696,0,2168,0.000,0.000,0.000,0.000,0.000,0.000,0,1,0,0,1,49.941,0.00
8,50.051,28.518,0.000,0.000,0.260,28.777,785,0,0,1839,789,4.538,0.000,0.000,0.01
8,4.554,453873,1053871,0,0.000,0.000,0,0,29978,17230,7733,5086,0.000,0.850,21.6
75,0.000,0.000,0,0,0.000,0,0.000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
,0,0,26462573,
1467930600,3.114,33.651,0.060,4.717,891,161.686,46.078,31.024,35.498,33.886,6655
0,174238,147.584,0,3093,0.010,0.010,0.010,0.010,0.000,0.010,3,5,0,0,1,32.542,0.400
,67.058,33.651,0.000,0.000,7.374,41.023,891,843,1649,6277,1054,4.717,0.000,0.000,
0.147,4.862,468144,15048,0,0.000,0.000,0,0,66684,34381,22955,14894,0.000,11.326
,31.165,0.000,0.000,0,0,0.000,0,0.000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,2774,62121509,
1467930700,3.114,33.651,0.060,4.717,891,161.686,46.078,31.024,35.498,33.886,6655
0,174238,147.584,0,3093,0.010,0.010,0.010,0.010,0.000,0.010,3,5,0,0,1,32.542,0.400
,67.058,33.651,0.000,0.000,7.374,41.023,891,843,1649,6277,1054,4.717,0.000,0.000,
0.147,4.862,468144,15048,0,0.000,0.000,0,0,66684,34381,22955,14894,0.000,11.326
,31.165,0.000,0.000,0,0,0.000,0,0.000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,2774,62121509,
(…)
Por otro lado, los datos sobre el uso de las reglas y de los preprocesadores, que están
directamente relacionados con el rendimiento del IDS, y que genera el servicio de
Snort, son más fáciles de estudiar y entender, como podemos ver a continuación:
Rulestats
Preprocstats
Sin embargo, igual sólo interesaría analizar las 30 reglas que más microsegundos
tarden en analizar un paquete o comparar las veces que éstas han coincidido con el
contenido de los paquetes con las veces que han generado una alerta por dicha firma,
opciones que estarán disponibles desde la herramienta a diseñar.
31
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Requisito Descripción
R1 Recopilar todos los datos estadísticos
R2 Mostrar los datos recopilados en gráficas útiles
R3 Mantener en la interfaz gráfica un histórico de los datos estadísticos
R4 Actualización de gráficas en tiempo real sin recargar la web
Como se ha analizado en el estado del arte, existen aplicaciones, las cuales se le pueden
enviar los datos elegidos para la visualización de éstos en gráficas, pero sólo existe una
herramienta específica para la visualización de estos datos estadísticos generados por
Snort.
Ante la falta de soluciones existentes a este problema, se plantea crear una aplicación
web específica para recoger estos datos estadísticos del IDS Snort y crear gráficas para
estudiar el rendimiento, tanto del propio sistema IDS, como de las reglas y
preprocesadores cargados.
La solución propuesta en este proyecto para solventar este problema, se dividirá en dos
partes:
1. En primer lugar, se configurará Snort para que guarde los registros estadísticos
en una carpeta compartida con el servidor donde se alojará la aplicación
diseñada. A continuación, se desarrollarán unos agentes/programas que se
programarán en el gestor de tareas donde se ubique la herramienta, para que se
ejecuten cuando Snort genere los registros con los datos estadísticos del
rendimiento de la sonda.
2. En esta segunda parte, como se puede intuir, se recogerán estos datos enviados
y se almacenarán en una base de datos. A partir de esta información
almacenada, se crearán gráficas mostradas en una interfaz web para facilitar las
labores de estudio y optimización del rendimiento del IDS Snort.
Existe mucha variedad de datos que almacena Snort en sus registros sobre el
rendimiento del sistema. A continuación, se indican los distintos tipos de datos que
Snort almacena en cada uno de los tres ficheros de datos que nos interesan:
Para más información sobre estas variables se puede visitar la documentación oficial en
los siguientes enlaces:
- http://manual-snort-org.s3-website-us-east-
1.amazonaws.com/node17.html#SECTION00326000000000000000 (para las
variables de Snort.stats)
- http://manual-snort-org.s3-website-us-east-
1.amazonaws.com/node20.html#SECTION00353300000000000000 (para las
variables de Rules.stats y Preprocessor.stats)
33
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
curr_tcp_sessions_initializing, curr_tcp_sessions_established,
curr_tcp_sessions_closing, iCPUs, usr[0], sys[0], idle[0], frag3_mem_in_use,
stream5_mem_in_use
Con los valores anteriores recopilados, se diseñarán las siguientes gráficas para el
estudio del rendimiento del IDS Snort:
“Top Checks”: se mostrarán las reglas que más veces han comprobado en todo
el tráfico analizado. Además se complementa esta gráfica con el número de
veces que la regla ha coincidido y ha generado una alerta.
Para este proyecto, además de las múltiples librerías que ofrece Go,
también se hará uso de las siguientes:
10 https://www.mongodb.com/es
11 https://golang.org/
35
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
12 gopkg.in/mgo.v2
13 www.gorillatoolkit.org/pkg/mux
14 https://jquery.com/
Por otro lado, para la parte del servidor IDS, se ha instalado Snort en su versión 2.9.6.0
sobre un sistema operativo Ubuntu Server 14.04 LTS.
37
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
5. Implementación
En este capítulo se detallarán los requisitos principales para poner en funcionamiento
la herramienta diseñada y que el cliente pueda visualizar y estudiar el rendimiento de
su sistema IDS Snort de una manera sencilla y cómoda.
Dicho archivo se genera cuando se ejecuta Snort por primera vez con esta
configuración, y a partir de ese momento, se va actualizando con los nuevos
datos estadísticos calculados por Snort cada X segundos, indicados en las
opciones del propio preprocesador.
Estos dos últimos archivos, se generan cuando la sesión del servicio de Snort finaliza,
bien sea porqué se haya parado (stop) o se haya reiniciado (restart), ya que el proceso
de reiniciar conlleva parar el servicio para volverlo a iniciar.
Como se puede observar en las ilustraciones 14 y 15, se configuran estos módulos para
que guarden los ficheros con datos estadísticos en una carpeta compartida llamada
“SnortStatsCompartida”.
Una vez instalado, se añade la carpeta a compartir, con los requisitos que se requieran,
en el archivo de configuración de Samba /etc/samba/smb.conf:
Una vez realizadas estas configuraciones, se programa en el crontab del servidor donde
se alojará la herramienta, la ejecución de los agentes/programas, hechos en Python y
mencionados anteriormente, para que lean los archivos de estadísticas creados por
Snort y que envíen estos datos en formato JSON16 a la aplicación. A continuación se
enumeran los agentes a programar:
39
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
El primer agente, bastaría con ejecutarlo una vez al inicio del sistema, no hace falta
añadirlo al gestor de tareas, ya que está programado para que envíe los nuevos datos
cuando se modifique el propio archivo de estadísticas generado por Snort. Para que se
lance al inicio del sistema, se puede programar su ejecución en el archivo /etc/rc.local,
el contenido del fichero quedaría como se muestra en la siguiente figura:
Sin embargo, los otros dos agentes, se tendrían que ejecutar cuando Snort genere los
registros de las reglas y preprocesadores, que cómo se ha dicho, son generados al
finalizar la sesión del IDS. Por lo cual, se podría añadir en el gestor de tareas o crontab
del servidor IDS, que se reinicie el servicio de Snort a las 3:00 a.m. todos los días:
Y, por otro lado, programar en el gestor de tareas del servidor donde se aloja la
herramienta, la ejecución de los agentes 5 minutos más tarde, tiempo de sobra para que
Snort se reinicie y cree los ficheros con los valores estadísticos. A continuación se puede
observar cómo quedaría el gestor de tareas después de los cambios realizados:
41
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
43
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Por el momento, aún no se han recibido datos estadísticos, por tal motivo, la aplicación
aparece tan triste.
45
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Traducido al español:
preprocesador perfmonitor
config profile_rules
config profile_preprocs
SnortPerformance almacena todos los datos sobre el rendimiento del IDS Snort y
pueden ser visualizados en gráficas para un mejor estudio del estado del IDS.
En la parte inferior de la página web, puede encontrar el historial de todos los datos
almacenados.”
Pasados 5 minutos, tal y como se había configurado Snort, éste actualiza su registro de
datos sobre el rendimiento del sistema IDS, y el agente detecta esta actualización y
envía los datos a la aplicación, la cual genera las gráficas correspondientes a los valores
registrados:
Ilustración 30. Gráficas 1 SnortPerformance
Si se coloca el cursor sobre los datos de la gráfica se muestra un recuadro con los
valores exactos de las variables del dato señalado, como se puede ver a continuación:
47
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Otra funcionalidad de las gráficas y que puede ser de gran utilidad para el analista, es la
opción de deshabilitar parámetros de las mismas. Así pues, en la gráfica anterior parece
que el día 15 de Agosto a las 19:30 horas se registraron cero “Kpackets per sec”, pero,
como se puede ver en la figura siguiente, si deshabilitamos el parámetro “Avg Bytes per
Packet”, el cual tiene un valor muy alto, se observa que se registraron
aproximadamente tres “Kpackets per sec”:
Sin embargo, las pestañas “Rules Statistics” y “Preprocessor Statistics” siguen vacías, ya
que la sesión de Snort aún no ha terminado y no se han generado los registros
correspondientes al rendimiento de las reglas y preprocesadores:
49
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Para esta prueba se ha creado una regla, con identificador (sid) 10000001, para que
Snort genere alertas cuando alguien realiza un ping al servidor. Como se ha podido
observar en la figura de arriba, se ha hecho que se generen 14 alertas.
A continuación se muestran las gráficas relacionadas con el uso de los preprocesadores
en la última sesión de Snort y debajo de las gráficas, como se puede ver la ilustración
39, el histórico de todos los valores estadísticos, de más reciente a más antiguo, de los
preprocesadores utilizados:
51
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Para entender mejor como está diseñada la web, a continuación se ha creado un mapa
con todas las capturas anteriores ubicadas en su posición correspondiente de la página
web:
Remarcadas con un recuadro de color naranja se encuentran las 3 pestañas por las que
se puede ir alternando: Total Statistics, Rules Statistics y Preprocessor Statistics.
Requisito Descripción
R1 Recopilar todos los datos estadísticos
R2 Mostrar los datos recopilados en gráficas útiles
R3 Mantener en la interfaz gráfica un histórico de los datos estadísticos
R4 Actualización de gráficas en tiempo real sin recargar la web
53
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
55
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Observando las gráficas del rendimiento del IDS Snort proporcionadas por la
herramienta diseñada, es posible detectar ataques que el propio IDS no alertaría. En
este punto, se van a presentar dos posibles ataques que podrían ser detectados con un
simple vistazo de la aplicación:
Como se puede observar en la figura anterior, entre las 11:10 horas y las 14:20
horas, el sistema IDS tiene aproximadamente una tasa de paquetes sin poder
analizar del 5%, sin embargo, algo ha pasado de las 14:20 horas hasta las 14:26
horas, que ha aumentado esta tasa del 5% al 60%. Es muy probable que algún
servicio expuesto a internet de la organización haya sido víctima de un ataque DoS,
y que el aumento de paquetes descartados por el IDS se haya producido por las
múltiples peticiones originadas por los atacantes con el objetivo de vulnerar este
recurso.
57
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Como se puede observar, entre las 11:10 horas y las 14:20 horas, el sistema IDS
tiene aproximadamente una cantidad entre 30 y 50 paquetes SYN y SYN/ACK por
segundo, sin embargo, algo ha pasado a las 14:20 horas que ha aumentado este
valor de 30-50 paquetes a 100-140, y no tiende a bajar.
Los paquetes implicados, SYN y SYN/ACK, son los encargados del establecimiento
de una conexión. Un equipo cliente que quiere realizar una conexión con un
servidor, le enviará un paquete SYN a éste, y si la conexión es aceptada, el servidor
responderá al cliente con un paquete SYN/ACK.
En este caso, se debería de estudiar este incidente y comprobar qué está originando
esa cantidad tan elevada de peticiones respecto al comportamiento normal de la
organización. Al igual que en el caso anterior, se tendría que analizar y determinar
si se trata de una infección en un equipo, el cual está participando en un ataque
DDoS, o si se trata de un falso positivo.
7. Conclusión
Cada vez son más comunes los ciber ataques hacia las organizaciones con el fin de robar
información de las mismas y sacar un beneficio de ello, vendiéndola a la competencia o
pidiendo un rescate por los datos robados.
59
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
8. Trabajos futuros
A continuación se proponen una serie de mejoras para la aplicación desarrollada y
ofrecer un servicio más completo y útil para el analista:
Autenticación necesaria para acceder a las gráficas del rendimiento, para que
dicha información no sea accesible por usuarios no autorizados.
Actualización dinámica de las gráficas, mostrando datos estadísticos en tiempo
real del IDS Snort sin recargar la página web.
Poder monitorizar el rendimiento de diferentes interfaces de Snort.
Acceso a datos históricos y hacerlos visibles también en las gráficas.
Botones desplegables con consejos para mejorar el rendimiento de Snort y sacar
el máximo partido a este sistema IDS.
Generación de informes semanales con los datos más relevantes de la semana.
Añadir una opción para subir un fichero con datos estadísticos de Snort y que
sean mostrados en otra pestaña.
Notificar, vía correo electrónico, cuando se detecte algún valor anómalo,
superior o inferior al valor normal del dato.
9. Glosario/Diccionario
Ransomware: virus informático que cifra la información del equipo infectado
a cambio de un rescate.
Script: archivo de órdenes.
Back-end: motor, tecnologías en el lado del servidor.
Front-end: interfaz, tecnologías en el lado del cliente.
Firewall: sistema informático colocado entre una red privada e Internet, capaz
de mejorar la seguridad de las comunicaciones, evitando conexiones no
autorizadas.
Sniffer: analizador de paquetes.
Crontab: programa en Unix/Linux que permite la ejecución de comandos o
scripts automáticamente.
JSON (JavaScript Object Notation): formato de texto ligero para el
intercambio de datos.
Parsear: análisis sintáctico de un documento o sentencia.
61
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
10. Referencias
“The Practice of Network Security Monitoring”, Richard Bejtlich, San Francisco,
2013.
Blog de seguridad “Security Art Work” http://www.securityartwork.es/:
o “IDS en el cortafuegos”, Antonio Villalón, 2010:
http://www.securityartwork.es/2010/06/29/ids-en-el-cortafuegos/
o “Cuando un cerdo no es suficiente, monta una granja”, Nelo Belda, 2010:
http://www.securityartwork.es/2010/10/20/cuando-un-cerdo-no-es-
suficiente-monta-una-granja/
o “Cuando un cerdo no es suficiente, monta una granja (II)”, Nelo Belda,
2010: http://www.securityartwork.es/2010/10/29/cuando-un-cerdo-
no-es-suficiente-monta-una-granja-ii/
o “Cuando un cerdo no es suficiente, monta una granja (III)”, Nelo Belda,
2010: http://www.securityartwork.es/2010/11/19/cuando-un-cerdo-no-
es-suficiente-monta-una-granja-iii/
o “Evasión en IDS”, Joaquin Moreno, 2010:
http://www.securityartwork.es/2010/06/21/evasion-en-ids-i/
Presentación “Sistemas de detección de intrusos”, Antonio Villalón, Universidad
Politécnica de Madrid, Mayo 2005.
“Snort Manual”, The Snort Project: http://manual-snort-org.s3-website-us-
east-1.amazonaws.com/
Blog de seguridad “Seguridad y Redes”, Septiembre 2010:
https://seguridadyredes.wordpress.com/2010/09/23/snort-formato-tipos-e-
interpretacion-de-las-alertas-actualizacion/
Blog de seguridad “LIONSEC”, 2016: http://lionsec.net/blog/wp-
content/uploads/2016/01/ids.gif
Blog de seguridad “Sublime Robots”, artículo “Configure Snort to Run as a
NIDS”, Noah Dietrich, Octubre 2015:
http://sublimerobots.com/2015/12/snort-2-9-8-x-on-ubuntu-part-2/
Blog de desarrolladores “GenbetaDev”, artículo “MongoDB: qué es, cómo
funciona y cuándo podemos usarlo (o no)”, RUBENFA, Febrero 2014:
https://www.genbetadev.com/bases-de-datos/mongodb-que-es-como-
funciona-y-cuando-podemos-usarlo-o-no
Blog de seguridad “Guru de la Informática”, artículo “Herramientas para afinar
y complementar IDS Snort.”, Álvaro Paz, Julio 2015:
http://www.gurudelainformatica.es/2015/07/herramientas-para-afinar-y-
complementar.html
11. ANEXO
11.1. Instalación Snort en el cliente
# Actualizamos el sistema
sudo apt-get update
sudo apt-get dist-upgrade –y
# Y reiniciamos para aplicar los cambios
sudo reboot
Por lo anterior, desactivaremos LRO y GRO de nuestra tarjeta de red. Para ello,
usaremos el comando ethtool en el archivo de configuración de la interfaz de red
/etc/network/interfaces.
63
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
sudo vi /etc/network/interfaces
Y para acabar, instaleremos el pre-requisito DAQ, el cual también necesita de otros pre-
requesitos, disponibles en el repositorio de Ubuntu:
wget https://snort.org/downloads/snort/snort-2.9.8.0.tar.gz
tar -xvzf snort-2.9.8.0.tar.gz
cd snort-2.9.8.0
./configure --enable-sourcefire
make
sudo make install
sudo ldconfig
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
Por último, para comprobar que Snort funciona correctamente, podemos ejecutar Snort
con la etiqueta -V. Si se ha instalado bien, la ejecución del binario con la opción -V
debería mostrarnos algo similar a lo siguiente:
Para no lanzar Snort como administrador, crearemos una cuenta sin privilegios y un
grupo desde el que se lanzará el proceso de Snort (snort:snort). Además crearemos las
carpetas y ficheros requeridos por Snort, con los permisos necesarios para que funcione
correctamente:
17
http://blog.snort.org/2011/09/snort-291-installation-guide-for-centos.html
65
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Snort necesita sus archivos de configuración y sus preprocesadores dinámicos, así que
los copiaremos dentro de las carpetas creadas anteriormente:
cd snort-2.9.8.3/etc/
sudo cp *.conf* /etc/snort
sudo cp *.map /etc/snort
sudo cp *.dtd /etc/snort
cd snort-2.9.8.3/src/dynamic-
preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/
sudo cp * /usr/local/lib/snort_dynamicpreprocessor/
sudo vi /etc/snort/snort.conf
- A partir de la línea 104, modificaremos los valores con las carpetas que hemos
creado previamente:
67
SISTEMA DE MONITORIZACIÓN DEL IDS SNORT
Una vez realizadas las configuraciones anteriores, tenemos que verificar que todos los
archivos creados y modificados anteriormente son válidos y funcionan correctamente.
Esto se puede probar con el siguiente comando:
(…)
Ya tenemos Snort instalado y bien configurado. Ahora, para comprobar que funciona
correctamente, crearemos una regla simple para que Snort cree una alerta cuando
reciba un mensaje ICMP, el cual podemos generar haciéndonos un simple ping a
nuestra máquina.
alert icmp any any -> $HOME_NET any (msg:"Test para detectar si
alguien nos hace ping"; GID:1; sid:10000001; rev:001; classtype:icmp-
event;)
Ahora, cuando lancemos Snort, este cargará el archivo local.rules con la regla añadida y
la usará en todo el tráfico que pase por la interfaz. Si el tráfico es muy elevado, algunos
paquetes pueden no ser analizados. En este caso, Snort generará una alerta cuando vea
un mensaje ICMP.
Podemos comprobar que la configuración de Snort es correcta tras los cambios
realizados, con el comando anterior:
Una vez comprobado que Snort carga correctamente la regla añadida, podemos lanzar
Snort en modo NIDS y que las alertas generadas se muestren por consola.
Ejecutaremos el siguiente comando:
Para complementar nuestro IDS Snort, existen otras herramientas gratuitas que harán
de nuestro IDS una herramienta más completa y fácil de usar, simplificando la labor del
analista. Algunas de estas herramientas son:
Barnyard2: para almacenar las alertas generadas por Snort en una base de
datos.
BASE: interfaz web la cual muestra las alertas de Snort almacenadas en la base
de datos anterior.
69