NovaHacking
  • Whoami
  • Artículos
    • Panamá Papers
    • Tratamiento para la TTY
    • Introducción a la Ciberseguridad
    • Introducción al Buffer Overflow
    • Introducción al Pivoting
    • IDS - IPS (Suricata)
    • Colisión de Hash
    • RSA Cracker
  • Herramientas
    • Explotación
      • Hydra
      • pwncat-cs
    • Reconocimiento
      • Nmap
      • Arp scan
  • CTF
    • Dockerlabs
      • Amor
      • BreakMySSH
      • DockHackLab
      • FirstHacking
      • sjd
      • WhereIsMyWebShell
      • Dark
      • Queuemedic
      • Buffered
      • Pn
      • Canario
      • Domain
      • HereBash
  • Linux
    • 🐧Inicio Linux
Powered by GitBook
On this page
  • IDS (Sistema de Detección de Intrusiones)
  • Existen dos tipos principales de IDS:
  • IPS (Sistema de Prevención de Intrusiones)
  • Diferencias clave entre IDS e IPS
  • Suricata
  • Características principales de Suricata:
  • Ejemplos de uso de Suricata:
  • Creación del laboratorio
  • Reglas mas fuertes para detectar y bloquear escaneos
  • Ejemplo de Regla regla_2.rules en Suricata
  • Explicación de la Regla
  • Consideraciones Adicionales
  • Opciones Adicionales para Personalizar la Regla
  • Configuración de Bloqueo Activo en Suricata
  • Clasificaciones Comunes en Suricata
  • Clasificación Personalizada
  • Usos de las Clasificaciones
  • Script para mejorar los log visualmente
  1. Artículos

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:

  1. NIDS (Network-based IDS): Monitorea el tráfico de red en segmentos específicos y detecta anomalías en el tráfico.

  2. 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

Característica
IDS
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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

[root@template]-[~]# apt update && apt upgrade -y

Ahora instalaremos lo que vamos a usar (Suricata).

[root@template]-[~]# apt install net-tools lsb-release vim suricata

Con esto ya estamos listo para empezar el laboratorio.

Primero que todo veamos cual es el adaptador de red que tenemos.

[root@template]-[~]# ifconfig
enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.43.45  netmask 255.255.255.0  broadcast 192.168.43.255
        inet6 fe80::a00:27ff:fed9:aae7  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:d9:aa:e7  txqueuelen 1000  (Ethernet)
        RX packets 63310  bytes 91293368 (87.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13421  bytes 1157711 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@template]-[~]# 

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:

[root@template]-[~]# vim /etc/default/suricata

Contenido:

# Default config for Suricata

# set to yes to start the server in the init.d script
RUN=no

# Configuration file to load
SURCONF=/etc/suricata/suricata.yaml

# Listen mode: pcap, nfqueue or af-packet
# depending on this value, only one of the two following options
# will be used (af-packet uses neither).
# Please note that IPS mode is only available when using nfqueue
LISTENMODE=nfqueue

# Interface to listen on (for pcap mode)
IFACE=eth0

# Queue number to listen on (for nfqueue mode)
NFQUEUE=0

# Load Google TCMALLOC if libtcmalloc-minimal4 is installed
# This _might_ give you very very small performance gain....
TCMALLOC="YES"

# Pid file
PIDFILE=/var/run/suricata.pid

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í:

vars:
  address-groups:
    HOME_NET: "[192.168.43.0/24]"

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

