Skip to main content
Detecta intrusos en tu red con Snort

Detecta intrusos en tu red con Snort

Utilizando un Detector de Intrusos como Snort evitaremos que un atacante puede obtener información acerca de nuestro sistema.

Bienvenidos a un nuevo post en ByteMind. En el caso de hoy vamos a comentar un potente IDS gratuito llamado Snort.

Pero antes de comenzar con Snort, vamos a resolver la duda de qué es un IDS para todos aquellos que no conozcan este término.

 

¿Qué es un IDS?

Un IDS (Intruder Detection System) es un sistema que intenta detectar y alertar sobre los intentos de intrusión realizados en un sistema o red, considerando intrusión, toda actividad no autorizada o que no debería de ocurrir en el mismo.

El IDS suele tener sensores virtuales, como por ejemplo un sniffer de red, con los que el núcleo del mismo puede obtener datos externos. Generalmente, gracias a estos sensores, detecta anomalías que puedes ser el indicio de la presencia de un ataque o una falsa alarma. Algunas de las características de estos sistemas son:

  • Deben de estar en ejecución continua y con un mínimo de supervisión
  • Deben de ser capaces de recuperarse antes posibles caídas o problemas de red
  • Deben ser capaces de analizarse a si mismo y detectar si ha sido modificado por un atacante
  • Debe estar configurado acorde a la política de seguridad necesaria para la organización

Dicho esto, existen diferentes tipos de IDS, clasificados según el tipo de situación física, del tipo de detección o de su naturaleza y reacción al detectar un posible ataque. Con esta indicación vamos a ver los tipos de IDS.

Según la función del software pueden ser:

  • NIDS (Network Intrusion Detection System) -> analizan el tráfico de la red completa, examinando los paquetes individualmente, comprendiendo todas las diferentes opciones que pueden coexistir dentro de un paquete de red y detectando paquetes maliciosos y diseñados para no ser detectados por los cortafuegos.
  • HIDS (Host Intrusion Detection System) -> analizan el tráfico sobre un servidor o un PC, se preocupan de lo que está sucediendo en cada host y son capaces de detectar situaciones como los intentos fallidos de acceso omodificaciones en archivos considerados críticos.

Según el tipo de detección:

  • Detección del mal uso -> involucra la verificación sobre tipos ilegales de tráfico de red, por ejemplo, combinaciones dentro de un paquete que no se podrían dar legítimamente.
  • Detección del uso anómalo -> se apoya en una serie de estadísticas para entender cual es el tráfico “normal” en la red y cual no lo es.

Y según su naturaleza:

  • Pasivos -> detectan una posible violación de la seguridad, registran la información y genera una alerta.
  • Reactivos -> están diseñados para responder ante una actividad ilegal, por ejemplo, sacando al usuario del sistema o mediante la reprogramación del cortafuegos para impedir el tráfico desde una fuente hostil.

Sin más preambulos continuemos con Snort.

 

¿Qué es Snort?

Snort es un IDS basado en red (NIDS) open source. Cuenta con numerosas reglas creadas oficialmente y por la amplia comunidad existete y además, con un lenguaje de creación de reglas en el que se pueden definir los patrones que serán utilizados a la hora de monitorizar el sistema, de tal forma que se adapte perfectamente a cualquier configuración que se necesite.

Además de esto es capaz de funcionar de tres formas.

  • Modo sniffer -> se motoriza por pantalla en tiempo real toda la actividad en la red en que Snort es configurado.
  • Modo packet logger (registro de paquetes) -> se almacena en un sistema de log toda la actividad de la red en que se ha configurado en Snort para un posterior análisis.
  • Modo IDS (NIDS en este caso) -> se motoriza por pantalla o en un sistema basado en log, toda la actividad de la red a través de un fichero de configuración en el que se especifican las reglas y patrones a filtrar para estudiar los posibles ataques.

 

Instalación de Snort

El primer paso será descargar daq desde la url oficial de snort con el siguiente comando:

Posteriormente descargamos el paquete rpm (para centos, en nuestro caso) desde la web oficial de snort:

Y ahora procederemos a su instalación. Para el paquete daq, descomprimirmos el tar.gz y compilamos. Utilizaremos los siguientes comandos:

Para la instalación de Snort desde el paquete rpm lanzaremos el siguiente comando:

Como paso extra podemos descargarnos las reglas de la comunidad de snort. Para ello necesitaremos crear una cuenta gratuita en snort y descargarnos las mismas desde el siguiente enlace.

Una vez descargadas, descomprimimos y las copiamos en la ruta /etc/snort/rules

A continuación instalaremos pulledpork para el manejo de las reglas de snort. Para ello descargaremos el código de github:

Accedemos al directorio recién creado:

