En la entrada anterior se ha visto como instalar y configurar las características básicas de Snort, en esta entrada, se detallarán algunos conceptos importantes que un profesional en la seguridad informática debe dominar correctamente para utilizar este sistema.
En primera instancia, puede decirse que Snort es un sistema que permite un alto nivel de personalización, optimización y configuración para manipular los paquetes que viajan en una maquina e incluso, aquellos que viajan por el segmento de red, en este orden de ideas, se definen 3 modos básicos de ejecución de Snort, estos son:
Modo Pasivo o Sniffer:
Es el modo mas básico de ejecución de Snort, consiste simplemente en la captura de los paquetes entrantes y salientes de la maquina y posteriormente, dichos paquetes se enseñan de forma constante en la consola.
>snort -vde 06/15-22:22:11.998828 08:00:27:3D:D1:97 -> 54:42:49:FA:C1:0D type:0x800 len:0x522 192.168.1.34:22 -> 192.168.1.33:55834 TCP TTL:64 TOS:0x10 ID:44065 IpLen:20 DgmLen:1300 DF ***AP*** Seq: 0xFEBD14E4 Ack: 0x190A84C Win: 0xDF TcpLen: 32 TCP Options (3) => NOP NOP TS: 3222708 1337672 19 D1 B3 37 F9 25 F4 4D BB 24 C4 E5 00 AC 07 75 …7.%.M.$…..u 1A 4C 82 40 21 91 E7 DD 48 C9 DC 10 AE BD 66 5D .L.@!…H…..f] E3 90 70 DA 3B 1C C8 AB 79 75 5D 34 55 D1 9B 30 ..p.;…yu]4U..0 CA D0 41 21 9D AB 9D C6 27 5A C3 37 3D E5 61 69 ..A!….’Z.7=.ai …………… =============================================================================== Packet I/O Totals: Received: 728 Analyzed: 725 ( 99.588%) Dropped: 0 ( 0.000%) Filtered: 0 ( 0.000%) Outstanding: 3 ( 0.412%) Injected: 0 =============================================================================== Breakdown by protocol (includes rebuilt packets): Eth: 725 (100.000%) VLAN: 0 ( 0.000%) IP4: 725 (100.000%) Frag: 0 ( 0.000%) ICMP: 0 ( 0.000%) UDP: 2 ( 0.276%) TCP: 482 ( 66.483%) IP6: 0 ( 0.000%) IP6 Ext: 0 ( 0.000%) ……….. |
Modo Logger:
En una extensión del modo Pasivo, se trata de capturar todos los paquetes entrantes y salientes de la maquina, pero almacenando los resultados de forma persistente al disco duro, este modo tiene algunas características que le permiten a Snort optimizar su ejecución.
>snort -l /home/adastra/logs/ -b Running in packet logging mode –== Initializing Snort ==– Initializing Output Plugins! Log directory = /home/adastra/logs/ pcap DAQ configured to passive. Acquiring network traffic from «eth0″. Decoding Ethernet –== Initialization Complete ==– ,,_ -*> Snort! <*- o» )~ Version 2.9.0.5 IPv6 (Build 135) »» By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2011 Sourcefire, Inc., et al. Using libpcap version 1.1.1 Using PCRE version: 8.02 2010-03-19 Using ZLIB version: 1.2.3.4 Commencing packet processing (pid=3096) |
Los logs generados son formato tcpdump, que se pueden descomprimir y visualizar posteriormente utilizando utilidades como chaosreader o incluso con snort, como se vera unas lineas mas abajo, la opción “-b” permite generar una forma compacta de los log generados, cabe anotar que esta opción registra todo lo que pasa por la red, del mismo modo que podría hacerlo tcpdump.
Por otro lado, todos los paquetes que se almacenan con esta opción pueden ser posteriormente visualizados con Snort utilizando la opción “-r” la cual permite leer los ficheros de captura así como filtrarlos por palabras clave en las capturas realizadas:
>snort -dvr snort.log.1308171174 Running in packet dump mode –== Initializing Snort ==– Initializing Output Plugins! pcap DAQ configured to read-file. Acquiring network traffic from «snort.log.1308171174″. –== Initialization Complete ==– ,,_ -*> Snort! <*- o» )~ Version 2.9.0.5 IPv6 (Build 135) »» By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2011 Sourcefire, Inc., et al. Using libpcap version 1.1.1 Using PCRE version: 8.02 2010-03-19 Using ZLIB version: 1.2.3.4 Commencing packet processing (pid=3116) 06/15-22:52:54.983578 192.168.1.34:22 -> 192.168.1.33:55834 TCP TTL:64 TOS:0x10 ID:44308 IpLen:20 DgmLen:548 DF ***AP*** Seq: 0xFEBDE604 Ack: 0x190CC4C Win: 0xDF TcpLen: 32 TCP Options (3) => NOP NOP TS: 3683455 1521968 ………………………… |
Con filtro
>snort -dvr snort.log.1308171174 icmp Running in packet dump mode –== Initializing Snort ==– Initializing Output Plugins! Snort BPF option: icmp pcap DAQ configured to read-file. Acquiring network traffic from «snort.log.1308171174″. –== Initialization Complete ==– ,,_ -*> Snort! <*- o» )~ Version 2.9.0.5 IPv6 (Build 135) »» By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2011 Sourcefire, Inc., et al. Using libpcap version 1.1.1 Using PCRE version: 8.02 2010-03-19 Using ZLIB version: 1.2.3.4 Commencing packet processing (pid=3117) =============================================================================== Run time for packet processing was 0.68 seconds Snort processed 0 packets. Snort ran for 0 days 0 hours 0 minutes 0 seconds Pkts/sec: 0 =============================================================================== Packet I/O Totals: Received: 0 Analyzed: 0 ( 0.000%) Dropped: 0 ( 0.000%) Filtered: 0 ( 0.000%) Outstanding: 0 ( 0.000%) Injected: 0 |
Modo NIDS (Network Intrusion Detection System):
Sin lugar a dudas es el modo más interesante (y mas complejo) de Snort, se trata de la captura y manipulación de los paquetes entrantes y salientes del segmento de red, para conseguir esto, Snort se basa en un conjunto de reglas predefinidas que indican que es lo que se debe hacer con cada uno de los paquetes que cumplan con las características de dichas reglas, en este sentido es bastante similar a IPTables, sin embargo permite realizar muchas más acciones en función a lo que se encuentre definido en las reglas declaradas.
Para definir estas reglas, frecuentemente se utiliza un fichero de configuración para tal fin, utilizando la opción “-c” que permite recibir como parámetro un fichero de configuración valido.
>snort -c -d -h 192.168.1.0/24 /etc/snort/snort.conf -i eth0 Running in IDS mode –== Initializing Snort ==– Initializing Output Plugins! Initializing Preprocessors! Initializing Plug-ins! Parsing Rules file «/etc/snort/snort.conf» PortVar ‘HTTP_PORTS’ defined : [ 80 311 591 593 901 1220 1414 1830 2301 2381 2809 3128 3702 5250 7001 7777 7779 8000 8008 8028 8080 8088 8118 8123 8180 8243 8280 8888 9090:9091 9443 9999 11371 ] PortVar ‘SHELLCODE_PORTS’ defined : [ 0:79 81:65535 ] PortVar ‘ORACLE_PORTS’ defined : [ 1024:65535 ] PortVar ‘SSH_PORTS’ defined : [ 22 ] ……………………. +++++++++++++++++++++++++++++++++++++++++++++++++++ Initializing rule chains… 1 Snort rules read 1 detection rules 0 decoder rules 0 preprocessor rules 1 Option Chains linked into 1 Chain Headers 0 Dynamic rules +++++++++++++++++++++++++++++++++++++++++++++++++++ ……………………. Rule application order: activation->dynamic->pass->drop->sdrop->reject->alert->log Verifying Preprocessor Configurations! ICMP tracking disabled, no ICMP sessions allocated ……………………. Decoding Ethernet –== Initialization Complete ==– ,,_ -*> Snort! <*- o» )~ Version 2.9.0.5 IPv6 (Build 135) »» By Martin Roesch & The Snort Team: http://www.snort.org/snort/snort-team Copyright (C) 1998-2011 Sourcefire, Inc., et al. Using libpcap version 1.1.1 Using PCRE version: 8.02 2010-03-19 Using ZLIB version: 1.2.3.4 Rules Engine: SF_SNORT_DETECTION_ENGINE Version 1.13 <Build 18> Preprocessor Object: SF_SMTP (IPV6) Version 1.1 <Build 9> Preprocessor Object: SF_FTPTELNET (IPV6) Version 1.2 <Build 13> Preprocessor Object: SF_SSH (IPV6) Version 1.1 <Build 3> Preprocessor Object: SF_SDF (IPV6) Version 1.1 <Build 1> Preprocessor Object: SF_DNS (IPV6) Version 1.1 <Build 4> Preprocessor Object: SF_SSLPP (IPV6) Version 1.1 <Build 4> Preprocessor Object: SF_DCERPC2 (IPV6) Version 1.0 <Build 3> Commencing packet processing (pid=3127) |
Como se podrá apreciar tras la ejecución de los comandos anteriores, se generan una serie de trazas de log que en algunos casos no es necesaria, especialmente con el nivel de detalle que se genera en algunas ocasiones cuando ocurre una alerta, para controlar las opciones de salida de Snort en modo NIDS existen diferentes modos disponibles desde linea de comandos, todos controlados por medio de la opción -A, estos son:
-A fast: Modo de alerta rápido, escribe la alerta en un formato sencillo y solamente con los campos básicos: Fecha, mensaje de alerta, Direcciones IP y puertos de origen y destino.
-A full: Modo de alerta completo, se trata del valor por defecto, y traza todos los campos de una alerta.
-A unsock: Se trata de un modo de alerta interesante, consiste en el envío de las trazas por medio de un socket UNIX a otro programa en la maquina local o remota que se encuentra en espera de conexiones.
-A none: No genera ningún tipo de alerta.
-A console: Se trata del mismo modo de “alerta rápida” indicado anteriormente, pero todas las trazas son enviadas directamente a la consola.
-A cmg: Genera alertas con el estilo CMG.
Para desactivar el logging de paquetes generado utilizando la opción -N, mientras que por otro lado también es posible enviar las alertas generadas al syslog del sistema con la opción -s
>snort -d -c /etc/snort/snort.conf -i eth0 -l /home/adastra/logs -h 192.168.1.0/24 -s -N -A fast Running in IDS mode –== Initializing Snort ==– Initializing Output Plugins! Initializing Preprocessors! Initializing Plug-ins! Parsing Rules file «/etc/snort/snort.conf» PortVar ‘HTTP_PORTS’ defined : [ 80 311 591 593 901 1220 1414 1830 2301 2381 2809 3128 3702 5250 7001 7777 7779 8000 8008 8028 8080 8088 8118 8123 8180 8243 8280 8888 9090:9091 9443 9999 11371 ] PortVar ‘SHELLCODE_PORTS’ defined : [ 0:79 81:65535 ] PortVar ‘ORACLE_PORTS’ defined : [ 1024:65535 ] PortVar ‘SSH_PORTS’ defined : [ 22 ] |
Mensajes de Alerta
Los mensajes de alerta generados por Snort, contienen información muy valiosa para saber que tipos de paquetes viajan por la red y/o para detectar ataques diferentes tipos, sin embargo, como resulta obvio es necesario entenderlos primero. Los mensajes generados por Snort, tienen una estructura definida por ejemplo:
>snort -A console -b -c /etc/snort/snort.conf ……………………………… 06/16-21:24:44.671588 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 192.168.1.33 -> 192.168.1.34 06/16-21:24:44.671635 [**] [1:10000001:0] ICMP test [**] [Priority: 0] {ICMP} 192.168.1.34 -> 192.168.1.33 |
Los mensajes de alerta anteriores contienen los siguientes campos:
1. TimeStamp de la alerta
2. Identificador Único de la alerta que consiste en [Id Generador, Id Snort, Id Revision]:
El Identificador de Generador indica el componente que ha generado el mensaje, para conocer estos identificadores se puede ver el fichero contenido en el directorio de documentación de Snort ubicado normalmente en /usr/src/snort-XXX/doc/generators
El Identificador Snort: Es un identificador de Firma (Signature ID) de igual que en el caso anterior se ubica normalmente en /usr/src/snort-XXX/etc/gen-msg.map
El Identificador de Revisión es un numero secuencial que se incrementa en uno tras cada alerta generada.
Por otro lado, también existe un mecanismo de orden de alertas, por defecto Snort tiene los siguientes tipos de alerta en orden estricto
1. Alertas sobre Reglas de los paquetes que puede pasar por la red.
2. Alertas sobre Reglas de los paquetes que debe ser restringido o borrados
3. Alertas sobre las reglas definidas por el usuario en fichero de configuración
4. Alertas sobre Logs.
Aunque el orden anterior es el valor por defecto de las reglas de Snort, este orden puede ser cambiado por medio de opciones por linea de comandos, estas son:
––alert-before-pass: Esta opción obliga a que una regla de alerta (definida por el usuario en fichero de configuración) se comporte a favor de las reglas de paquetes que pueden pasar por la red.
>snort -A console -b -c /etc/snort/snort.conf ––alert-before-pass |
––treat-drops-as-alert: Como su nombre lo indica, todos los paquetes que son borrados o rechazados por Snort son tratados como Alertas que se registraran en el sistema de logs definido.
>snort -A console -b -c /etc/snort/snort.conf ––treat-drop-as-alert |
––process-all-events: Por defecto en Snort no se procesan todos los eventos asociados con un paquete, con esta acción se activan todos lo eventos sobre un paquete en función a las acciones tomadas en las reglas.
>snort -A console -b -c /etc/snort/snort.conf ––process-all-events |