[root@template]-[~]# suricata-update
4/11/2024 -- 01:04:11 - <Info> -- Using data-directory /var/lib/suricata.
4/11/2024 -- 01:04:11 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml
4/11/2024 -- 01:04:11 - <Info> -- Using /etc/suricata/rules for Suricata provided rules.
4/11/2024 -- 01:04:11 - <Info> -- Found Suricata version 6.0.10 at /usr/bin/suricata.
4/11/2024 -- 01:04:11 - <Info> -- Loading /etc/suricata/suricata.yaml
4/11/2024 -- 01:04:11 - <Info> -- Disabling rules for protocol http2
4/11/2024 -- 01:04:11 - <Info> -- Disabling rules for protocol modbus
4/11/2024 -- 01:04:11 - <Info> -- Disabling rules for protocol dnp3
4/11/2024 -- 01:04:11 - <Info> -- Disabling rules for protocol enip
4/11/2024 -- 01:04:11 - <Info> -- No sources configured, will use Emerging Threats Open
4/11/2024 -- 01:04:11 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.10/emerging.rules.tar.gz.
 100% - 4572160/4572160               
4/11/2024 -- 01:04:17 - <Info> -- Done.
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/app-layer-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/decoder-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/dhcp-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/dnp3-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/dns-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/files.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/http-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/ipsec-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/kerberos-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/modbus-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/nfs-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/ntp-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/smb-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/smtp-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/stream-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Loading distribution rule file /etc/suricata/rules/tls-events.rules
4/11/2024 -- 01:04:17 - <Info> -- Ignoring file rules/emerging-deleted.rules
4/11/2024 -- 01:04:19 - <Info> -- Loaded 53906 rules.
4/11/2024 -- 01:04:20 - <Info> -- Disabled 14 rules.
4/11/2024 -- 01:04:20 - <Info> -- Enabled 0 rules.
4/11/2024 -- 01:04:20 - <Info> -- Modified 0 rules.
4/11/2024 -- 01:04:20 - <Info> -- Dropped 0 rules.
4/11/2024 -- 01:04:20 - <Info> -- Enabled 136 rules for flowbit dependencies.
4/11/2024 -- 01:04:20 - <Info> -- Backing up current rules.
4/11/2024 -- 01:04:20 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 53906; enabled: 40261; added: 53906; removed 0; modified: 0
4/11/2024 -- 01:04:20 - <Info> -- Writing /var/lib/suricata/rules/classification.config
4/11/2024 -- 01:04:20 - <Info> -- Testing with suricata -T.
4/11/2024 -- 01:04:50 - <Info> -- Done.
[root@template]-[~]#

Con esto ya se actualizo y se crearon reglas por defecto que trae Suricata, estas reglas se guardaron en /etc/suricata/rules/ .

[root@template]-[/etc/suricata/rules]# ll
total 132
-rw-r--r-- 1 root root  1858 ene 31  2023 app-layer-events.rules
-rw-r--r-- 1 root root 20880 ene 31  2023 decoder-events.rules
-rw-r--r-- 1 root root   468 ene 31  2023 dhcp-events.rules
-rw-r--r-- 1 root root  1221 ene 31  2023 dnp3-events.rules
-rw-r--r-- 1 root root  1041 ene 31  2023 dns-events.rules
-rw-r--r-- 1 root root  4003 ene 31  2023 files.rules
-rw-r--r-- 1 root root  2128 ene 31  2023 http2-events.rules
-rw-r--r-- 1 root root 13390 ene 31  2023 http-events.rules
-rw-r--r-- 1 root root  2717 ene 31  2023 ipsec-events.rules
-rw-r--r-- 1 root root   585 ene 31  2023 kerberos-events.rules
-rw-r--r-- 1 root root  2078 ene 31  2023 modbus-events.rules
-rw-r--r-- 1 root root  2187 ene 31  2023 mqtt-events.rules
-rw-r--r-- 1 root root   558 ene 31  2023 nfs-events.rules
-rw-r--r-- 1 root root   558 ene 31  2023 ntp-events.rules
-rw-r--r-- 1 root root  4346 ene 31  2023 smb-events.rules
-rw-r--r-- 1 root root  5167 ene 31  2023 smtp-events.rules
-rw-r--r-- 1 root root   719 ene 31  2023 ssh-events.rules
-rw-r--r-- 1 root root 12992 ene 31  2023 stream-events.rules
-rw-r--r-- 1 root root  6861 ene 31  2023 tls-events.rules
[root@template]-[/etc/suricata/rules]# 

