PFC Marisa Capitulo2
PFC Marisa Capitulo2
PFC Marisa Capitulo2
SNORT
1 Introduccin
El sistema que se ha elegido para el desarrollo del proyecto ha sido Snort [SNO04].
Snort (www.snort.org) es un sistema de deteccin de intrusiones basado en red (NIDS).
Su funcionamiento es similar al de un sniffer ya que monitoriza todo el trfico de la red
en bsqueda de cualquier tipo de intrusin. Implementa un motor de deteccin de
ataques y barrido de puertos que permite registrar, alertar y responder ante cualquier
anomala previamente definida como patrones.
Snort est disponible bajo licencia GPL, es gratuito y funciona bajo plataformas
Windows y GNU/Linux. Es uno de los ms usados y dispone de una gran cantidad de
filtros o patrones ya predefinidos, y actualizaciones constantes.
Fue en Diciembre de 1998, cuando Marty Roesch cre la primera versin de Snort
(Snort-0.96), que ya estaba desarrollada con libcap, lo que la dotaba de una gran
portabilidad. Esta primera versin era slo un sniffer de paquetes y no tena las
capacidades reales de un IDS/IPS. Sin embargo, a partir de aqu, se han ido sucediendo
numerosas versiones de Snort que han hecho de esta herramienta una de las ms
importantes en la seguridad software.
trfico que queremos analizar (por ejemplo, existen los preprocesadores http,
telnet)
Motor de Deteccin. Analiza los paquetes en base a las reglas definidas para
detectar los ataques.
Plugins de deteccin. Partes del software que son compilados con Snort y se
usan para modificar el motor de deteccin.
Plugins de salida. Permiten definir qu, cmo y dnde se guardan las alertas y
los correspondientes paquetes de red que las generaron. Pueden ser archivos de
texto, bases de datos, servidor syslog, etc.
Debido a que Snort usa la biblioteca libpcap para capturar paquetes por la red, puede
utilizar su transportabilidad para ser instalado en casi todas partes. La utilizacin de
libpcap hace que Snort tenga un uso realmente independiente de plataforma.
2.2 Decodificador
En cuanto los paquetes han sido capturados, Snort debe descifrar los elementos de
protocolo especficos para cada paquete. El decodificador de paquetes es en realidad
una serie de decodificadores, de forma que cada uno descifra elementos de protocolos
especficos. Funciona sobre la pila de protocoles de Red, que comienza con el nivel ms
bajo: protocolos de la capa de Enlace de Datos, descifrando cada protocolo conforme
asciende en la pila de protocolos de red. Un paquete sigue este flujo de datos
movindose a travs del decodificador de paquetes, como se puede ver en la figura 2-2.
4 Utilizacin de Sistemas de Deteccin de Intrusos como Elemento de Seguridad Perimetral
En cuanto los paquetes de datos son almacenados en una estructura de datos estn
listos para ser analizados por los preprocesadores y por el motor de deteccin.
2.3 Preprocesadores
Para comprender mejor lo que es un preprocesador en primer lugar hay que entender
la forma de comunicacin de un sistema. Como se puede ver en la figura 2-3, el
protocolo TCP/IP es un protocolo basado en capas. Cada capa del protocolo tiene una
funcionalidad determinada y para trabajar correctamente necesita una informacin
(cabecera). Por ejemplo, la capa de enlace utiliza para enviar y recibir datos las
direcciones MAC de los equipos, la capa de red utiliza las direcciones IP, etc.
Los datos que se transmiten por la red en paquetes de forma individual, pueden
llegar a su destino de forma desordenada, siendo el receptor el encargado de ordenar los
paquetes y darles sentido.
Como Snort tiene que leer todo el trfico de la red e interpretarlo tambin tiene que
llevar un control de los paquetes que se envan por la red y as poder darle forma a la
informacin. Por ejemplo, escucha todo el trfico que tiene como destino una direccin
y puertos determinados para ensamblar los datos y as poder interpretarlos.
catica y darle forma para que pueda ser interpretada la informacin. De esta forma una
vez que tenemos los datos ordenados que viajan por la red aplicaremos las reglas (rules)
para buscar un determinado ataque.
Formato de Frag3:
preprocessor frag3_global
preprocessor frag3_engine
Formato de Stream4:
preprocessor stream4: [noinspect], [asynchronous_link], [keepstats
[machine|binary]], \
[detect_scans], [log_flushed_streams], [detect_state_problems], \
[disable_evasion_alerts], [timeout <seconds>], [memcap
<bytes>], \
[max_sessions <num sessions>], [enforce_state], \
[cache_clean_sessions <num of sessions>], [ttl_limit <count>], \
[self_preservation_threshold <threshold>], \
[self_preservation_period <seconds>], \
[suspend_threshold <threshold>], [suspend_period <seconds>], \
[state_protection], [server_inspect_limit <bytes>], \
[enable_udp_sessions], [max_udp_sessions <num sessions>], \
[udp_ignore_any]
6 Utilizacin de Sistemas de Deteccin de Intrusos como Elemento de Seguridad Perimetral
Formato de Stream4_reassemble:
preprocessor stream4_reassemble: [clientonly], [serveronly], [both], [noalerts], \
[favor_old], [favor_new], [flush_on_alert], \
[flush_behavior random|default|large_window], \
[flush_base <number>], [flush_range <number>], \
[flush_seed <number>], [overlap_limit <number>], \
[ports <portlist>], [emergency_ports <portlist>] \
[zero_flushed_packets], [flush_data_diff_size <number>] \
[large_packet_performance]
Formato de Flow:
preprocessor flow: [memcap <bytes>], [rows <count>], \
[stats_interval <seconds>], [hash <1|2>]
Formato de Sfportscan:
preprocessor sfportscan: proto <protocols> \
scan_type
<portscan|portsweep|decoy_portscan|distributed_portscan|all>\
sense_level <low|medium|high> watch_ip <IP or IP/CIDR>
ignore_scanners <IP list>\
ignore_scanned <IP list> logfile <path and filename>
Formato de rpc_decode:
preprocessor rpc_decode: <ports> [ alert_fragments ] \
[no_alert_multiple_requests] [no_alert_large_fragments] \
[no_alert_incomplete]
Captulo 2. Snort 7
Formato de ftp/telnet:
preprocessor ftp_telnet: global \
inspection_type stateful \
encrypted_traffic yes \
check_encrypted
Reglas de Protocolo. Las reglas de protocolo son reglas las cuales son
dependientes del protocolo que se est analizando, por ejemplo en el protocolo
Http est la palabra reservada uricontent.
Reglas IP. Este tipo de reglas se aplican directamente sobre la capa IP, y son
comprobadas para cada datagrama IP, si el datagrama luego es Tcp, Udp o Icmp
se realizar un anlisis del datagrama con su correspondiente capa de protocolo,
este tipo de reglas analiza con contenido y sin l.
En la tabla 2-2, se puede observar una lista con las clases de reglas ms habituales
en Snort y una pequea descripcin de las mismas.
Snort permite mucha versatilidad para crear nuevas reglas. Modificando nuestras
propias reglas, minimizaremos los falsos positivos. Las reglas que abarcan muchos
casos generales suelen poseer altos ndices de falsos positivos, mientras que las
particulares no. La idea es crear nuevas reglas avanzadas, en funcin de los servicios
que se desean monitorizar.
Si se desea que Snort busque un comportamiento nico que debera ser sospechoso
en nuestra red, se puede codificar rpidamente una regla y probar el resultado. El
formato de una regla de Snort es bsicamente una sola lnea de texto que empieza con
12 Utilizacin de Sistemas de Deteccin de Intrusos como Elemento de Seguridad Perimetral
una accin (normalmente alert) seguida por diversos argumentos. Se pueden aadir
mltiples lneas simplemente aadiendo una barra inclinada (/) al final de cada lnea.
Tambin se puede llamar a otros programas utilizando una declaracin de inclusin para
obtener una regla ms compleja.
Un encabezado
Las opciones
En la Figura 2-4, se puede ver la estructura que presenta una regla y su cabecera.
Accin. Permite indicar la accin que se debe realizar sobre dicho paquete. Los
posibles valores son:
A continuacin se puede ver un ejemplo donde se aplica a una regla al trfico que va
a dos servidores web internos:
Las dos direcciones de Red pueden ser una nica IP, bloques CIDR, o una lista que
combine las dos opciones. Podemos listar mltiples direcciones individuales y redes
separndolas con una coma, sin espacios y escribiendo la declaracin entre corchetes,
por ejemplo:
Las opciones estn separadas entre s, por (;) y las claves de las opciones estn
separadas por (:). Hay cuatro tipos de opciones:
Non-Payload. Busca patrones dentro de los dems campos del paquete, que no
sean carga til (por ejemplo, la cabecera).
msg. Informa al motor de alerta que mensaje debe de mostrar. Los caracteres
especiales de las reglas como : y ; deben de colocarse dentro de la opcin msg
con el carcter \.
flow. Se usa junto con los flujos TCP, para indicar qu reglas deberan de
aplicarse slo a ciertos tipos de trfico.
content. Permite que Snort realice una bsqueda sensitiva para un contenido
especfico del payload del paquete.
Por ejemplo, se puede generar el mensaje Ping como alerta, ante la presencia de
ICMP de la siguiente forma:
Utilizar content en la medida que sea posible. La primera fase del motor de
deteccin del Snort 2.x, busca el patrn del content, cuanto ms exacto sea ms
exacta ser la comparacin.
Ejemplo:
Se pretende generar una alerta cuando se intenta conectar un usuario como
root al ftp. La alerta que se podra sugerir en un principio sera:
alert tcp any any -> any any 21 (content:"user root";)
Donde la opcin flow se utiliza para verificar que el trafico est yendo hacia el
servidor y est establecido. El content comprueba la palabra root, las reglas
content son importantes ya que descartan rpidamente opciones si no encuentra
coincidencia entre ellas. El pcre es para expresiones regulares, y en este caso
busca la expresin: user root, separada por uno o ms carcteres (espacios o
tabulaciones), e ignorando entre maysculas y minsculas.
Optimizacin de reglas
Las reglas poseen una naturaleza recursiva, si un patrn de una regla coincide y si
ninguna de las opciones posteriores falla, entonces se vuelve a buscar en el paquete otra
vez, desde el lugar donde coincidi la vez anterior. Y se repite hasta que el patrn no
sea encontrado o hasta que las opciones concuerden.
Sin embargo, por la naturaleza recursiva del Snort, si tenemos un paquete de 1000
bytes con todos ;, lo realizar 1000 veces.
Para probar valores numricos, existen dos opciones muy importantes que se
incluyeron a partir de la versin 2.x: byte test y byte jmp, las dos son tiles para
configurar reglas que chequeen bytes dentro de una cadena o payload.
Estos factores son muy importantes ya que por ejemplo, si el trfico en la red es
demasiado alto, mientras Snort est funcionando en modo NIDS, se pueden descartar
paquetes y no se conseguir una respuesta en tiempo real. As pues, para el diseo del
IDS habr que tener en cuenta estos factores.
El motor de deteccin puede aplicar las reglas en distintas partes del paquete. Estas
partes son las siguientes:
La cabecera IP. Puede aplicar las reglas a las cabeceras IP del paquete.
Payload del paquete. Esto significa que se puede crear una regla que el motor
de deteccin use para encontrar una cadena que est presente dentro del paquete.
Captulo 2. Snort 19
La estructura del antiguo motor de deteccin de Snort, se basa en una lista enlazada
tridimensional de reglas con sus cabeceras y funciones de deteccin.
Cuando una alarma se dispara, el motor registra dicha alarma y el paquete que la
gener para despus comenzar de nuevo el proceso completo con la llegada del
siguiente paquete.
Existen varios mdulos de salida que se pueden utilizar, dependiendo del formato en
el que se deseen los datos: Syslog, Database y el nuevo mdulo denominado Unified,
que es un formato binario genrico para exportar datos a otros programas.
Siendo module name bien alert syslog, database o alert unified dependiendo del
mdulo que se cargue.
Las opciones de configuracin para cada mdulo de salida son las siguientes:
Captulo 2. Snort 21
Formato Syslog:
output alert_syslog: LOG_AUTH LOG_ALERT
output alert_syslog: host= hostname:port, LOG_AUTH LOG_ALERT
Formato alert_Fast:
alert_fast: <output filename>
output alert_fast: alert.fast
Formato alert_Full:
alert_full: <output filename>
output alert_full: alert.full
Formato alert_smb:
alert_smb: <alert workstation filename>
output alert_smb: workstation.list
Alert_unixsock. Manda las alertas a travs de un socket, para que las escuche
otra aplicacin.
Formato alert_unixsock:
alert_unixsock
output alert_unixsock
Formato log_tcpdump:
log_tcpdump: <output filename>
output log_tcpdump: snort.log
22 Utilizacin de Sistemas de Deteccin de Intrusos como Elemento de Seguridad Perimetral
Formato Database
output database: log, database_type, user= user_name password= password
dbname host= database_address
Donde se debe reemplazar database type por una base de datos vlida, user
name por un nombre de usuario vlido en la base de datos y password por la
contrasea asociada al usuario.
Por timo, database address es la direccin P del servidor que contiene la base
de datos.
Formato CSV:
output alert_CSV: <filename> <format>
output alert_CSV: /var/log/alert.csv default
output alert_CSV: /var/log/alert.csv timestamp, msg
Formato Unified:
output alert_unified: filename snort.alert, limit 128
Log Null. A veces es til ser capaz de crear las reglas que provocarn alertas
sobre ciertos tipos de trfico, pero no causarn entradas en los archivos de log.
Eventlog. Registra las alertas para visualizarse a travs del visor de sucesos de
un sistema windows. Esta opcin se activar mediante -E y slo para Win32.
Captulo 2. Snort 23
3 Plugins de Snort
Hay una serie de mdulos o complementos para Snort, que contribuyen a aumentar
su funcionalidad.
Entre ellos destaca SPADE (Statical Packet Anomaly Detection Engine) [BIL]. Se
trata de un IDS basado en actividades anmalas, publicado bajo licencia GNU GPL por
lo que es de libre distribucin y es para el NIDS Snort. Se trata de un plug-in
preprocesador para el motor de deteccin de intrusos de Snort. Detecta el trfico de red
que se desva del comportamiento normal.
Otro complemento para Snort es Snort Inline de Jed Haile, [PAL]. Snort Inline es
un IPS de libre distribucin para el NIDS Snort. Snort Inline es bsicamente una versin
modificada de Snort que acepta paquetes de iptables e IPFW va libipq (linux) o desde
sockets (FreeBSD), en vez de libpcap. Por ello, usa nuevos tipos de reglas (drop, sdrop,
reject) para transmitirle a iptables/IPFW si el paquete debe ser eliminado, rechazado,
modificado, o permitido, basndose en un conjunto de reglas de Snort. Es un Sistema de
Prevencin de Intrusin (IPS) que usa el Sistema de Deteccin de Intrusin basado en
firmas para tomar decisiones sobre los paquetes que atraviesan Snort Inline.
Otro mdulo que se encarga de analizar las alertas de Snort es Snort Log Parser.
Snort Log Parser es un programa que analiza los mensajes de Snort desde el archivo de
log de alertas y los muestra de forma que sea fciles de entender. Esto permite la opcin
de ver solamente los mensajes del da actual por defecto y permite ver das especficos o
todos los das mediante lnea de comando.
Para modificar los archivos de configuracin se puede usar IDS Policy Manager
que ofrece una interfaz grfica amigable para la configuracin de Snort. Tiene la
capacidad aadida de combinar nuevos conjuntos de reglas, manejar preprocesadores,
configurar mdulos de salida y copiar reglas a sensores, facilitando as la configuracin
de Snort.
A continuacin se puede ver en la tabla 2-7, un resumen de los sistemas que integran
Snort como Sistema de Deteccin de Intrusos.
Adems de sistemas que usan Snort, tambin hay una versin de Snort para el
anlisis de redes inalmbricas. Esta herramienta se llama AirSnort y su nico propsito
es romper la encriptacin WEP (obteniendo as la contrasea de encriptacin) de todas
las redes inalmbricas que se encuentren en el radio de alcance del dispositivo
Captulo 2. Snort 27