Analizando Snort: sistema de detección de intrusiones

Los beneficios de la tecnología de código abierto se centran en costes más bajos y la sabiduría de una comunidad dedicada. El software de código abierto no tiene las tarifas de licencia asociadas con el software propietario, y existe un ecosistema de soporte en torno a una tecnología determinada.

La industria de la seguridad tiene opciones similares disponibles en herramientas cibernéticas para apuntalar las defensas. Dentro de estas opciones se encuentra el sistema de detección de intrusiones en la red Snort.

En este post analizamos qué es Snort, cómo funciona, sus características, componentes y reglas.

¿Qué es Snort?

SNORT es un potente sistema de detección de intrusiones (IDS) de código abierto y un sistema de prevención de intrusiones (IPS) que proporciona análisis de tráfico de red en tiempo real y registro de paquetes de datos. SNORT utiliza un lenguaje basado en reglas que combina métodos de inspección de firmas, protocolos y anomalías para detectar actividades potencialmente maliciosas.

Con SNORT, los administradores de red pueden detectar ataques de denegación de servicio (DoS) y ataques DoS distribuidos (DDoS), ataques Common Gateway Interface (CGI), desbordamientos de búfer y escaneos de puertos sigilosos. SNORT crea una serie de reglas que definen la actividad de red maliciosa, identifican paquetes maliciosos y envían alertas a los usuarios.

SNORT es un software de código abierto y de uso gratuito que pueden implementar personas y organizaciones. El lenguaje de la regla SNORT determina qué tráfico de red debe recopilarse y qué debe suceder cuando detecta paquetes maliciosos.

Este significado de esnifar puede usarse de la misma manera que los rastreadores y los sistemas de detección de intrusiones en la red para descubrir paquetes maliciosos o como una solución IPS de red completa que monitoriza la actividad de la red y detecta y bloquea los posibles vectores de ataque .

Primero veremos qué hace Snort y cómo funciona. Luego, examinaremos cómo se forman las reglas utilizadas por el motor de detección y qué papel tiene la expresión regular compatible con Pearl (PCRE) en estas reglas. Finalmente, terminaremos con ejemplos de reglas, particularmente reglas que demuestran la importancia de PCRE.

Características

Hay varias características que hacen que SNORT sea útil para que los administradores de red monitoricen sus sistemas y detecten actividades maliciosas. Éstas incluyen:

Monitor de tráfico en tiempo real

SNORT se puede utilizar para monitorizar el tráfico que entra y sale de una red. Monitorizará el tráfico en tiempo real y emitirá alertas a los usuarios cuando descubra paquetes o amenazas potencialmente maliciosos en las redes de Protocolo de Internet (IP).

Registro de paquetes

SNORT habilita el registro de paquetes a través de su modo de registro de paquetes, lo que significa que registra los paquetes en el disco. En este modo, SNORT recopila todos los paquetes y los registra en un directorio jerárquico basado en la dirección IP de la red del host.

Análisis de protocolo

SNORT puede realizar análisis de protocolo, que es un proceso de rastreo de red que captura datos en capas de protocolo para análisis adicionales. Esto permite al administrador de la red examinar más a fondo los paquetes de datos potencialmente maliciosos, lo cual es crucial, por ejemplo, en la especificación del protocolo de pila del Protocolo de control de transmisión / IP (TCP / IP).

Coincidencia de contenido

SNORT recopila las reglas por protocolo, como IP y TCP, luego por puertos, y luego por aquellos con contenido y aquellos sin él. Las reglas que tienen contenido utilizan un comparador de patrones múltiples que aumenta el rendimiento, especialmente cuando se trata de protocolos como el Protocolo de transferencia de hipertexto (HTTP). Las reglas que no tienen contenido siempre se evalúan, lo que afecta negativamente al rendimiento.

Huellas digitales del SO

La toma de huellas dactilares del sistema operativo (SO) utiliza el concepto de que todas las plataformas tienen una pila TCP / IP única. A través de este proceso, SNORT se puede utilizar para determinar la plataforma del sistema operativo que utiliza un sistema que accede a una red.

Puede instalarse en cualquier entorno de red

SNORT se puede implementar en todos los sistemas operativos, incluidos Linux y Windows, y como parte de todos los entornos de red.

Fuente abierta

Como pieza de software de código abierto, SNORT es gratuito y está disponible para cualquier persona que quiera usar un IDS o IPS para monitorizar y proteger su red.

Las reglas son fáciles de implementar