Estas son reglas que trae Suricata por defecto, veamos una de ejemplo:

[root@template]-[/etc/suricata/rules]# cat dns-events.rules 
# Malformed data in request. Malformed means length fields are wrong, etc.
alert dns any any -> any any (msg:"SURICATA DNS malformed request data"; flow:to_server; app-layer-event:dns.malformed_data; classtype:protocol-command-decode; sid:2240002; rev:2;)
alert dns any any -> any any (msg:"SURICATA DNS malformed response data"; flow:to_client; app-layer-event:dns.malformed_data; classtype:protocol-command-decode; sid:2240003; rev:2;)
# Response flag set on to_server packet
alert dns any any -> any any (msg:"SURICATA DNS Not a request"; flow:to_server; app-layer-event:dns.not_a_request; classtype:protocol-command-decode; sid:2240004; rev:2;)
# Response flag not set on to_client packet
alert dns any any -> any any (msg:"SURICATA DNS Not a response"; flow:to_client; app-layer-event:dns.not_a_response; classtype:protocol-command-decode; sid:2240005; rev:2;)
# Z flag (reserved) not 0
alert dns any any -> any any (msg:"SURICATA DNS Z flag set"; app-layer-event:dns.z_flag_set; classtype:protocol-command-decode; sid:2240006; rev:2;)
[root@template]-[/etc/suricata/rules]# 

Estas reglas no están cargadas en Suricata aun.

Primero crearemos una regla nosotros de la siguiente manera:

[root@template]-[/etc/suricata/rules]# vim regla_1.rules

Contenido:

alert icmp any any -> any any (msg:"ALERTA: Trafico ICMP detectado"; itype:8; sid:10000001; rev:1;)
  • 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 es 10000001.

  • 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:

rules-files:
	- regla_1.rules

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.

[root@template]-[/etc/suricata/rules]# service suricata restart
suricata disabled, please adjust the configuration to your needs  ... failed!
and then set RUN to 'yes' in /etc/default/suricata to enable it. ... failed!
[root@parrot]-[/etc/suricata/rules]#

Si vemos esto debemos hacer lo siguiente:

  • Editar /etc/default/suricata

  • Busca la línea que dice RUN=no y cambiarla a RUN=yes para permitir que Suricata se ejecute.

Por cualquier cosa tambien podemos volver a ejecutar:

[root@template]-[~]# suricata-update

Ahora encendemos Suricata con el siguiente comando:

