Suricata es un sistema de detección de intrusiones ["Intrusion detection system" ("IDS"), en inglés] y un sistema de prevención de intrusiones ["Intrusion detection and prevention systems" ("IPS"), en inglés] de código abierto.
Este programa ofrece capacidades de detección de amenazas. Además, Suricata proporciona filtrado y monitorización de tráfico, pero también proporciona a los administradores de red la capacidad de crear y aplicar reglas de detección.
Este soporte lógico es capaz de detectar vectores de ataque comunes como escaneo de puertos , denegación de servicio , transferencia el saludo ("pass-the-hash", en inglés) y ataques de fuerza bruta .
Suricata utiliza un conjunto de reglas para realizar la detección y el análisis de amenazas.
Este soporte lógico es conocido por su capacidad para examinar el tráfico de red en tiempo real, identificar patrones maliciosos y responder a amenazas de manera proactiva. Su versatilidad y potencia lo han convertido en una opción popular para proteger sistemas críticos y redes de ataques cibernéticos.
Suricata opera en dos modos principales:
- Modo pasivo: En este modo, este soporte lógico actúa como un observador no intrusivo. Analiza el tráfico de red sin interferir con la entrega de datos. El modo pasivo es valioso para la monitorización y la recopilación de información sobre posibles amenazas sin afectar el rendimiento del tráfico. Este enfoque es especialmente útil en entornos donde la intervención activa podría ser arriesgada o no está permitida.
- Modo activo: En el presente modo, Suricata toma medidas inmediatas para prevenir o mitigar amenazas identificadas. Puede bloquear conexiones, enviar alertas y ejecutar acciones específicas según las reglas de seguridad configuradas. Este modo es esencial para una respuesta rápida y proactiva a las amenazas en tiempo real. Sin embargo, se debe utilizar con precaución, ya que puede afectar la entrega de servicios si no se configura adecuadamente.
FUNCIONES
Este programa emplea una variedad de técnicas para analizar el tráfico de red y detectar actividades maliciosas. Entre sus funciones más relevantes se encuentran:
- Motor de reglas: Suricata utiliza un motor de reglas flexible que permite definir patrones y comportamientos específicos asociados con amenazas conocidas o comportamientos anómalos. Estas reglas son esenciales para la identificación de intrusiones.
- Análisis de protocolos: Este soporte lógico analiza múltiples protocolos de red, incluidos TCP, UDP, ICMP, y protocolos de aplicación como HTTP y DNS. Examina el tráfico en busca de anomalías y patrones maliciosos en estos protocolos.
- Inspección de contenido: Suricata puede realizar una inspección profunda del contenido del tráfico, identificando amenazas basadas en patrones de cadenas, explotadores conocidos y firmas de programas maliciosos.
- Decodificación de protocolos: El motor de este programa es capaz de decodificar protocolos en capas, lo que significa que es capaz de analizar y comprender el tráfico en diferentes niveles, desde la capa de red hasta la capa de aplicación.
- Captura de archivos: Suricata puede capturar archivos transmitidos a través de la red para su análisis posterior. Esto es crucial para identificar y examinar posibles amenazas basadas en archivos maliciosos.
- Soporte para IPv6: Este soporte lógico es compatible con IPv6, lo que lo hace apto para entornos que utilizan esta versión del protocolo de Internet.
INSTALACIÓN
En primer lugar, como sucede con todos los paquetes en un sistema operativo linux, hay que actualizar la lista de paquetes y el sistema mediante el comando apt update && apt upgrade -y (anteponiendo sudo si no se ha iniciado sesión como administrador).
Después se instala el programa con el comando apt install suricata -y (anteponiendo sudo si no se ha iniciado sesión como administrador).
Cuando termine, se puede comprobar si el programa está funcionando mediante el comando suricata -V (anteponiendo sudo si no se ha iniciado sesión como administrador), lo que mostrará la versión del mismo.
Una vez instalado, debe configurarse el archivo "suricata.yaml", ubicado en la ruta "/etc/suricata/". Para esto se abrirá el mencionado archivo con un editor de texto (Nano, Vim...).
Lo primero que hay que comprobar es que el parámetro "default-log-dir" tenga el valor correcto, que debe ser la ruta "/var/log/suricata/".
También es buena práctica comprobar a qué interfaz de red está asociado el programa, ya que por defecto es "eth0" y, actualmente las interfaces de red suelen nombrarse de otro modo. El parámetro "interface" de la sección "af-packet" es el que muestra esta información y el que hay que cambiar si fuera necesario [para averiguar el nombre de la interfaz de red se usará el comando ifconfig (o ip a)].
- HOME_NET: Dirección IP de la red local que será inspeccionada por Suricata.
- EXTERNAL_NET: "!$HOME_NET" (variable de entorno que indica cualquier otra red que la red local).
- XXX_SERVERS: Diferentes parámetros que indican los servidores de diferentes servicios (se suelen dejar de modo predeterminado).
- XXX_ CLIENT: Diferentes parámetros que indican los servidores de diferentes servicios (se suelen dejar de modo predeterminado).
- XXX_PORTS: Diferentes parámetros que indican el número de puerto(s) utilizado por diferentes servicios (se suelen dejar de modo predeterminado).
La política IDS detectada suele ser la predeterminada, indicándolo mediante el valor "[0.0.0.0/0]" (o "[]") en la variable con el nombre del sistema operativo indicado en el archivo "suricata.yaml" (en este ejemplo, el sistema operativo predeterminado es Linux, mientras que a Windows se le ha adjudicado el rango de red "192.168.10.0/24").
Acto seguido, se puede configurar la sección "threading", que permite al usuario especificar afinidad de Suricata con la UCP para los diferentes hilos. Predeterminadamente, la afinidad de la UCP está desactivada ("set-cpu-affinity: no"), lo que significa que las discusiones de este IPS serán programados en cualquiera de núcleos de UCP disponibles; así, por defecto, Suricata creará un hilo "detectar" para cada núcleo de UCP.
El usuario puede ajustar este comportamiento especificando el valor "N" en la variable "detect-thread-ratio", lo que creará "N * M" detectar hilos, donde "M" es el número total de núcleos de UCP en el nodo (en este ejemplo se han dejado las opciones por defecto).
Finalmente, se guarda el archivo "suricata.yaml" y se reinicia el servicio con el comando systemctl restart suricata (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Luego, se comprueba que el servicio está activo mediante el comando systemctl status suricata (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Luego, se comprueba que el servicio está activo mediante el comando systemctl status suricata (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Es posible que el servicio, aunque activo, esté deshabilitado, por lo que se puede habiliatar con el comando systemctl enable suricata (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Tambén se puede dar el caso de que el servicio esté habilitado, pero inactivo. Lo que se debe hacer en esta situación es editar el archivo "suricata.service" (ruta "/lib/systemd/system/") y añadirle al final de la línea que comienza por ExecStart= el parámetro -i <interfaz de red a monitorizar>.
Al volver a comprobar el estado del servicio Suricata puede comprobarse que está todo en orden para su funcionamiento.
Puede comprobarse que el programa está funcionando haciendo que muestre su lista de modos de ejecución ("runmodes", en inglés) usando el comando suricata --list-runmodes (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
REGLAS
Las reglas de este IDS/IPS (mencionadas anteriormente) son el conjunto de directivas que se utilizan para especificar qué tipos de tráfico de red deben ser monitorizados y qué acciones deben tomarse cuando se detecta tráfico sospechoso. Las reglas de Suricata se componen de tres partes principales: La acción ("action", en inglés), la cabecera ("header", en inglés) y las opciones ("options", en inglés). La estructura general de las reglas en Suricata, nombradas como firma (“Signature”, en inglés), disponen de una serie de campos que describen las características de la propia regla. Estas reglas (guardadas en el directorio "rules" de la ruta "etc/suricata" como archivos ".rules") pueden ser aplicadas a cada una de las interfaces disponibles en base a las necesidades del usuario.
Posee la siguiente sintaxis:
Action <parámetro1>...<parámetro2>... Header <parámetro1>...<parámetro2>... Options <parámetro1>...<parámetro2>...
Su formato es:
- Action: Determina la acción que realizará Suricata cuando se identifica la regla en el flujo de red.
- Header: Se define el protocolo, las direcciones IP y puertos de origen y destino de la dirección de la regla. Corresponde al flujo de red en concreto que se va a analizar (de origen a destino). Con la palabra “any” se puede indicar que se analizarán todos los puertos.
- Options: Proporciona una serie de opciones adicionales que se pueden utilizar para refinar la regla en base a como se desea que actúe.
Parámetros de las reglas
Cualquiera de las reglas antes mencionadas posee una serie de parámetros delos que más relevantes son:
- Action:
- alert: Se genera una alerta en el registro de eventos y se permite el tráfico.
- drop: Se descarta el tráfico que cumple la regla.
- reject: Se rechaza el tráfico que cumple la regla con un mensaje de error ICMP.
- pass: Se permite el tráfico que cumple la regla sin generar una alerta en el registro de eventos.
- sdrop: Se descarta el tráfico que cumple la regla sin generar una alerta en el registro de eventos.
- ignore: Se ignora el tráfico que cumple la regla sin generar una alerta en el registro de eventos.
- replace: Se reemplaza el contenido que cumple la regla antes de permitirlo o descartarlo.
- log: Se registra el tráfico que cumple la regla en el registro de eventos sin generar una alerta ni bloquear el tráfico.
- user: Se utiliza para aplicar una acción personalizada definida por el usuario en la configuración.
- Header:
- Protocolo: Especifica el protocolo especifico de la capa de transporte que se analizará. Algunos de los protocolos principales son: TCP, UDP, ICMP, ICMPv6, IP, ARP.
- IP de origen o destino: Especifica la dirección IP de origen y destino del trafico.
- Puerto de origen o destino: Especifica el puerto de origen y destino del trafico.
- Contenido: Hace referencia al contenido que se debe buscar en el tráfico, como pudieran ser cadenas de texto o un patrón de bytes:
- Content: Permite buscar una cadena de texto en el paquete.
- Content:!"string": Permite buscar paquetes que NO contengan una cadena de texto.
- Content:| hex |: Permite buscar un valor hexadecimal específico en el paquete.
- Content:!"| hex |": Permite buscar paquetes que NO contengan un valor hexadecimal específico.
- Content:"pattern1"; content:"pattern2": Permite buscar múltiples patrones en el mismo paquete.
- Content:"pattern1"; within:X; content:"pattern2": Permite buscar patrones que estén separados por X bytes.
- Options:
- distance: Se usa junto con within para especificar una distancia a partir de la última coincidencia de contenido.
- offset: Se utiliza para saltar una cantidad específica de bytes en un paquete antes de intentar hacer coincidir el contenido.
- depth: Se utiliza para limitar la profundidad de búsqueda de una coincidencia en un paquete.
- http_method, http_uri, http_header, etc.: Estos son modificadores específicos para HTTP que te permiten buscar en partes específicas de una solicitud o respuesta HTTP.
Puede conocerse el conjunto predeterminado de proveedores de reglas empleando el comando suricata-update list-sources (anteponiendo sudo si no se ha iniciado sesión como usuario administrador) y actualizar un conjunto de reglas con el comando suricata-update -o /etc/suricata/rules (anteponiendo sudo si no se ha iniciado sesión como usuario administrador), o bien suricata-update --disable-conf=/etc/suricata/disable.conf (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
MODOS DE EJECUCIÓN
Este IDS/IPS consta de varios "bloques de construcción" llamados hilos, módulos de hilos y colas.
Un hilo es como un proceso que se ejecuta en un ordenador. Suricata es multihilo, por lo que varios hilos están activos a la vez.
Un módulo de hilo forma parte de una funcionalidad.
Un paquete puede ser procesado por más de un hilo, pudiendo pasar de un hilo a otro a través de una cola. Los paquetes son procesados por un hilo a la vez, pero el motor puede procesar varios paquetes simultáneamente.
Un hilo puede tener uno o más módulos. Si tienen más módulos, solo pueden estar activos a la vez.
La forma en que se organizan los hilos, módulos y colas se denomina modo de ejecución (todos los modos de ejecución disponibles mediante el comando, antes mencionado, suricata --list-runmodes). Cada uno de ellos tiene un nombre, y su tarea más compleja es la detección, puesto que un paquete se compara con miles de firmas.
El modo de ejecución predeterminado de este IDS/IPS es "autofp" [que significa "auto equilibrio para flujos altos de carga" ("auto flow pinned load balancing", en inglés)].
COMANDOS RELEVANTES
Los siguientes comandos suelen ser los más utilizados con este IDS/IPS (algunos de los cuales necesitan que se anteponga sudo si no se ha iniciado sesión como usuario administrador):
- suricata -c <archivo de configuración> -i <dispositivo de red>: Inicia la monitorización del dispositivo de red indicado.
- tail -f /var/log/suricata/<archivo de registro>: Muestra alertas en tiempo real en un formato dado.
- suricata-update <parámetro>: Descarga, actualiza y gestiona las reglas de Suricata.
- suricatasc: Activa la consola de comandos de sistema.
- suricatasc -c <comando de sistema>: Ejecuta un comando del sistema desde fuera de la consola de sistema.
- pkill suricata: Detiene cualquier proceso de Suricata en ejecución.
REGISTROS
Los registros (o bitácoras) de Suricata, se encuentran localizados en la "/var/log/suricata", y son estos 4:
- eve.json: Recoge los eventos disparados por las reglas, pero lo hace en formato JSON, lo que permite que posteriormente pueda ser interpretado de forma mucho más fácil por programas externos.
- fast.log: Recoge los eventos disparados por las reglas. Tiene como objetivo dar una impresión rápida y directa de los eventos.
- stats.log: Recoge estadísticas regulares acerca del tráfico que se ha ido analizando hasta el momento.
- suricata.log: Recoge los eventos del mismo Suricata: inicializaciones, recargas, errores, etc.
USO BÁSICO
Para ejecutar Suricata simplemente se debe escribir el comando suricata <parámetro 1>...<parámetro 2>....
Sin embargo, si se pretende emplear el modo de captura de pcap, es muy recomendable desactivar cualquier característica de paquetes de descarga ("offload", en inglés; como LRO / GRO) en la tarjeta de red, que está escuchando en Suricata, ya que esas funciones pueden interferir con la captura de paquetes en vivo, lo cual se consigue mediante el comando ethtool -K <nombre de interfaz> gro off lro off (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Hecho esto, se activa el programa para que analice el tráfico de un dispositivo de red mediante el comando suricata -c <archivo de configuración> -i <dispositivo de red> (anteponiendo sudo si no se ha iniciado sesión como usuario administrador).
Si se abre un monitor de procesos (como Htop, en este ejemplo), es posible ver la ejecución recién solicitada al Suricata.
Los datos se guardan en los archivos de registro de este programa de la ruta "/var/log/suricata/". Pueden verse con el comando tail -<nº> <nombre del archivo de registro> (el número cuantifica el número de líneas del registro).
Espero que la presente entrada haya sido interesante para el lector. Si es así, aguardo que éste la comente y/o la comparta, por favor.













No hay comentarios:
Publicar un comentario
Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.