Las reglas de SNORT son fáciles de implementar y permiten que la supervisión y la protección de la red estén en funcionamiento. Su lenguaje de reglas también es muy flexible, y la creación de nuevas reglas es bastante simple, lo que permite a los administradores de red diferenciar la actividad regular de Internet de la actividad anómala o maliciosa.

Funcionamiento

Snort es un sistema de detección de intrusiones en la red, pero viene con tres modos de funcionamiento, todos los cuales son parte del NIDS en sí mismo. El primer modo, Sniffer Mode, muestra los paquetes que transitan por la red. Puede configurarse para mostrar varios tipos de paquetes (TCP, UDP, ICMP), así como qué mostrar de los paquetes en sí, ya sea los encabezados o los datos del paquete.

El segundo modo de operación otorgado por snort es el Packet Logger Mode. Permite al usuario guardar los paquetes detectados en el modo Sniffer para guardarlos en el disco duro. A través de este modo, el usuario puede especificar reglas que indiquen qué paquetes guardar, por ejemplo, para guardar solo los paquetes relativos a una dirección específica.

Finalmente, el último modo es el modo NIDS. Este modo es muy similar al registrador de paquetes, pero permite aplicar reglas más específicas a los paquetes, refinando los paquetes que de hecho están registrados (o alertados). Las reglas aplicadas se especifican o se incluyen en el archivo de configuración que se pasa como parámetro al iniciar snort.

Cabe señalar que cada uno de estos modos tiene varias opciones que se pueden configurar a través de parámetros de línea de comando o incluso archivos de configuración.

Por ejemplo, con las alertas activadas en modo NIDS, puedes configurar el contenido de las alertas, dónde se almacenan las alertas, o incluso si solo deseas enviarlas a la consola, o a través de un socket UNIX a otro programa. Si bien la entrada para el NIDS se realiza típicamente con el modo Sniffer, esto se puede reemplazar con un archivo .pcap (captura de paquetes) si el rastreo no es una opción; o la intrusión ya ocurrió, o no puedes colocar Snort en una ubicación para permitir el olfateo.

Componentes de Snort

Snort se compone de cuatro componentes principales, que encadenados permiten que snort cumpla con sus diversos modos.

Son los siguientes:

Decodificador

El primer componente es el decodificador que se encarga de formar paquetes para ser utilizados por los otros componentes. Tiene la función de determinar qué protocolos subyacentes se utilizan en el paquete, así como de determinar la ubicación y el tamaño de los datos del paquete que luego se utilizan en componentes posteriores. Cabe señalar que el decodificador también busca anomalías en los encabezados (como tamaños no válidos), lo que puede hacer que genere alertas.

Preprocesadores