[root@template]-[~]# service suricata start
[root@template]-[~]# service suricata status
● suricata.service - Suricata IDS/IDP daemon
     Loaded: loaded (/lib/systemd/system/suricata.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-11-04 01:53:59 CST; 7min ago
       Docs: man:suricata(8)
             man:suricatasc(8)
             https://suricata-ids.org/docs/
    Process: 501 ExecStart=/usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid (code=exited, status=0/SUCCESS)
   Main PID: 621 (Suricata-Main)
      Tasks: 7 (limit: 1099)
     Memory: 62.1M
        CPU: 4.150s
     CGroup: /system.slice/suricata.service
             └─621 /usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid

nov 04 01:53:49 template systemd[1]: Starting suricata.service - Suricata IDS/IDP daemon...
nov 04 01:53:57 template suricata[501]: 4/11/2024 -- 01:53:57 - <Notice> - This is Suricata version 6.0.10 RELEASE running in SYSTEM mode
nov 04 01:53:59 template systemd[1]: Started suricata.service - Suricata IDS/IDP daemon.
[root@template]-[~]# 

Ahora hay que ver los log de Suricata de la siguiente manera.

[root@template]-[~]# tail -f /var/log/suricata/fast.log

Desde otra maquina podemos ejecutar un simple ping.

  • Ejemplo:

❯ ping -c 1 192.168.43.45 -R
PING 192.168.43.45 (192.168.43.45) 56(124) bytes of data.
64 bytes from 192.168.43.45: icmp_seq=1 ttl=64 time=0.463 ms
RR: 	192.168.43.58
	192.168.43.45
	192.168.43.45
	192.168.43.58

--- 192.168.43.45 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.463/0.463/0.463/0.000 ms

En el servidor veremos lo siguiente.

[root@template]-[~]# tail -f /var/log/suricata/fast.log
11/04/2024-02:04:58.989467  [**] [1:10000001:1] ALERTA: Trafico ICMP detectado [**] [Classification: (null)] [Priority: 3] {ICMP} 192.168.43.58:8 -> 192.168.43.45:0

Y vemos que si esta funcionando y detectando el trafico ICMP, ahora crear más reglas:

[root@template]-[~]# cat /etc/suricata/rules/regla_1.rules 
alert icmp any any -> any any (msg:"ALERTA: Trafico ICMP detectado"; itype:8; sid:10000001; rev:1;)
alert tcp any any -> any 80 (msg:"ALERTA: Trafico HTTP entrante detectado"; sid:10000002; rev:1;)
alert tcp any any -> any any (msg:"ALERTA: Escaneo de puertos detectado"; sid:10000003; rev:1; flags:S; flow:stateless; threshold: type both, track by_src, count 3, seconds 3;)
alert http any any -> any 80 (msg:"ALERTA: Acceso al directorio /gestion_usuarios detectado"; content:"/gestion_usuarios"; http_uri; sid:10000004; rev:1;)
[root@template]-[~]# 
  • Regla 1: Detección de tráfico ICMP (Ping)

    • Tipo: alert icmp

    • Condició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 tcp

    • Condició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 tcp

    • Condició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 http

    • Condició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):


nmap -Pn -F --open 192.168.43.45
  • -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.


nmap -sS -Pn -D 10.10.10.1,10.10.10.2,ME -F --open 192.168.43.45
  • -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.


nmap -sS -Pn -D RND,RND,ME -F --open 192.168.43.45
  • -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.


nmap -sS -Pn --proxies http://192.168.43.1:8080 -F --open 192.168.43.45
  • --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.


nmap -sS -Pn -T1 --scan-delay 500ms --max-retries 1 --max-scan-delay 1000ms -f -F 192.168.43.45
  • -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:

❯ ssh -L 8080:localhost:80 test@192.168.43.45
test@192.168.43.45's password: 
Linux template 6.1.0-26-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.112-1 (2024-09-30) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Nov  4 08:35:02 2024 from 192.168.43.58
test@template:~$ 

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

alert tcp any any -> any any (msg:"ALERTA: Escaneo de puertos (SYN y ACK) detectado"; \
sid:2000001; rev:1; flags:SA; flow:stateless; \
classtype:attempted-recon; priority:2; detection_filter:track by_src, count 1, seconds 10;)

Explicación de la Regla

  1. 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.

  2. 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.

  3. 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.

  4. flags: Filtra paquetes en función de los flags TCP, flags:SA indica 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.

  5. flow: Define el estado de la conexión de los paquetes a ser analizados. flow:stateless significa 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.

  6. classtype: Clasifica la alerta para fines de análisis y respuesta. En este caso, classtype:attempted-recon se utiliza para indicar que la alerta está relacionada con un intento de reconocimiento, como un escaneo de puertos.

  7. 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.

  8. 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_filter y threshold segú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, o pass. Para bloquear automáticamente, reemplaza alert con drop:

drop tcp any any -> any any (msg:"BLOQUEADO: Escaneo de puertos detectado"; ...)

Esto detendrá el tráfico sospechoso en modo IPS.

  • reference: Para agregar una referencia externa, como una URL. Ejemplo:

reference:url,https://nmap.org
  • metadata: Permite agregar información adicional sobre la regla, como el autor, la revisión o el propósito:

metadata:author "Anon"; attack_target any; created_at 2024-11-04;
  • ttl: Filtra según el Time To Live (TTL) de los paquetes, útil si deseas definir umbrales TTL específicos para ciertas conexiones:

