IDS - IPS (Suricata)
TAG -> Artículos
Un IDS (Sistema de Detección de Intrusiones) y un IPS (Sistema de Prevención de Intrusiones) son dos tecnologías de seguridad cibernética que cumplen con funciones cruciales en la protección de redes informáticas, aunque tienen diferencias en sus objetivos y funcionamiento.
IDS (Sistema de Detección de Intrusiones)
Un IDS es una herramienta que monitorea el tráfico de red o las actividades del sistema en busca de patrones que puedan indicar un ataque o actividad sospechosa. Su principal función es detectar y alertar sobre posibles intrusiones o amenazas, sin tomar medidas directas para detenerlas. Su enfoque es reactivo, ya que:
Registra eventos y genera alertas cuando detecta actividad anómala o maliciosa.
No interviene directamente en el tráfico de red, lo que permite a los administradores analizar las alertas y tomar acciones.
Es ideal para entornos donde se desea identificar amenazas sin modificar el flujo de datos, y se suele utilizar como una herramienta de auditoría o análisis post-evento.
Existen dos tipos principales de IDS:
NIDS (Network-based IDS): Monitorea el tráfico de red en segmentos específicos y detecta anomalías en el tráfico.
HIDS (Host-based IDS): Se instala en dispositivos individuales (hosts) y monitorea eventos específicos de esos sistemas.
IPS (Sistema de Prevención de Intrusiones)
Un IPS es una evolución del IDS que no solo detecta amenazas, sino que también actúa para prevenirlas. Su función es bloquear o rechazar tráfico en tiempo real si identifica patrones de ataque o comportamientos inusuales. Su enfoque es preventivo, y generalmente opera en línea dentro del flujo de tráfico para:
Bloquear paquetes sospechosos antes de que lleguen a su destino.
Modificar o descartar conexiones que puedan estar vinculadas a actividades maliciosas.
Actuar de forma autónoma para proteger la red de ataques en tiempo real, como DDoS, intentos de explotación y propagación de malware.
Diferencias clave entre IDS e IPS
Objetivo
Detectar y alertar sobre intrusiones
Prevenir y bloquear intrusiones
Enfoque
Reactivo
Preventivo
Actuación en el tráfico
Monitorea sin interferir
Interviene y bloquea
Uso típico
Auditoría y análisis de amenazas
Protección en tiempo real
Suricata
Suricata es un motor de detección y prevención de intrusiones de alta performance que funciona tanto como IDS como IPS. Desarrollado por la Open Information Security Foundation (OISF), Suricata es una herramienta de código abierto que se destaca por su capacidad de análisis de tráfico en redes de alta velocidad y por ser capaz de identificar patrones de amenazas complejas en tiempo real.
Características principales de Suricata:
Funcionalidad dual (IDS/IPS): Suricata puede configurarse como IDS o IPS, según la necesidad de la red. En modo IDS, simplemente monitorea y genera alertas. En modo IPS, toma acciones inmediatas para bloquear tráfico malicioso.
Análisis de tráfico multicapa: Suricata puede inspeccionar paquetes en múltiples capas, desde la capa de enlace hasta la capa de aplicación. Esto permite detectar amenazas más complejas que solo se manifiestan en las capas superiores del modelo OSI.
Compatibilidad con reglas Snort: Suricata es compatible con las reglas de Snort, un popular sistema de IDS/IPS, lo que facilita su integración y la reutilización de bases de reglas existentes.
Desempeño optimizado y escalabilidad: Soporta procesamiento de múltiples hilos, lo que le permite aprovechar mejor los recursos del sistema y ser efectivo en redes con gran volumen de tráfico.
Análisis de protocolos específicos: Incluye análisis detallado para protocolos como HTTP, DNS, SMB y TLS, lo que le permite realizar una inspección más profunda y precisa de los paquetes.
Ejemplos de uso de Suricata:
Empresas y organizaciones: Lo utilizan para proteger su red interna y detectar ataques como intentos de intrusión, exfiltración de datos o acceso no autorizado.
Proyectos de investigación y auditoría de seguridad: Es una herramienta popular en pruebas de penetración y análisis de tráfico en redes corporativas.
Creación del laboratorio
Me conectare a un servidor por ssh en mi red y le configurare el IDS, ahora lo primero que aremos es ejecutar una actualización del contenedor con los siguientes comandos.
Ahora instalaremos lo que vamos a usar (Suricata).
Con esto ya estamos listo para empezar el laboratorio.
Primero que todo veamos cual es el adaptador de red que tenemos.
Vemos que la interfaz es enp0s3, ahora vallamos a /etc/default/suricata para ver la configuración por default, podemos abrir este archivo con vim:
Contenido:
Podemos ver que la interfaz de red esta incorrecta, lo cambiamos a enp0s3, también cambiamos RUN=no a RUN=yes, pero debemos editar otro archivo de configuración que seria /etc/suricata/suricata.yaml este archivo es muy extenso pero veamos que hay que editar:
Después de abrir el archivo con vim, buscamos la línea que diga interface veremos que al lado derecho esta configurado eth0, así que lo cambiamos a enp0s3, la siguiente línea que debemos buscar y editar es una que esta casi al principio, la línea HOME_NET, esta son las redes que Suricata audita por defecto, pero debemos cambiarlo a nuestra red, podemos borrar las redes que contiene y poner la nuestra, en mi caso la IP es 192.168.43.45 por lo cual quedaría así:
También buscamos la línea que diga default-log-dir: /var/log/suricata/, esto solo para saber donde podemos ver los log, lo podemos dejar así o cambiar a donde queremos que lo guarde.
Con esto guardo mi archivo y recargo las reglas de Suricata
Con esto ya se actualizo y se crearon reglas por defecto que trae Suricata, estas reglas se guardaron en /etc/suricata/rules/ .
Estas son reglas que trae Suricata por defecto, veamos una de ejemplo:
Estas reglas no están cargadas en Suricata aun.
Primero crearemos una regla nosotros de la siguiente manera:
Contenido:
alert: Define la acción a tomar cuando se detecta un patrón coincidente. En este caso, genera una alerta.icmp: Tipo de protocolo que Suricata debe monitorear. Aquí es ICMP, que es el protocolo utilizado para el tráfico de "ping".any any: Especifica el origen del tráfico.Primer
any: Cualquier dirección IP de origen.Segundo
any: Cualquier puerto de origen (en ICMP el puerto no es relevante, pero este formato es estándar).
->: Indica la dirección del tráfico. Aquí, de origen a destino.any any(después de la flecha): Especifica el destino del tráfico.Primer
any: Cualquier dirección IP de destino.Segundo
any: Cualquier puerto de destino.
msg:"ALERTA: Trafico ICMP detectado": Mensaje de alerta que Suricata mostrará si coincide esta regla. Aquí es "ALERTA: Trafico ICMP detectado".itype:8: ICMP type 8, que representa una solicitud de eco (mensaje de "ping").sid:10000001: ID de la regla (unique rule identifier). Cada regla debe tener un SID único. Este es10000001.rev:1: Revisión de la regla. Se utiliza para llevar un control de versiones de la misma regla; aquí es la primera versión (rev:1).
Ahora copiamos el nombre del archivo regla_1.rules y lo cargaremos en /etc/suricata/suricata.yaml, buscamos la línea que diga rule-files, quitamos la que viene por defecto y agregamos la nuestra, quedaría:
Pueda que aveces debamos configurar
default-rule-path, tal ves porque no es donde están guardadas las reglas o por que nuestra regla la creamos en otro lado, en nuestro caso la que viene por defecto esta bien.
Ya con esto podemos reiniciar el servicio para que todo este correcto.
Si vemos esto debemos hacer lo siguiente:
Editar
/etc/default/suricataBusca la línea que dice
RUN=noy cambiarla aRUN=yespara permitir que Suricata se ejecute.
Por cualquier cosa tambien podemos volver a ejecutar:
Ahora encendemos Suricata con el siguiente comando:
Ahora hay que ver los log de Suricata de la siguiente manera.
Desde otra maquina podemos ejecutar un simple ping.
Ejemplo:
En el servidor veremos lo siguiente.
Y vemos que si esta funcionando y detectando el trafico ICMP, ahora crear más reglas:
Regla 1: Detección de tráfico ICMP (Ping)
Tipo:
alert icmpCondición: Cualquier dirección IP y puerto origen a cualquier IP y puerto destino.
Descripción: Genera una alerta cuando detecta tráfico ICMP tipo 8 (solicitud de eco o "ping").
Mensaje: "ALERTA: Trafico ICMP detectado"
SID: 10000001 (identificador único de regla).
Revisión: 1
Regla 2: Detección de tráfico HTTP entrante
Tipo:
alert tcpCondición: Cualquier IP y puerto origen hacia cualquier IP en el puerto 80 (HTTP).
Descripción: Genera una alerta cuando detecta tráfico TCP entrante hacia el puerto HTTP (80).
Mensaje: "ALERTA: Trafico HTTP entrante detectado"
SID: 10000002
Revisión: 1
Regla 3: Detección de escaneo de puertos
Tipo:
alert tcpCondición: Cualquier IP y puerto origen hacia cualquier IP y puerto destino.
Flags: Solo alerta si el paquete tiene el flag
S(SYN), que se usa para iniciar conexiones.Descripción: Detecta intentos de escaneo de puertos al recibir 3 paquetes SYN en 3 segundos desde la misma fuente.
Mensaje: "ALERTA: Escaneo de puertos detectado"
SID: 10000003
Revisión: 1
Regla 4: Detección de acceso a un directorio específico (/gestion_usuarios) en HTTP
Tipo:
alert httpCondición: Cualquier IP y puerto origen hacia cualquier IP en el puerto 80 (HTTP).
Contenido:
content:"/gestion_usuarios"; http_uri;especifica que debe buscar en la URI del tráfico HTTP.Descripción: Genera una alerta al detectar un intento de acceso a la ruta
/gestion_usuarios.Mensaje: "ALERTA: Acceso al directorio /gestion_usuarios detectado"
SID: 10000004
Revisión: 1
Algunas formas de baypasear estas reglas son (La regla numero 1 -> Trafico HTTP entrante detectado no la pude baypasear):
-Pn: Desactiva el host discovery (descubrimiento de hosts) y asume que el host está activo. Esto es útil si el host bloquea pings u otros métodos de detección.
-F: Realiza un escaneo rápido (Fast scan) que se limita a un conjunto reducido de puertos comunes (aproximadamente 100).
--open: Muestra solo los puertos que están en estado abierto, ignorando los cerrados o filtrados.
Propósito: Este escaneo es rápido y efectivo para verificar rápidamente si existen puertos abiertos en un host específico, omitiendo aquellos que están cerrados o filtrados.
-sS: Realiza un escaneo SYN (también llamado "half-open"), que es menos probable que sea detectado en comparación con un escaneo completo TCP.
-D 10.10.10.1,10.10.10.2,ME: Utiliza el método de "decoy" o señuelos, enviando peticiones desde múltiples IPs falsas junto con la del usuario (representada por
ME). Esto puede confundir sistemas de detección y evitar que el escaneo sea rastreado al usuario real.-F: Escaneo rápido de puertos comunes.
--open: Muestra solo los puertos abiertos.
Propósito: Esta técnica de señuelos permite escanear de forma más discreta y disminuir la posibilidad de que el escaneo sea detectado o rastreado a la IP original, utilizando peticiones adicionales para simular que provienen de otras IPs.
-D RND,RND,ME: Similar al anterior, pero en lugar de usar IPs específicas, elige direcciones IP aleatorias (
RND) junto con la propia IP (ME). Esto añade un elemento de aleatoriedad al escaneo para hacerlo aún más difícil de rastrear.
Propósito: Emplear IPs aleatorias como señuelos puede hacer que el escaneo sea más difícil de detectar y rastrear, al añadir múltiples IPs falsas de forma automatizada y no secuencial.
--proxies: Enruta el escaneo a través de un proxy HTTP. Esto permite que el escaneo pase a través de un intermediario, lo cual puede ser útil si se necesita ocultar la dirección IP o realizar el escaneo desde un punto intermedio de la red.
Propósito: Utilizar un proxy puede ser útil para evitar la detección directa, ya que las conexiones parecen provenir del proxy en lugar de la IP del usuario. Sin embargo, esta técnica solo es efectiva si el proxy permite tráfico escaneado.
-T1: Establece la intensidad del escaneo a
1(muy lenta). Esto reduce la velocidad del escaneo, lo que es útil para evitar ser detectado por sistemas de detección de intrusiones (IDS) o para minimizar la carga en redes sensibles.--scan-delay 500ms: Introduce un retraso de 500 ms entre cada paquete. Esto ralentiza aún más el escaneo y evita la detección en redes con medidas de protección contra tráfico de escaneo.
--max-retries 1: Limita el número de intentos a solo uno si un puerto no responde, evitando así múltiples intentos que puedan ser detectados.
--max-scan-delay 1000ms: Limita el tiempo máximo de retraso en 1000 ms (1 segundo) entre paquetes.
-f: Fragmenta los paquetes, lo que divide las solicitudes en segmentos más pequeños para evitar sistemas de detección que dependen de patrones de tráfico estándar.
Propósito: Este es un escaneo evasivo diseñado para evitar detección al ralentizar el tráfico, fragmentar los paquetes y limitar los intentos. Es ideal para redes con políticas de seguridad estrictas y sistemas de detección avanzados.
Cada uno de estos escaneos tiene características diferentes en términos de velocidad, evasión de detección y técnicas de anonimato, y son útiles en distintos contextos de seguridad, dependiendo del nivel de visibilidad y discreción necesarios.
Para la regla uno, algo que podemos hacer si tenemos acceso mediante ssh a la maquina victima:
Y ya con esto podríamos ver desde nuestro localhost el contenido del servidor mediante la IP 8080 sin ser detectados por el IDS.
Reglas mas fuertes para detectar y bloquear escaneos
Para crear una regla en Suricata que detecte y bloquee escaneos de puertos realizados con Nmap u otras herramientas, podemos aprovechar las opciones de firma de Suricata, que permite bloquear tráfico directamente si está configurado en modo IPS (Intrusion Prevention System). Aquí tenemos una regla personalizada para el archivo regla_2.rules, así como una explicación de las opciones que usamos para optimizar la detección y respuesta.
Ejemplo de Regla regla_2.rules en Suricata
regla_2.rules en SuricataExplicación de la Regla
msg: Define el mensaje que se registrará cuando se active la alerta. En este caso, se especifica "ALERTA: Escaneo de puertos (SYN y ACK) detectado", lo que indica que Suricata ha detectado un posible escaneo de puertos que utiliza ambos tipos de paquetes.
sid: Este es el ID único de la regla dentro de Suricata. Aquí se asigna
sid:2000001, lo que ayuda a identificar esta regla de forma única en el conjunto de reglas.rev: El número de revisión de la regla. Esto es útil cuando necesitas actualizar o modificar una regla existente; cada modificación incrementa este número. En este caso, se ha asignado
rev:1.flags: Filtra paquetes en función de los flags TCP,
flags:SAindica que la regla se activará para paquetes que contengan tanto el flag SYN (S) como el flag ACK (A). Esto es típico en ciertas formas de escaneo de puertos.flow: Define el estado de la conexión de los paquetes a ser analizados.
flow:statelesssignifica que Suricata no mantendrá el estado de la conexión TCP, lo que es útil para detectar patrones de tráfico de escaneo que no dependen del estado de conexión.classtype: Clasifica la alerta para fines de análisis y respuesta. En este caso,
classtype:attempted-reconse utiliza para indicar que la alerta está relacionada con un intento de reconocimiento, como un escaneo de puertos.priority: Establece la prioridad de la alerta. Los valores van de 1 (más crítico) a 4 (menos crítico). En este caso, se ha asignado
priority:2, que indica que se trata de una alerta de alta prioridad, pero no crítica.detection_filter: Controla la frecuencia de las alertas generadas. Aquí, se establece
detection_filter:track by_src, count 1, seconds 10, lo que significa que si una única IP de origen genera 1 o más paquetes que coinciden con esta regla en un período de 10 segundos, se activará la alerta. Esto ayuda a reducir las alertas por actividad normal y a enfocarse en posibles escaneos.
Consideraciones Adicionales
Detección de Otros Tipos de Escaneo: Si deseas detectar otros tipos de escaneo, como escaneos de FIN, NULL, o XMAS, puedes crear reglas adicionales con flags específicos para esos tipos.
Optimización de las Reglas: Considera ajustar los parámetros de
detection_filterythresholdsegún el tráfico normal de tu red para minimizar las alertas falsas (En este caso por ser un laboratorio controlado que cree, la regla esta bien para demostración).
Opciones Adicionales para Personalizar la Regla
Para ampliar la precisión de la detección y el bloqueo en Suricata, podemos usar las siguientes opciones:
action: En Suricata, las reglas pueden ser
alert,drop,reject, opass. Para bloquear automáticamente, reemplazaalertcondrop:
Esto detendrá el tráfico sospechoso en modo IPS.
reference: Para agregar una referencia externa, como una URL. Ejemplo:
metadata: Permite agregar información adicional sobre la regla, como el autor, la revisión o el propósito:
ttl: Filtra según el Time To Live (TTL) de los paquetes, útil si deseas definir umbrales TTL específicos para ciertas conexiones:
ip_proto: Si quieres detectar escaneos en protocolos no TCP (como UDP o ICMP), utiliza esta opción:
Configuración de Bloqueo Activo en Suricata
Para aplicar la regla en modo IPS y bloquear automáticamente, debemos tener Suricata esté en modo inline (IPS) y que la regla esté configurada con drop en lugar de alert. Esto permite que Suricata intercepte y bloquee el tráfico malicioso en tiempo real. Una posible línea en esta configuración configuración sería:
En esta configuración, Suricata bloqueará cualquier intento de escaneo si detecta el tráfico correspondiente, evitando que la conexión alcance su destino.
Verificación del archivo de configuración (
suricata.yaml):Una de las causas comunes de errores en Suricata es una configuración incorrecta. Podemos probar la configuración de Suricata antes de intentar iniciar el servicio con:
Esto validará el archivo de configuración y mostrará errores específicos, como rutas incorrectas, problemas con las interfaces de red, o configuraciones incompatibles.
Reglas cargadas -> Solo reglas de IDS
Ataque
IDS
Ataque
IDS
Suricata utiliza varias clasificaciones para categorizar alertas y eventos, permitiendo a los administradores identificar rápidamente la naturaleza de una alerta y su severidad. A continuación, les dejo una lista de clasificaciones comúnmente utilizadas en Suricata:
Clasificaciones Comunes en Suricata
attempted-recon: Actividad que indica un intento de reconocimiento, como escaneos de puertos o descubrimiento de hosts.
successful-recon: Actividad que indica un reconocimiento exitoso.
attempted-dos: Intentos de realizar un ataque de denegación de servicio.
successful-dos: Denegación de servicio exitosa.
attempted-user: Intentos de explotación de vulnerabilidades relacionadas con usuarios.
successful-user: Explotaciones exitosas que afectan a usuarios.
attempted-admin: Intentos de explotación que apuntan a administradores o sistemas críticos.
successful-admin: Explotaciones exitosas que afectan a administradores.
malware-activity: Actividades relacionadas con malware, como descargas o conexiones a servidores de comando y control (C&C).
policy-violation: Violaciones de políticas de seguridad predefinidas, como el uso no autorizado de aplicaciones.
bad-traffic: Tráfico que no se ajusta a las normas o patrones esperados, indicando posible actividad maliciosa.
trojan-activity: Actividades relacionadas con troyanos o software no deseado.
data-theft: Actividades relacionadas con el robo de datos, como la exfiltración de información.
exploit: Intentos de explotar vulnerabilidades en el software o servicios.
shellcode: Detecta el uso de código malicioso que intenta abrir una shell o ejecutar comandos no autorizados.
policy-violation: Indicaciones de que se ha violado una política de seguridad, como el acceso a sitios prohibidos.
compromise: Actividades que indican que un sistema puede haber sido comprometido.
suspected-botnet: Indica que un dispositivo puede formar parte de una botnet.
scan: Actividades relacionadas con escaneos de red o escaneos de vulnerabilidades.
Clasificación Personalizada
Además de las clasificaciones predeterminadas, Suricata permite a los usuarios definir sus propias clasificaciones a través de la configuración de reglas. Esto puede ayudar a adaptar nuestras alertas a las necesidades específicas de un entorno o una organización.
Usos de las Clasificaciones
Las clasificaciones ayudan a los analistas de seguridad a:
Filtrar y priorizar alertas.
Responder rápidamente a incidentes potencialmente peligrosos.
Generar informes y estadísticas sobre la actividad de red y los incidentes detectados.
Script para mejorar los log visualmente
Podemos usar el siguiente script para visualizar los log de una manera mas ordenada, con la información relevante y más bonito.
Resultado
Los IDS e IPS son un mundo, este solo es un pequeño aporte para los amante del Blue Team.
Last updated