Estos componentes funcionan como complementos y pueden organizar o modificar paquetes de datos. Esto permite que los servicios (como HTTP o FTP tengan un preprocesador correspondiente para verificar anomalías específicas de ese servicio.

Su trabajo es, en última instancia, intentar hacer que sea más difícil engañar al motor de detección. Ejemplos de cómo puede hacer esto son decodificando URI’s, desfragmentando paquetes (la fragmentación de paquetes puede usarse para engañar al motor de detección), detectando escaneo de puertos, así como también detectando anomalías en paquetes ARP, como la suplantación de ARP.

Motor de detección

El componente principal, el motor de detección, tiene la responsabilidad de «detectar si existe alguna actividad de intrusión en un paquete». Para ello, encadena conjuntos de reglas, especificadas en archivos de configuración que incluyen estas reglas, y las aplica a cada paquete.

Si el paquete coincide con una regla, se toma la acción especificada de esa regla o se descarta el paquete. Si snort realiza esto en tiempo real, dependiendo de la carga de la red, se puede experimentar latencia, y en el peor de los casos, los paquetes se descartan todos juntos.

Si un paquete coincide con una regla, el sistema de alerta y registro generará el registro o la alerta  Por supuesto, el mensaje y los contenidos generados por este componente se pueden configurar a través del archivo de configuración. Si un paquete activa varias reglas, el nivel de alerta más alto es lo que realmente generará este componente.

Módulos de salida

Finalmente, después de que se genera una alerta o registro, pasa por el componente Módulos de salida. Este componente tiene la tarea de controlar el tipo de salida generada, utiliza un sistema de complementos que le da flexibilidad al usuario y también es altamente configurable. Esto puede incluir simplemente el registro o el registro en una base de datos, el envío de trampas SNMP, la generación de informes XML o incluso el envío de alertas a través de sockets UNIX, lo que permite la modificación dinámica de configuraciones de red (firewalls o enrutadores).

Reglas de SNORT

Como se mencionó anteriormente, las reglas se utilizan en todos los componentes para detectar anomalías en los paquetes. Las reglas se pueden aplicar a los encabezados de la capa de red y transporte (IP, TCP, UDP, ICMP) o incluso a los encabezados de la capa de aplicación (FTP, HTTP, etc.), pero, por supuesto, las reglas también se pueden aplicar a los paquetes de datos (la carga útil).

Las reglas se componen de dos partes, un encabezado de regla, que especifica qué acción se debe tomar en caso de una coincidencia, el tipo de paquete (TCP, UDP, etc.), así como las direcciones IP de origen y destino y los números de puerto.

La última parte son las Opciones de regla, que especifica el contenido que marca los paquetes como una coincidencia.

Cabe señalar que, si bien la mayoría de las opciones son opcionales, se requiere el sid (Snort ID) y no debe entrar en conflicto con el SID de otra regla. Es el identificador único que se le da a cada regla. Snort reserva SID de 0 a 1.000.000.

En las opciones de reglas, entre una larga lista de posibles indicadores que pueden usarse para detectar varios bits de datos en paquetes, los usuarios pueden incluir expresiones regulares compatibles con Pearl a través de la opción pcre .

Esto permite la detección de datos en el paquete mediante el uso de expresiones regulares, dando a las reglas más control y flexibilidad. PCRE toma el formato estándar, aunque se deben escapar las comillas dobles, el punto y coma y las barras diagonales.

¿Cuáles son los usos de las reglas SNORT?

Las reglas definidas en SNORT permiten que el software lleve a cabo una serie de acciones, que incluyen:

Realizar rastreo de paquetes

SNORT se puede utilizar para realizar un rastreo de paquetes, que recopila todos los datos que se transmiten dentro y fuera de una red. La recopilación de los paquetes individuales que van hacia y desde los dispositivos de la red permite una inspección detallada de cómo se transmite el tráfico.

Depurar tráfico de red

Una vez que haya registrado el tráfico, SNORT se puede utilizar para depurar paquetes maliciosos y cualquier problema de configuración.

Generar alertas

SNORT genera alertas a los usuarios según se define en las acciones de reglas creadas en su archivo de configuración. Para recibir alertas, las reglas de SNORT deben contener condiciones que definan cuándo un paquete debe considerarse inusual o malicioso, los riesgos de explotación de vulnerabilidades y pueden violar la política de seguridad de la organización o representar una amenaza para la red.

Crear nuevas reglas

SNORT permite a los usuarios crear fácilmente nuevas reglas dentro del software. Esto permite a los administradores de red cambiar cómo quieren que funcione la conversión de SNORT y los procesos que debe llevar a cabo.

Por ejemplo, pueden crear nuevas reglas que le digan a SNORT que evite ataques de puerta trasera, busque contenido específico en paquetes, muestre datos de red, especifique qué red monitorizar e imprima alertas en la consola.

Diferenciar entre actividades normales de Internet y actividades maliciosas

El uso de las reglas de SNORT permite a los administradores de red diferenciar fácilmente entre la actividad habitual en Internet esperada y cualquier cosa que esté fuera de la norma. SNORT analiza la actividad de la red en tiempo real para detectar la actividad maliciosa y luego genera alertas para los usuarios.

Sintaxis

Snort sigue una sintaxis específica compuesta por los siguientes campos:

  • Acción de regla: en este campo, puedes elegir una de las cinco acciones de regla integradas: Registro, alerta, aprobación, activación o dinámica. La acción de regla más común es la opción de «alerta», que registra el paquete y la acción realizada y luego alerta al administrador de seguridad.
  • Protocolo: especifica el protocolo en uso, como los protocolos de alto nivel como HTTP y los protocolos de bajo nivel, como TCP, UDP e ICMP. Puedes elegir el que desees para crear tu regla específica.
  • Dirección IP de origen: este campo es la dirección de origen del paquete. Puede ser una única dirección IP o ID de red. Si, por ejemplo, deseas alertar al tráfico desde cualquier dirección IP de origen, puedes usar «cualquiera».
  • Puerto de origen: este campo es el puerto TCP o UDP de origen del paquete. Nuevamente, también puedes usar «cualquiera» si deseas especificar los 65.535 puertos.
  • Flujo (dirección): este campo determina la dirección del flujo de un paquete, generalmente usando el símbolo “->” (flecha direccional).
  • Dirección IP de destino: este es el destino al que está destinado el paquete. Puede ser una única dirección IP, ID de red o «cualquier» dirección.
  • Puerto de destino: este es el puerto TCP o UDP de destino al que está destinado el paquete. Puede ser una única dirección IP, ID de red o «cualquier» dirección.
  • Opciones: gran parte del poder de Snort proviene del cuerpo de Opciones. Detengámonos aquí y abordemos algunas de estas «opciones». Las opciones de la regla Snort ayudan a refinar la regla en sí.
    • Contenido: esta es una palabra clave que se utiliza para encontrar un patrón de cadena dentro de la carga útil de un paquete. Puede estar en formato ASCII, binario o hexadecimal. Por ejemplo, algunas formas de ejecutables maliciosos tienen una cadena binaria o hexadecimal específica. Si conoces esta cadena, puedes especificarla aquí y Snort te avisará si la detecta en tu red.
    • Desplazamiento: la palabra clave de desplazamiento se puede utilizar para especificar el inicio de una búsqueda después de un determinado byte en el paquete. Por ejemplo, si deseas comenzar su búsqueda después de un número particular de bytes en el paquete, puedes hacerlo aquí.
    • Profundidad: la palabra clave de profundidad se utiliza para especificar una búsqueda que se limita a un determinado byte en el paquete. Esto es similar a la opción Offset; sin embargo, esta vez buscamos palabras clave en un rango específico de bytes en la carga útil.
    • Sin mayúsculas y minúsculas: se utiliza para desactivar una búsqueda que distingue entre mayúsculas y minúsculas.
    • Lista de contenido: esta palabra clave se utiliza para localizar un archivo de texto en particular que contiene una palabra clave, como «contraseña» y «ssn». Snort podría, por ejemplo, buscar en un archivo estas palabras clave.
    • Banderas: la palabra clave banderas se puede utilizar para detectar banderas faltantes o inapropiadas establecidas en un encabezado TCP. A veces, los indicadores que faltan son una indicación de un escaneo de puerto o un ataque.

Ejemplos de reglas

Seguridad

Alerta si el paquete contiene la palabra SEGURIDAD.

Regla: alert ip any any -> any any (sid:1000001;msg:»Word SECURITY found»;content:»SECURITY»;

En este ejemplo, podemos notar algunas cosas:

  • alert: esto nos permite activar una alerta si la regla coincide
  • ip: esto permite comparar las reglas con cualquier protocolo (TCP, UDP o ICMP)
  • any any -> any any: cualquier host de origen y puerto a cualquier host y puerto de destino
  • sid:1000001;msg:»Word SECURITY found»: el ID de la regla y el mensaje que se enviará con la alerta.

La particularidad de esta regla es el contenido de la opción. Como describe el manual de Snort “Siempre que se realiza una coincidencia de patrón de opción de contenido, se llama a la función de coincidencia de patrón de Boyer-Moore y la prueba (bastante costosa desde el punto de vista computacional ) se realiza contra el contenido del paquete” . Como podemos deducir de esto, aquí estoy simplemente buscando SECURITY, en una coincidencia sensible a mayúsculas y minúsculas.

Hola Mundo

Alerta si el paquete contiene la frase “Hello World”, con uno o más espacios entre Hello y World.

Regla: alert ip any any -> any any (sid:1000002;msg:»Phrase Hello World found»;pcre:»/Hello\s+World/»;)

La única característica nueva en este ejemplo es la presencia de pcre en lugar de contenido como una opción. Como sugiere el nombre, nos permite utilizar expresiones regulares compatibles con Pearl. Esta expresión regular busca Hello seguido de uno o más espacios ( \s+) seguido de World.

Servidor de correo

Alerta si un paquete de cualquier computadora a un servidor de correo contiene una sola palabra de texto entre comillas dobles, que comienza con una letra mayúscula y tiene entre cuatro y siete letras.

Regla: alert ip any any -> any smtp (sid:1000002;msg»Double quoted text sent to mail server found»;pcre:»/\»[A-Z][a-zA-Z]{3,6}\»/»;)

Aquí usamos el puerto de destino para especificar los paquetes que van a los servidores de correo (smtp se puede reemplazar por 25). Se requieren barras invertidas en la opción PCRE para escapar de las comillas. El PCRE utilizado busca cualquier cadena que comience con una comilla doble, seguida de una mayúscula ( [A-Z]), con un total de 4-7 letras de longitud, por lo tanto la mayúscula más 3 a 6 letras ( [a-zA-Z]{3,6}), seguida de una comilla doble.