ttl: 128;
  • ip_proto: Si quieres detectar escaneos en protocolos no TCP (como UDP o ICMP), utiliza esta opción:

ip_proto: icmp;

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:

drop tcp any any -> any any (msg:"BLOQUEADO: Escaneo de puertos detectado"; ...)

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:

suricata -T -c /etc/suricata/suricata.yaml

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

[root@template]-[~]# cat /etc/suricata/rules/regla_1.rules 
alert icmp any any -> any any (msg:"ALERTA: Trafico ICMP detectado"; itype:8; sid:10000001; rev:1;)
alert tcp any any -> any 80 (msg:"ALERTA: Trafico HTTP entrante detectado"; sid:10000002; rev:1;)
alert tcp any any -> any any (msg:"ALERTA: Escaneo de puertos detectado"; sid:10000003; rev:1; flags:S; flow:stateless; threshold: type both, track by_src, count 3, seconds 3;)
alert http any any -> any 80 (msg:"ALERTA: Acceso al directorio /gestion_usuarios detectado"; content:"/gestion_usuarios"; http_uri; sid:10000004; rev:1;)
[root@template]-[~]# cat /etc/suricata/rules/regla_2.rules 
alert tcp any any -> any any (msg:"ALERTA: Escaneo de puertos (SYN y ACK) detectado"; \
sid:2000001; rev:1; flags:SA; flow:stateless; \
classtype:attempted-recon; priority:2; detection_filter:track by_src, count 1, seconds 10;)
[root@template]-[~]# 

Ataque

❯ nmap -sS -Pn -T0 --scan-delay 5000ms --max-retries 1 --max-scan-delay 5000ms -f -p 21,22,80 192.168.43.45
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-04 11:42 EST
Nmap scan report for 192.168.43.45
Host is up (0.0015s latency).

PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:D9:AA:E7 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 20.30 seconds

IDS

[root@template]-[~]# tail -f /var/log/suricata/fast.log
11/04/2024-10:42:29.394927  [**] [1:10000002:1] ALERTA: Trafico HTTP entrante detectado [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.43.58:56893 -> 192.168.43.45:80
11/04/2024-10:42:29.395011  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 192.168.43.58:56893

Detectado


Ataque

❯ nmap -sS -Pn -D RND,RND,ME -F --open --proxies http://192.168.43.1:8080 192.168.43.45
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-04 12:02 EST
Nmap scan report for 192.168.43.45
Host is up (0.031s latency).
Not shown: 87 filtered tcp ports (no-response), 8 filtered tcp ports (admin-prohibited), 2 closed tcp ports (reset)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE
21/tcp open  ftp
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:D9:AA:E7 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 2.55 seconds

IDS

[root@template]-[~]# tail -f /var/log/suricata/fast.log
11/04/2024-11:02:24.227066  [**] [1:10000003:1] ALERTA: Escaneo de puertos detectado [**] [Classification: (null)] [Priority: 3] {TCP} 31.40.191.95:37868 -> 192.168.43.45:111
11/04/2024-11:02:24.228435  [**] [1:10000003:1] ALERTA: Escaneo de puertos detectado [**] [Classification: (null)] [Priority: 3] {TCP} 169.194.164.191:37868 -> 192.168.43.45:111
11/04/2024-11:02:24.229719  [**] [1:10000003:1] ALERTA: Escaneo de puertos detectado [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.43.58:37868 -> 192.168.43.45:111
11/04/2024-11:02:24.243360  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:24.244718  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 192.168.43.58:37868
11/04/2024-11:02:24.295444  [**] [1:10000002:1] ALERTA: Trafico HTTP entrante detectado [**] [Classification: (null)] [Priority: 3] {TCP} 31.40.191.95:37868 -> 192.168.43.45:80
11/04/2024-11:02:24.295475  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:24.296724  [**] [1:10000002:1] ALERTA: Trafico HTTP entrante detectado [**] [Classification: (null)] [Priority: 3] {TCP} 169.194.164.191:37868 -> 192.168.43.45:80
11/04/2024-11:02:24.296763  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:24.298065  [**] [1:10000002:1] ALERTA: Trafico HTTP entrante detectado [**] [Classification: (null)] [Priority: 3] {TCP} 192.168.43.58:37868 -> 192.168.43.45:80
11/04/2024-11:02:24.298093  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 192.168.43.58:37868
11/04/2024-11:02:24.302819  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:24.304056  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 169.194.164.191:37868
11/04/2024-11:02:24.305403  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 192.168.43.58:37868
11/04/2024-11:02:25.254129  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:25.254177  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 31.40.191.95:37868
11/04/2024-11:02:25.318099  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 169.194.164.191:37868
11/04/2024-11:02:25.318147  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:25.318160  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:25.318171  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:27.270117  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 31.40.191.95:37868
11/04/2024-11:02:27.270166  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:27.334192  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:27.334248  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:27.334278  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:27.334293  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 169.194.164.191:37868
11/04/2024-11:02:31.494176  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 169.194.164.191:37868
11/04/2024-11:02:31.494236  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:31.494275  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:31.494287  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:31.494300  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:31.494312  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 31.40.191.95:37868
11/04/2024-11:02:39.686396  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:39.686496  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:39.686528  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:39.686554  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:39.686720  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 169.194.164.191:37868
11/04/2024-11:02:55.814301  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:22 -> 31.40.191.95:37868
11/04/2024-11:02:55.814319  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 169.194.164.191:37868
11/04/2024-11:02:55.814333  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:80 -> 31.40.191.95:37868
11/04/2024-11:02:55.814349  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 169.194.164.191:37868
11/04/2024-11:02:55.814364  [**] [1:2000001:1] ALERTA: Escaneo de puertos (SYN y ACK) detectado [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 192.168.43.45:21 -> 31.40.191.95:37868

Detectado y por Mucho


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

  1. attempted-recon: Actividad que indica un intento de reconocimiento, como escaneos de puertos o descubrimiento de hosts.

  2. successful-recon: Actividad que indica un reconocimiento exitoso.

  3. attempted-dos: Intentos de realizar un ataque de denegación de servicio.

  4. successful-dos: Denegación de servicio exitosa.

  5. attempted-user: Intentos de explotación de vulnerabilidades relacionadas con usuarios.

  6. successful-user: Explotaciones exitosas que afectan a usuarios.

  7. attempted-admin: Intentos de explotación que apuntan a administradores o sistemas críticos.

  8. successful-admin: Explotaciones exitosas que afectan a administradores.

  9. malware-activity: Actividades relacionadas con malware, como descargas o conexiones a servidores de comando y control (C&C).

  10. policy-violation: Violaciones de políticas de seguridad predefinidas, como el uso no autorizado de aplicaciones.

  11. bad-traffic: Tráfico que no se ajusta a las normas o patrones esperados, indicando posible actividad maliciosa.

  12. trojan-activity: Actividades relacionadas con troyanos o software no deseado.

  13. data-theft: Actividades relacionadas con el robo de datos, como la exfiltración de información.

  14. exploit: Intentos de explotar vulnerabilidades en el software o servicios.

  15. shellcode: Detecta el uso de código malicioso que intenta abrir una shell o ejecutar comandos no autorizados.

  16. policy-violation: Indicaciones de que se ha violado una política de seguridad, como el acceso a sitios prohibidos.

  17. compromise: Actividades que indican que un sistema puede haber sido comprometido.

  18. suspected-botnet: Indica que un dispositivo puede formar parte de una botnet.

  19. 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.

#!/usr/bin/python3
# coding: utf-8

import re
import time
import colored

# Función para formatear colores
def colored_text(text, color):
    """Devuelve el texto en el color especificado."""
    return colored.fg(color) + text + colored.attr('reset')

# Función para procesar cada línea de log
def process_line(line):
    # Expresión regular para extraer los datos relevantes de la línea de log
    pattern = r'([0-9]{2}/[0-9]{2}/[0-9]{4}-[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+) +\[\*\*\] +\[(\d+:\d+:\d+)\] +ALERTA: (.+) +\[\*\*\] +\[Classification: (.+?)\] +\[Priority: (\d+)\] +\{(\w+)\} +([\d\.]+:\d+) -> ([\d\.]+:\d+)'
    match = re.match(pattern, line)

    if match:
        fecha_hora, alerta_id, mensaje_alerta, clasificacion, prioridad, protocolo, atacante, destino = match.groups()

        # Mostrar la alerta formateada
        print(colored_text("\n========== ", 'blue') + colored_text("Alerta de Suricata", 'yellow') + colored_text(" ==========", 'blue'))
        print(f"{colored_text('Fecha y Hora:', 'white')} {colored_text(fecha_hora, 'cyan')}")
        print(f"{colored_text('Alerta ID:', 'green')} {colored_text(alerta_id, 'magenta')}")
        print(f"{colored_text('Msj de Alerta:', 'red')} {colored_text(mensaje_alerta, 'yellow')}")
        print(f"{colored_text('Clasificación:', 'magenta')} {colored_text(clasificacion, 'blue')}")
        print(f"{colored_text('Prioridad:', 'yellow')} {colored_text(prioridad, 'cyan')}")
        print(f"{colored_text('Protocolo:', 'cyan')} {colored_text(protocolo, 'green')}")
        print(f"{colored_text('Atacante:', 'blue')} {colored_text(atacante, 'white')}")
        print(f"{colored_text('Destino:', 'blue')} {colored_text(destino, 'white')}")
        print(colored_text("========================================", 'blue'))

def tail_f(file_path):
    """Función para hacer tail -f al archivo de logs."""
    with open(file_path, 'r') as f:
        # Ir al final del archivo
        f.seek(0, 2)
        try:
            while True:
                # Leer una nueva línea
                line = f.readline()
                if not line:
                    time.sleep(0.1)  # Esperar antes de intentar leer otra línea
                    continue
                process_line(line)
        except KeyboardInterrupt:
            print(colored_text("\n========== Fin de las Alertas ==========", 'red'))

if __name__ == "__main__":
    log_file_path = '/var/log/suricata/fast.log'
    print(colored_text("=============== ", 'cyan') + colored_text("SURICATA", 'red') + colored_text(" ===============", 'cyan'))
    tail_f(log_file_path)

Resultado

[root@template]-[~]# ./suricata_alerts.py
=============== SURICATA ===============

========== Alerta de Suricata ==========
Fecha y Hora: 11/04/2024-18:09:50.995385
Alerta ID: 1:10000001:1
Msj de Alerta: Trafico ICMP detectado
Clasificación: (null)
Prioridad: 3
Protocolo: ICMP
Atacante: 192.168.43.58:8
Destino: 192.168.43.45:0
========================================

========== Alerta de Suricata ==========
Fecha y Hora: 11/04/2024-18:10:20.091243
Alerta ID: 1:2000001:1
Msj de Alerta: Escaneo de puertos (SYN y ACK) detectado
Clasificación: Attempted Information Leak
Prioridad: 2
Protocolo: TCP
Atacante: 192.168.43.45:22
Destino: 192.168.43.58:43656
========================================

========== Alerta de Suricata ==========
Fecha y Hora: 11/04/2024-18:11:51.073289
Alerta ID: 1:10000002:1
Msj de Alerta: Trafico HTTP entrante detectado
Clasificación: (null)
Prioridad: 3
Protocolo: TCP
Atacante: 192.168.43.58:58262
Destino: 192.168.43.45:80
========================================
^C
========== Fin de las Alertas ==========
[root@template]-[~]# 

Los IDS e IPS son un mundo, este solo es un pequeño aporte para los amante del Blue Team.

PreviousIntroducción al PivotingNextColisión de Hash

Last updated 3 months ago