Copiamos el fichero pulledpork.pl a /usr/local/bin

Cambiamos los permisos del fichero pullerpork.pl

Y copiamos los ficheros de configuración de pulledpork a la ruta por defecto de snort snort /etc/snort
A continuación creamos el directorio iplists sobre la siguiente ruta /etc/snort/rules/

Y crearemos el fichero ‘default.blacklists’ en el directorio recién creado:

Completada la instalación, comprobaremos que funciona correctamente con el siguiente comando:

El cual debería devolver una salida similar a la siguiente:

 

Completado este paso ya podemos levantar el servicio de snort y verlo en funcionamiento con el siguiente comando:

Como vemos en la siguiente imagen:

Detecta intrusos en tu red con Snort

O podemos controlar el estado del servicio con el siguiente comando:

 

Configuración de reglas

En Snort se pueden crear multitud de reglas, además de las ya creadas por la propia comunidad. Para la creación de las mismas se deberá crear un fichero en la ruta /etc/snort/rules/filename.rules en el cual se incluyan las mismas.

Una vez creado nuestro fichero será necesario añadirlo en el fichero de configuración snort.conf y reiniciar el servicio. Veamoslo con un ejemplo. En nuestro caso vamos a crear una regla para detectar tráfico icmp.

Creamos nuestro fichero .rules e introducimos el siguiente contenido:

La sintaxis utilizada en el anterior comando escrito en el fichero sería la siguiente:

Como campos extra podemos añadir el que queramos y tendríamos disponibles los siguientes entre otros:

  • msg -> indica el mensaje a mostrar en la alerta
  • sid -> indica el identificador de la alerta
  • rev -> revisión de la alerta
  • content -> especificamos un contenido a bloquear, por ejemplo, una url
  • logto -> registra el paquete en un nombre de archivo especificado por el usuario en lugar del archivo de salida estándar
  • ttl -> comprueba el valor del campo TTL del encabezado IP
  • tos -> comprueba el valor del campo TOS del encabezado IP
  • id -> comprueba el campo de ID de fragmento del encabezado IP para un valor específico
  • ipoption -> comprueba los campos de opciones de IP para códigos específicos
  • fragbits -> comprueba los bits de fragmentación del encabezado IP
  • dsize -> comprueba el tamaño de la carga útil del paquete contra un valor
  • flags -> comprueba los flags TCP para ciertos valores
  • seq -> comprueba el campo de número de secuencia TCP para un valor específico
  • ack -> comprueba el campo de reconocimiento TCP para un valor específico
  • itype -> comprueba el campo de tipo ICMP con un valor específico
  • icode -> comprueba el campo de código ICMP con un valor específico
  • icmp_id -> comprueba el campo ICMP ECHO ID con un valor específico
  • icmp_seq -> comprueba el número de secuencia ICMP ECHO contra un valor específico
  • content -> busca un patrón en la carga útil del paquete 
  • content-list -> busca un conjunto de patrones en la carga útil del paquete
  • offset: modificador para la opción de contenido, establece el desplazamiento para comenzar a intentar una coincidencia de patrón
  • depth: modificador para la opción de contenido, establece la profundidad máxima de búsqueda para un intento de coincidencia de patrón
  • nocase -> empareja la cadena de contenido anterior con mayúsculas y minúsculas
  • session -> vuelca la información de la capa de aplicación para una sesión determinada
  • rpc -> comprueba los servicios RPC para aplicaciones específicas / llamadas de procedimiento
  • resp -> respuesta activa (conexiones inactivas, etc.)
  • react -> respuesta activa (bloquear sitios web)

A continuación añadiremos nuestro fichero a la configuración de snort de la siguiente forma. Buscamos la cadena:

Y añadimos al final de la lista nuestro fichero:

Completado este paso volvemos a levantar el servicio de snort.

Ahora vamos a realizar una prueba de que funciona correctamente la misma, en nuestro caso lanzamos un scaner con nmap desde una instancia con Kali Linux.

Detecta intrusos en tu red con Snort

Y comprobamos que hemos recibido la alerta en nuestra instancia de snort. Para ello revisaremos el fichero de log generado (si hemos añadido la opción) o en el fichero de log situado por defecto en /var/log/snort/alerts

Detecta intrusos en tu red con Snort

 

Como se aprecia en la anterior imagen, hemos sido alertados del tráfico icmp enviado desde nuestra instancia kali a la instancia con snort instalado. Esta es sólo una pequeña alerta pero se puede configurar para tener controlada nuestra red y ser alertados cuando se detecte alguna anomalía en la misma.

Esto ha sido todo por el momento, espero les sea de utilidad y les ayude a reforzar su infraestructura.

Expongan sus comentarios, dudas y/o sugerencias y nos vemos en el próximo post.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *