La ciberseguridad se ha convertido en un eje prioritario de mejora para las organizaciones. Cada día se publican numerosos artículos sobre los ciberataques sufridos por las empresas, lo que explica el aumento del 7,7 % en la inversión en ciberseguridad el año pasado, según datos de IDC (Quantity Data Report).
Las empresas buscan diferentes soluciones para proteger y asegurar sus datos, que constituyen el activo más importante de cualquier empresa, y también buscan soluciones que permitan mitigar los ataques.
¿Conoces Suricata?
Entre las soluciones que buscan las organizaciones, la implementación de sistemas de detección de intrusiones (IDS) como Suricata está cobrando importancia. Suricata es un motor de detección de amenazas rápido y que consume pocos recursos, que analiza el tráfico de red en busca de patrones y comportamientos maliciosos, lo que le permite bloquear el tráfico no deseado y proteger así la red y los sistemas de la organización frente a posibles amenazas. Además, cuenta con una interfaz gráfica de usuario fácil de usar que facilita una configuración sencilla e intuitiva para los administradores.
Este artículo trata sobre la generación de reglas, explicando su estructura y los distintos parámetros que permiten definirlas.
Estructura de las normas en los suricatos
Las reglas de Suricata son el conjunto de directrices que permiten especificar los tipos de tráfico de red que se deben supervisar y las acciones que se deben llevar a cabo en caso de tráfico sospechoso. Se componen de tres partes principales: la acción, el encabezado y las opciones. La estructura general de las reglas en Suricata, denominada «firma», incluye una serie de campos que describen las características de la propia regla.
Estas reglas pueden aplicarse a cada una de las interfaces disponibles en función de las necesidades de la organización.
El formato de las reglas de Suricata se define de la siguiente manera:
- Acción: Determina la acción que se lleva a cabo cuando se encuentra una coincidencia con la firma.
- Encabezado: Define el protocolo, las direcciones IP y los puertos de origen y destino de la regla.
- Opciones:Ofrece una serie de opciones adicionales que permiten ajustar la regla según el comportamiento deseado. Por ejemplo, para una búsqueda que no distinga entre mayúsculas y minúsculas, utilice el parámetro «nocase» (distingue entre mayúsculas y minúsculas).
En la siguiente sección se detallan todos los parámetros aplicables a las reglas de Suricata, describiendo e ilustrando algunos de ellos:
Acción:
- Alerta: se ha generado una alerta en el registro de eventos y se permite el tráfico.
- Eliminación: el tráfico que cumple la regla se descarta.
- Rechazar: el tráfico que cumple la regla se rechaza con un mensaje de error ICMP.
- Pasaje: se permite el tráfico que cumple con la norma sin generar ninguna alerta en el registro de eventos.
- sdrop: el tráfico que cumple la regla se rechaza sin generar ninguna alerta en el registro de eventos.
- ignorar: el tráfico que cumple esta regla se ignora sin generar ninguna alerta en el registro de eventos.
- sustituir: el contenido que cumple la regla se sustituye antes de ser aceptado o rechazado.
- registro: el tráfico que cumple las normas se registra en el registro de eventos sin generar alertas ni bloquear el tráfico.
- usuario: se utiliza para aplicar una acción personalizada definida por el usuario en la configuración.
Encabezado:
- Protocolo: Especifica el protocolo de la capa de transporte que se va a analizar. Estos son algunos de los principales protocolos: TCP, UDP, ICMP, ICMPv6, IP, ARP
- Dirección IP de origen o de destino: especifica la dirección IP de origen y de destino del tráfico
- Puerto de origen o de destino: especifica el puerto de origen y de destino del tráfico
- Contenido: se refiere al contenido que se va a buscar en el tráfico, como cadenas de texto o un patrón de bytes.
- Contenido: permite buscar una cadena de texto en el paquete.
- Content:!"string": te permite buscar paquetes que NO contengan una cadena de texto.
- Contenido:| hex | : te permite buscar un valor hexadecimal específico en el paquete.
- Contenido: !"| hex |): te permite buscar los paquetes que NO contienen un valor hexadecimal específico.
- content:«pattern1»; content:«pattern2»: permite buscar varios patrones en el mismo paquete.
- Contenido: «pattern1»; en: X; contenido: «pattern2»: permite buscar patrones separados por X bytes.
Opciones:
- El argumento `distance:` se utiliza junto con `within` para especificar una distancia con respecto a la última coincidencia de contenido. Por ejemplo, si tienes `content:"ABC"; distance:10; content:"DEF";`, se buscará un «DEF» que aparezca 10 bytes después del final del «ABC» anterior.
- desplazamiento: se utiliza para omitir un número específico de bytes en un paquete antes de intentar hacer coincidir el contenido.
- profundidad: se utiliza para limitar la profundidad de búsqueda de una coincidencia dentro de un paquete.
- http_method, http_uri, http_header, etc.: Son modificadores específicos de HTTP que te permiten buscar partes concretas de una solicitud o respuesta HTTP.
Regla para detectar escaneos de puertos
Así sería una regla sencilla para detectar el escaneo de puertos basada en el envío de paquetes SYN:
ACCIÓN | ENCABEZADO | OPCIONES
alerta tcp any any -> any any (msg:«SYN SCAN detectado»; flow:stateless; flags:S; reference:arachnids,198; classtype:attempted-recon; sid:2100624; priority:5; rev:8; threshold:type both, track by_src, count 9, seconds 1;)
- Alerta: indica que se generará una alerta si se cumple la condición establecida.
- tcp: Indica que se buscarán paquetes TCP.
- any any -> any any: Define las direcciones IP y los puertos de origen y destino de los paquetes que se van a buscar. En este caso, se analizarán todas las direcciones IP y todos los puertos de origen y destino.
- msg:«SYN Scan Detected»: Define el mensaje de alerta que se mostrará cuando se cumpla la condición especificada. En este caso, el mensaje es «SYN SCAN Detected».
- flow:stateless: Indica que la regla se aplica a flujos sin estado, es decir, a flujos en los que no se espera el seguimiento de las conexiones TCP.
- flags:S: Indica que se buscarán los paquetes con el bit SYN (S) activado.
- Referencia: arachnids,198: hace referencia al identificador de la regla en la base de datos Arachnids.
- classtype:attempted-recon: Indica la clasificación de la alerta. En este caso, «attempted-recon» significa que se ha detectado un intento de reconocimiento.
- sid:2100624 : Identificador único de la regla.
- prioridad:5: Prioridad asignada a la regla, en una escala del 1 al 5.
- rev:8: Número de revisión de la norma.
- `threshold:type both, track by_src, count 9, seconds 1`: Define un umbral para evitar falsas alertas. En este caso, se generará una alerta cuando se detecten más de 9 intentos de análisis de puertos por segundo procedentes de la misma dirección IP de origen.
Conclusión
En conclusión, las reglas de Suricata permiten detectar amenazas como los intentos de escaneo de puertos, los ataques de denegación de servicio, el malware y las intrusiones en la red. La creación y gestión de reglas en Suricata permite a las organizaciones adaptar su sistema de seguridad a sus necesidades específicas y a la constante evolución de las amenazas. En SCASSI, estamos preparados para ayudar a las organizaciones a mejorar sus capacidades de detección. Este es el primer paso hacia la implementación de flujos de trabajo eficaces para la gestión de amenazas y alertas. La ciberseguridad es un proceso continuo. En SCASSI, nos comprometemos a acompañar a nuestros clientes en cada etapa, ayudándoles a mantenerse protegidos y resilientes en un ciberespacio cada vez más amenazado.
