La IDS, del inglés Intrusion Detection System (Sistema de Detección de Intrusos) es una aplicación de software destinado a la detección, en dispositivos o en una red, de accesos no autorizados. En esta línea, el administrador de sistemas responsable puede gestionar el descubrimiento de un “intruso” gracias a que cuando una incidencia de seguridad es detectada se emite una alerta o log.
Todos los que tengáis o hayáis tenido cualquier tipo de servicio expuesto a internet, habréis comprobado en los logs, que hay muchas peticiones provenientes de IPs extrañas. Estas peticiones extrañas, suelen ser producidas por escaneos automatizados, bots que buscan vulnerabilidades y en menor medida, ataques dirigidos.
En el caso de las empresas, estas amenazas son mucho más peligrosas y frecuentes y pueden traer consecuencias más graves, por lo tanto, es obvio que es necesario tomar medidas para protegernos contra estos potenciales ataques o mitigar el impacto en casos de que estos se materialicen.
Una de estas medidas, puede ser la implementación de un sistema de detección de intrusiones (IDS), con el que podremos identificar ataques o peticiones abusivas a nuestro servicio para luego, en base a ello, poder tomar decisiones y medidas adecuadas.
¿Qué es un IDS?
Un IDS (Intrusion Detection System) es un software de seguridad cuya función es detectar accesos no autorizados en un sistema o una red de ordenadores, y en base a ello, generar algún tipo de alerta o log para que posteriormente pueda ser gestionado por el administrador de sistemas correspondiente.
A diferencia de un IPS (Intrusion Prevention System), el IDS no actúa ante un posible ataque, simplemente alerta del mismo. Podríamos decir que el IPS es en base, la misma idea, pero que, al detectar una intrusión, ejerce alguna función determinada en base al tipo de ataque, para prevenir que este llegue a ser efectuado o mitigarlo en caso de que ya se haya materializado.
Tipos de IDS (en base a su radio de actuación)
-
-
- HIDS (HostIDS) – Monitorea el tráfico entrante y saliente de un host específico. Sólo actúa en el host en el que está corriendo (recomendado para servidores web).
- NIDS (NetworkIDS) – Captura todo el tráfico de la red y detecta tráfico inusual (están constituidos por un sniffer).
-
Una ventaja del HIDS, a diferencia del NIDS, es que monitoriza el sistema operativo y procesos del sistema específicos del host. También controla comportamiento malicioso como cambios en el registro, directorios, ejecución de programas y actividades que puedan causar buffer overflows.
También puede ayudar a detectar si el host forma parte de un ataque DDoS o de una sesión ilícita de FTP. Al no tener una visión de la red, para que sea más efectivo debe haber uno por cada host de la red y ser compatible con los distintos sistemas operativos. Detecta tráfico cifrado.
¿Cómo detectan tráfico malicioso?
Los IDS detectan tráfico ilegítimo haciendo uso de patrones, que, de cumplirse, harían saltar las alarmas. Esto es lo que se conoce como una ‘firma’. Estas firmas pueden ser atómicas (constituidas por un paquete individual determinado) o compuestas (paquetes múltiples).
Se configuran un conjunto de reglas de variada complejidad que, al coincidir, generarán las alertas correspondientes.
IDs más conocidos
-
-
-
-
- SURICATA – Suricata es gratis, open source, robusto y rápido (procesamiento multi-threaded)
-
-
-
-
-
-
-
- SNORT – Snort es también gratis y open source y se caracteriza por ser bastante ligero (preprocesadores).
-
-
-
-
-
-
-
- BRO – Bro es open source (políticas especializadas).
-
-
-
En el caso que hoy nos ocupa, nosotros mostraremos un deploy de Snort en modo HIDS. Pensando en un entorno casero, en el que queremos tener un control básico de este host específico de nuestra LAN. Podría instalarse perfectamente en una Orange Pi.
El objetivo es establecer un sistema de alertas que se envíen a través de un bot de Telegram.
Flujo de datos y preprocesadores de Snort
Como vimos en el punto anterior, Snort se caracteriza por la presencia de preprocesadores. Esto son plugins/módulos que sirven para tratar los paquetes que le llegan al host tras ser decodificados, de manera que se les de ‘forma’ antes de ser pasados al motor de detección.
-
-
-
-
- Packet capture – Sniffer que está analizando el tráfico constantemente y transmitiendo los paquetes capturados al decodificador.
- Packet decoder – Componente que se encarga de determinar qué protocolos son usados en un paquete capturado (Ethernet, IP, TCP…) y guarda estos datos junto con el contenido del paquete y su tamaño para que sean usados posteriormente por el preprocesador y el motor de detección.
- Preprocessors – Módulos que analizan los paquetes entrantes y salientes justo antes de que el motor de detección se ejecute y les da forma para posteriormente transmitirlos al motor de detección
- Detection engine – Se encarga del análisis de reglas y la detección de firmas. El motor crea firmas de ataque a partir del análisis de las reglas configuradas (que son leídas línea por línea) y en caso de que el patrón sea coincidente, se establecerá una alerta.
- Output plug-in – Componente que se encarga de recoger la información de alerta para mostrarla o escribirla en cualquier fichero o base de datos, de manera que luego pueda ser analizada o tratada.
-
-
-
Reglas de Snort
Snort, trae un gran número de reglas preconfiguradas que podemos descargar desde la propia página oficial, incluyendo muchas otras hechas por la comunidad. Pero lo interesante de todo esto, es que podemos crear nuestras propias reglas específicas.
En este punto vamos a explicar el patrón básico que siguen las reglas de Snort a la hora de ser establecidas.
Ejemplo de regla para detectar echo ICMP:
Ejemplo de regla para detectar paquetes TCP genéricos (sin especificar condición)
Es muy importante que mantengamos las reglas oficiales y de la comunidad actualizadas (como las nuestras propias) contra las últimas amenazas, para ello, podemos hacer uso de dos herramientas principales para, de forma fácil, actualizar estas reglas. OinkMaster y PulledPork:
Para información mucho más detallada de la construcción de reglas:
http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node27.html
El bot chivato
El bot (hecho en Python) se ejecuta sobre el sistema a ‘proteger’ y cuando el IDS detecta una nueva alerta, el bot se encarga de gestionarla y notificar al administrador vía Telegram.
En una Orange Pi os podéis montar el sistema perfectamente, que os explicamos a continuación.
Snort -> Barnyard2 -> MySQL (trigger) -> bot de Telegram
Snort genera la alerta y la guarda en un fichero binario, luego ‘barnyard2’ (para quitarle carga al propio Snort y así evitar que acabe descartando paquetes por exceso de tráfico) se encarga de almacenarla en una base de datos MySQL. Tiene un trigger que se ejecuta en cada INSERT y el cual llama a un script que envía la alerta al bot.
El trigger configurado en MySQL:
Script simple que es llamado por el trigger, el cual envía la alerta utilizando la API de Telegram (podríamos añadir diferentes tipos de mensajes, según la amenaza detectada):
Tips de seguridad
-
-
-
-
- Crear usuario en el sistema, snort:snort sin privilegios.
- Crear usuario snort en MySQL con los privilegios mínimos
- En el bot sanitizar los parámetros que se reciben
- Permitir la ejecución de los comandos sólo a los administradores
- Establecer reglas para detectar IPs de listas negras y/o nodos de salida de Tor
- Extremar las precauciones al permitir ejecutar comandos desde MySQL. Podría ser susceptible a ataques de Command Injection.
-
-
-
Funcionalidades del bot
Con este sistema, podremos tener notificaciones de alertas en tiempo real directas a nuestro bot de Telegram, para poder percatarnos de cuándo nuestro servidor está siendo atacado.
IDS evasion
Pero como sabéis, en esto del hacking, todo es bypasseable. En el caso de los IDS, hay un tipo de ataque llamado ‘IDS evasion’ que mediante diversas técnicas trata de prevenir que un IDS detecte una actividad maliciosa en el sistema.
En la imagen inferior, podemos ver una técnica básica de IDS evasión. En este ejemplo, el NIDS tiene un tiempo de espera para reensamblar los paquetes de 15 segundos, mientras que la víctima, tiene un tiempo de espera de 30 segundos. Para evadir el IDS, el atacante envía el fragmento 1 del paquete, el IDS y la víctima lo reciben y el IDS queda esperando por 15 segundos el segundo fragmento que completa el paquete. El atacante espera que pase ese tiempo, el IDS descarta el paquete, y a continuación este envía el segundo fragmento, el IDS lo recibe y no puede reensamblarlo con nada, ya que lo ha descartado, pero el equipo víctima sigue esperando, ya que, como dijimos, tiene un tiempo de espera superior para el reensamblado, por lo tanto, recibirá el paquete malicioso sin que ninguna alarma haya saltado.
Obviamente, hay técnicas de evasión mucho más complejas, ya que es común que el tiempo de espera del IDS sea superior al del equipo víctima, por lo tanto, habría que aplicar otras técnicas más ingeniosas a la hora de enviar los fragmentos.
Evitar IDS evasión
frag3 es un preprocesador basado en la desfragmentación de paquetes en la IP de destino que sirve para detectar técnicas de IDS evasion.
Vídeo de las PoC
Bibliografía
Libro | Intrusion Detection with Snort – Jack Koziol
Documentación oficial de Snort
Blog de Alfon https://seguridadyredes.wordpress.com/
Blog de Kinomakino http://kinomakino.blogspot.com.es/
https://www.symantec.com/connect/articles/evading-nids-revisited
Fuentes Imágenes
IDS Operation
– http://www.galeriafernandosantos.com
– https://www.cisco.com
Alertas – http://blog.securitymetrics.com
Flujos de Datos – https://www.embedded.com
OinkMaster y PulledPork – https://itfellover.com
IDS evasion – http://nethash.ru/