2. PORTADA • Ayudantes de Snort
tar Snort por medio de las Emerging Threats. Ambas se sólo hay que copiar el directorio en
/usr/local/bin/snort-c/etc/snort/snort. conf. encuentran disponibles tanto de forma /etc/snort/preproc_rules.
Antes de comenzar a utilizar Snort por gratuita como de pago. Las reglas VRT Por último, las reglas binarias para
primera vez, debemos copiar el conte- gratuitas se diferencian de las comer- Snort se encuentran disponibles en
nido del directorio etc que se encuentra ciales porque se publican 30 días des- so_rules. Necesitamos copiar el subdi-
en el directorio del código fuente a pués que las comerciales, pero permi- rectorio de la distribución (por ejemplo,
/etc/snort/ y crear un directorio ten acceder al conjunto completo de so_rules/precompiled/Ubuntu-10-4/x86-6
/var/log/snort. El cuadro titulado reglas. La edición comercial de las 4/2.9.0.3/*) en /usr/local/lib/ snort_
“snort.conf” contiene la ayuda necesaria reglas Emerging Threats incluye reglas dynamicrules y los ficheros *.rules en el
para modificar el fichero de adicionales que no se suministran en la directorio /etc/snort/so_rules/.
configuración snort.conf. versión gratuita. Sourcefire Vulnerability Research
Los siguientes ejemplos utilizan las Team ofrece algunas reglas sólo en for-
Firmas reglas VRT, que se pueden descargar mato binario. Existen dos razones para
Evidentemente, Snort necesita ahora las como parte de una suscripción comer- el uso del formato binario: por un
firmas que le proporcionarán el conoci- cial o bien obtenerlas gratuitamente con lado, el lenguaje de reglas de Snort es
miento para detectar las intrusiones. un retraso de 30 días (tras registrarse). un lenguaje muy potente pero no es
Existen básicamente tres fuentes de fir- Una vez que nos hayamos subscrito o capaz de identificar paquetes sospe-
mas: registrado, Sourcefire nos proporcionará chosos en algunos ataques. Las libre-
• Las reglas VRT de Sourcefire Vulnera- un “Oink Code” que habrá que incluir rías binarias mejoran considerable-
bility Research Team en la petición de descarga: mente la tasa de detección. La
• Las reglas Emerging Threats segunda razón es que un tercero
• Las reglas GPL wget http://www.snort.org/reg-rU podría haber descubierto una vulnera-
Estas reglas han de mantenerse actuali- ules/snort rules-snapshot-2903.U bilidad en Sourcefire bajo un acuerdo
zadas siempre – en este artículo utili- tar.gz/<oinkcode> -O snortrulesU de confidencialidad (NDA). Si el
zaremos más adelante Pulled Pork para -snapshot-2903.tar.gz equipo de VRT distribuyese la firma en
las actualizaciones. Si tenemos la texto claro, estarían publicando deta-
intención de utilizar Snort en un El conjunto de reglas VRT incluye cuatro lles sin la autorización necesaria.
entorno en producción, es probable directorios: etc contiene los ficheros de
que deseemos utilizar las reglas VRT o configuración que necesitan los conjun- Actualizando con Pulled
tos de reglas Snort Pork
Listado 1: Una Tabla de Atributos de un y Barnyard, que La mayoría de los usuarios utilizan
Host deberemos copiar Oinkmaster para actualizar los conjun-
en el directorio tos de reglas. Como los trabajos de
01 <SNORT_ATTRIBUTES>
/etc/snort. rules, desarrollo de esta herramienta se
02 <ATTRIBUTE_TABLE>
que contiene las encuentran dormidos, Pulled Pork admi-
03 <HOST>
reglas basadas en nistra las tareas en diversos entornos.
04 <IP>10.1.2.3</IP>
texto para Snort, Pulled Pork también procesa las reglas
05 <OPERATING_SYSTEM>
ha de copiarse en binarias y organiza los elementos en los
06 <NAME>
/etc/snort/rules. directorios adecuados. Para la instala-
07 <ATTRIBUTE_VALUE>Windows</ATTRIBUTE_VALUE>
preproc_rules nos ción sólo es necesario descargarse el
08 </NAME>
da las reglas del paquete desde Google Code. La versión
09 <FRAG_POLICY>Windows</FRAG_POLICY>
preprocesador – actual de Pulled pork (0.5.0) requiere
10 <STREAM_POLICY>Win XP</STREAM_POLICY>
11 </OPERATING_SYSTEM>
12 <SERVICES>
Insta-Snorby
13 <SERVICE> Insta-Snorby está basado en la librería TurnKey Linux Virtual
14 <PORT> Appliance [9], que proporciona máquinas virtuales para diver-
15 <ATTRIBUTE_VALUE>80</ATTRIBUTE_VALUE> sos propósitos. Basada en Ubuntu Linux, permite a los adminis-
16 </PORT> tradores probar varias aplicaciones sin tener que instalar nada.
17 <IPPROTO> Insta-Snorby es una imagen ISO; la versión 0.6.0 soporta una
18 <ATTRIBUTE_VALUE>tcp</ATTRIBUTE_VALUE> instalación sin complicaciones en un dispositivo. Contiene:
19 </IPPROTO> • Snort 2.9.0.3
20 <PROTOCOL> • Barnyard 2.19
21 <ATTRIBUTE_VALUE>http</ATTRIBUTE_VALUE> • Snorby 2.2.1
22 </PROTOCOL> • Open FPC
23 </SERVICE> • Pulled Pork
24 </SERVICES> Para instalarla como un dispositivo virtual, necesitaremos pro-
25 </HOST> porcionarle a Insta-Snorby al menos 512 MB de RAM para evi-
26 </ATTRIBUTE_TABLE> tar el uso de una memoria de intercambio.
28 Número 72 WWW.LINUX- MAGAZINE.ES
3. Ayudantes de Snort • PORTADA
config utc
config daemon
config logdir: /tmp
config waldo_file: /var/logU
/snort/waldo
#output alert_fast: stdout
output database: log, mysql, U
user=snort password=snortpw U
dbname=snortdb host=localhost
Antes de ejecutar Barnyard2, debemos
crear la base de datos:
# cat << EOF | mysql -u root -p
create database snortdb;
grant all on snortdb.* to U
snort@localhost identified U
by “snortpw”;
EOF
Figura 1: El panel de control de Snorby ordena los mensajes según su gravedad. # mysql -u snort -password=U
snortpw snortdb < schemas/U
Perl y los módulos Archive::Tar, Barnyard create_mysql
Crypt::SSLeay y LWP::Simple de Perl, Una vez que se haya instalado Snort con
que se pueden instalar en la mayoría de las especificaciones, registrará los men- La siguiente línea en el script de
las distribuciones por medio del gestor sajes en un fichero binario en formato comienzo automatiza el proceso de
de paquetes. Para instalar Pulled Pork, Unified2, que no podremos leer directa- arranque:
copiamos el directorio etc en mente, de modo que será necesario utili-
/etc/pulledpork y el script de Perl zar otra herramienta para almacenar los barnyard2 -d /var/log/snort/U
pulledpork.pl en /usr/local/bin. El datos en una base de datos. La herra- -f merged.log -c /usr/local/U
fichero de configuración pulledpork. mienta perfecta es Barnyard2, que etc/barnyard2.conf -n
conf también es autoexplicativo. Las adopta el papel del proceso que escribe
únicas tareas importantes son la modi- los datos en la base de datos, redu- La -n le indica a Barnyard2 que sólo pro-
ficación de la regla de la URL con el ciendo por tanto la carga del servidor. El cese los mensajes nuevos que se añadan
Oink Code, las rutas para instalar las archivo con el código fuente de Barn- al fichero de registro de Snort. Para
reglas y las reglas compartidas de obje- yard se encuentra disponible en [12]; su poder ignorar los mensajes antiguos
tos, dependiendo de la distribución que instalación desde el código fuente no cuando se reinicie, insertará un marca-
tengamos. Pulled Pork puede modificar supone ningún problema. dor en un fichero Waldo [13].
las reglas durante la instalación. Para Barnyard necesita escribir ficheros en
hacerlo, referencia cuatro ficheros de el directorio /var/log/snort y escribir el Snorby
configuración adicionales, que pode- contenido del fichero en la base de Snorby, que hace de interfaz de Snort,
mos activar: datos. Snort almacena los ficheros en sólo se encuentra oficialmente disponi-
• dropsid.conf: Pulled Pork cambia este directorio con el patrón ble por medio de su propio repositorio
todas las reglas de este fichero para merged.log.XXXXXXXX, donde Git [14], pero a veces nos podemos tro-
decirle a Snort que descarte los paque- XXXXXXX es la marca de tiempo que pezar con varios archivos comprimidos.
tes. Barnyard referencia para ayudar a igno- Antes de poder instalar Snorby, necesi-
• enablesid.conf y disablesid.conf: rar los ficheros antiguos. Si no se tamos resolver algunas dependencias:
PulledPork activa y desactiva las encuentra la marca de tiempo, habrá Ruby (>=1.8.7), Rubygems y las
reglas de estos ficheros. que eliminar la opción nostamp del siguientes Rubygems: tzinfo, builder,
• modifysid.conf: Pulled Pork modifica fichero de configuración para la salida memcache-client, rack, rack-test, erubis
las reglas en los ficheros especifica- del plugin Unified. Como el fichero de mail, text-format, bundler, thor, i18n,
dos. registro de Unified sólo contiene infor- sqlite3-ruby y rack-mount rails=3.0.0.
El programa se ejecuta tecleando pulled- mación binaria, Barnyard tiene que Los requisitos de Ruby en particular
pork.pl -c /etc/pulledpork/pulledpork. acceder a otros ficheros de implican que tenemos una distribución
conf. Antes de descargar las reglas, configuración de Snort para poder inter- reciente o que estamos preparados para
Pulled Pork utiliza las sumas de compro- pretar el contenido del fichero, así que instalar todos estos paquetes desde el
bación para ver si las reglas en el servi- introducimos las rutas de estos ficheros código fuente. Ubuntu a partir de Kar-
dor son nuevas. El resto lo realiza un en el fichero de configuración mic y Fedora 14 incluyen la versión
trabajo programado de forma diaria en /usr/local/etc/barnyard2.conf y modifi- 1.8.7 de Ruby; ninguna de estas versio-
cron. camos el resto de los parámetros: nes incluyen la versión 3 de Rails.
WWW.LINUX- MAGAZINE.ES Número 72 29
4. PORTADA • Ayudantes de Snort
Tras descomprimirlo, en el directorio
de Snorby tecleamos bundle install; este
paso instala un par de paquetes adicio-
nales. rake snorby:setup finalmente ins-
tala Snorby. Hay un par de ficheros de
configuración autoexplicativos –
snorby/config/snorby_config.yml y
snorby/config/initializers/mail_config.rb
– que necesitamos modificar, pero luego
podemos ejecutar Snorby tecleando
rails -c para que aparezca la ventana de
inicio de sesión.
Tras iniciar la sesión, veremos el panel
de control de Snorby, una GUI de última
generación con los mensajes entrantes
(Figura 1) que permite ver cada evento
en detalle (Figura 2).
Análisis Forense
Snort sólo detecta los ataques potencia-
les en la red y registra cualquier paquete
sospechoso que haga saltar las alarmas.
A menudo esto sucede demasiado tarde, Figura 2: En la interfaz web de Snorby, los administradores pueden clasificar los resultados,
ya que Snort no puede viajar hacia atrás añadir comentarios y gestionar los sensores y los usuarios.
en el tiempo y registrar los paquetes
enviados previamente. Sólo se pueden basadas en Debian como Ubuntu, la ins- lación openfpc-install.sh install y res-
modificar las firmas para que registren talación es más fácil, ya que podemos pondemos a las preguntas (por ejemplo,
la subsecuencia de paquetes desde la hacer lo siguiente: el nombre de usuario y la contraseña).
misma conexión. Esta complicación El fichero /etc/openfpc/ openfpc- default.
hace que sea prácticamente imposible aptitude install apache2 U conf se usa para otras configuraciones.
analizar un ataque con éxito a nivel de daemonlogger tcpdump U Luego arrancamos el servidor y compro-
red. tshark libarchive-zip-perl U bamos la disponibilidad de los clientes:
El reciente proyecto OpenFPC (cap- libfilesys-df-perl libapache2U
tura completa de paquetes) tiene como -mod-php5 mysql-server php5U openfpc --action start
objetivo resolver este problema. -mysql libdatetime-perl U openfpc-client --action status
OpenFPC es la rama hija de la plantilla libdbi-perl libdate-simple-perlU
de Sourcefire, como Pulled Pork; el php5-mysql libterm-readkey-perlU Para que el programa se ejecute en el
número de versión es bastante bajo libdate-simple-perl momento de arranque del ordenador,
(0.4), y necesitamos instalar primero encontraremos los scripts de arranque
unos cuantos paquetes para cubrir las Tras descomprimir el código fuente de en /etc/init.d. Para integrarlo con
dependencias. En las distribuciones OpenFPC, ejecutamos el script de insta- Snorby, necesitamos hacer un pequeño
Tabla 1: Opciones de Configuración
Opción Función
--enable-ipv6 Activa el soporte IPv6. Incluso si no se desea realmente usar IPv6, se debería activar esta función. Esta es la
única opción para que Snort soporte el parámetro ipvar utilizado en los ficheros de configuración 2.9.
--enable-static-daq Integra una librería DAQ estática. Esto facilita la distribución del binario.
--enable-zlib Muchos servidores comprimen las páginas cuando las sirven. Con este parámetro, Snort podrá analizar tam
bién las páginas web. Sin embargo, implica la incorporación de la librería Zlib al sistema.
--enable-targetbased Activa la configuración del preprocesador específica de un host, tal como se describe en el artículo.
--enable-decoder-preprocessor-rules Permite activar y desactivar las pruebas individuales del preprocesador.
--enable-reload Soporta una recarga simple en el caso de que cambie la configuración de Snort. El reiniciado siempre
implica la pérdida de algunos paquetes.
--enable-reload-error-restart Si falla la recarga, Snort se reinicia.
--enable-normalizer Activa el código normalizador en el modo en línea. Un binario de Snort puede funcionar en el modo en línea
IPS o en modo pasivo IDS si se utiliza la librería DAQ.
--enable-inline-init-failopen Permite a Snort pasar los paquetes sin comprobarlos durante la inicialización del modo en línea.
30 Número 72 WWW.LINUX- MAGAZINE.ES
5. Ayudantes de Snort • PORTADA
cambio mediante la GUI web. En la Snort también ofrece algunos métodos ques de forma correcta, necesita des-
interfaz administrativa, activamos el avanzados, tales como la reconstrucción fragmentar y reensamblar los paquetes
plugin OpenFPC e introducimos en del tráfico basada en el destino. Los de la misma forma que lo haría el sis-
OpenFPC el path:https://Open-FPC- Ser- investigadores Vern Paxson y Umesh tema objetivo.
ver_ name/ openfpc/cgi-bin/ extract.cgi. Shankar descubrieron en 2003 que dife- Snort posee un par de trucos propios
Luego podemos descargar el fichero rentes sistemas operativos manejan la en respuesta a estos métodos de ataque
Pcap de la conexión entera directa- desfragmentación IP y reensamblan TCP avanzado: soporta los modos de des-
mente desde la alerta en Snorby (Figura de diferentes maneras. Esto le propor- fragmentación de first, last, bsd,
3) y enviarlo a Wireshark para su análi- ciona a un atacante la posibilidad de bsd-right, linux, windows y solaris, con
sis. camuflar un ataque de modo que com- bsd por defecto. Para métodos de reen-
prometa el objetivo pero que no sea samblado más complejos, véase la
La Seguridad Tiene detectado por el IDS. Tabla 2.
Prioridad Para permitir que esto suceda, el ata- Si sólo utiliza uno o dos sistemas ope-
Por razones de seguridad, no debería- cante debería fragmentar el exploit, ade- rativos, la configuración es bastante
mos nunca ejecutar Snort con los privi- más crea el fragmento con la carga ata- simple: sólo hay que editar la sección
legios del root; tiene mucho más sentido cante dos veces. Un fragmento contiene del preprocesador de snort.conf:
crear una cuenta dedicada para Snort y la carga y el otro contiene datos no peli-
añadir el nombre de la cuenta y el grupo grosos. Si se envían los dos en sucesión, preprocessor frag3_engine: U
al fichero de configuración de Snort. el éxito o el fracaso del ataque y la habi- policy linux bind_to [10.1.1.U
Además, podemos encerrar Snort en una lidad del IDS para detectarlo dependerán 12/32,10.1.1.13/32] U
jaula Chroot; el fichero snort.conf que- de cómo responda el sistema objetivo. detect_anomalies
daría de la siguiente forma: ¿Preferirá el primer o el segundo frag- preprocessor frag3_engine: U
mento para la desfragmentación? Esta- policy windows bind_to U
config set_uid: snort bleciendo los parámetros con cuidado, 10.2.1.0/24 detect_anomalies
config set_gid: snort el atacante podría ejecutar el exploit sin
config chroot: /chroot/snort que el IDS lo detecte. Esta configuración está bien para las
Existen diferencias similares con los redes Windows con dos ordenadores
Evidentemente, necesitamos modificar segmentos TCP y el solapamiento de Linux. De forma similar, habría que
algunos permisos y estructuras de direc- los fragmentos y los segmentos. Para modificar el preprocesador Stream5.
torios para evitar que Snort tenga pro- asegurarse de que Snort siempre Para más detalles, léase el fichero
blemas. detecte estos ata-
DAQ
snort.conf Uno de los mayores problemas a la hora de ejecutar Snort en
La mayoría de los parámetros de configuración que se encuen- una red rápida es su propio rendimiento. Si Snort tardara dema-
tran en el fichero snort.conf pueden quedarse tal cual, pero siado en analizar los paquetes y fallase a la hora de obtener los
habrá que hacer unos cuantos cambios. La configuración DAQ paquetes a la velocidad necesaria de la librería Libpcap [10], la
utiliza la interfaz de paquetes AF y proporciona un búffer de 256 librería descartaría el paquete. Es más, los administradores han
MB para utilizarlo de caché para cualquier paquete que aún no usado dos soluciones diferentes para solucionar este problema:
haya procesado. La variable HOME_NET define la red a prote- Phil Wood añadió un búffer de memoria en anillo a Libcap; el
ger. Las variables RULE_PATH, SO_RULE_PATH y tamaño del búffer se especificaba cuando se cargaba la librería.
PREPROC_RULE_PATH hacen referencia a los directorios A partir de la versión 1.0 de Libpcap, el búffer en anillo viene
correctos. El plugin de salida unified2 crea los ficheros de regis- implementado en la librería. Otra solución es la librería PF_ring
tro: [11], que reemplaza a la librería libpcap.
config daemon La versión 2.9 de Snort presenta DAQ (librería para la adquisi-
config interface: eth0 ción de datos) como una alternativa nueva y mucho más sim-
config daq: afpacket ple, que accede directamente a la tarjeta de interfaz de red sin
config daq_mode: passive hacer uso de Libpcap. DAQ es fácil de instalar, sin embargo, la
config daq_var: buffer_size_mb=256 mayoría de las distribuciones no cuentan con los paquetes pre-
ipvar HOME_NET 192.168.0.0/24 compilados con los parámetros correctos. De hecho, la página
var RULE_PATH /etc/snort/rules web de Snort sólo ofrece paquetes RPM. Tras descargar la
var SO_RULE_PATH /etc/snort/so_rules última versión 0.5 del código fuente, sólo hay que seguir los
var PREPROC_RULE_PATH /etc/snort/preproc_rules pasos típicos: ./configure,make,sudo make install. No hay
output unified2: filename merged.log, limit 128, muchas dependencias que resolver. Para asegurarse de que se
vlan_event_types pueden compilar los fuentes, probablemente haya que instalar
Para utilizar reglas de preprocesamiento y reglas de objetos el compilador de C, Flex, Bison y libpcap >= 1.0. Si no va a usar
compartidos, deberemos quitar los signos de comentario que Libpcap, sino que accede a la NIC directamente por medio de la
se encuentran al comienzo de las directivas incluidas en las librería DAQ, puede desactivar Libpcap
correspondientes secciones. usando --disable-pcap-module.
WWW.LINUX- MAGAZINE.ES Número 72 31
6. PORTADA • Ayudantes de Snort
cesador para indicar la cantidad de RAM
disponible.
Conseguir que Snort maneje redes de
10 Gbps es todo un reto – pero no impo-
sible – con una buena experiencia, el
hardware adecuado y un ajuste óptimo.
La respuesta que Steven Sturges de
Sourcefire da cuando se le pregunta
acerca de cuál es el mayor desafío, es
concisa: “Velocidad”. Y continúa expli-
cando que no es difícil analizar 500
Mbps en tiempo real; el reto está en
intentar hacer lo mismo con ¡10 Gbps! I
RECURSOS
[1] Snort: http://www.snort.org
[2] Sourcefire: http://www.sourcefire.
com
[3] Oinkmaster: http://oinkmaster.
sourceforge.net
[4] BASE: http://base.secureideas.net
[5] Snorby: http://www.snorby.org
Figura 3: Si usamos el fichero PCAP, podremos definir con precisión qué paquetes queremos
[6] OpenFPC: http://www.openfpc.org/
que extraiga OpenFPC.
[7] Pulled Pork: http://code.google.com/
p/pulledpork/
README.stream5 que se encuentra en mente desde un análisis de Nmap pode-
[8] Insta-Snorby del 19.01.2011 http://
el directorio del código fuente de mos utilizar Hogger [15].
www.snorby.org/Insta-Snorby-0.6.0.
Snort.
iso
Si tenemos muchos sistemas operati- ¡Corre, Cerdito, Corre!
[9] Librería TurnKey Linux Virtual
vos en la LAN, esta clase de administra- Con una combinación inteligente de los
Appliance: http://www.turnkeylinux.
ción es demasiado compleja. En tal componentes adecuados, podemos crear
org
caso, necesitamos una tabla de atributos un sistema de detección de intrusiones
[10] Librería libpcap: http://www.
de los hosts para definir la información en la red con Snort. Obviamente, necesi-
tcpdump.org
en un fichero XML (Listado 1). La tabla tamos utilizar un buen hardware en una
[11] LibreríaPF_ring: http://www.ntop.
se define en snort.conf como red rápida. Dispositivos como el que
org/PF_RING.html
attribute_table filename /path/to/file. La comercializa Sourcefire pueden monito-
[12] Barnyard2 http://www.securixlive.
tabla de atributos de hosts contiene rizar las redes a velocidades de hasta 10
com/barnyard2/index.php
información de cada ordenador indivi- Gbps ejecutanto Snort 2.9 en un hard-
[13] Fichero Waldo: http://en.wikipedia.
dual. Para crear el fichero XML directa- ware altamente especializado.
org/wiki/Waldo_file
Comparado con
[14] Repositorio Snorby Git: https://
Tabla 2: Reensamblado Basado en el esto, el hardware
github.com/Snorby/snorby/tarball/
Objetivo normal habitual-
master
mente alcanza su
Método Efecto [15] Hogger: http://code.google.com/p/
límite a 1 Gbps. Se
first Prefiere el primer segmento de solapamiento hogger/
recomiendan tarje-
last Prefiere el último segmento de solapamiento [16] Napatech: http://www.napatech.
tas interfaces de
bsd Free BSD 4.x, Net BSD 2.x, Open BSD 3.x, AIX com/applications/network_security/
red premium –
intrusion_detection.html
linux Linux 2.4 y 2.6 como las fabrica-
old-linux Linux 2.2 y anteriores das por Napatech
[16], por ejemplo Ralf Spenneberg es profesor free-
windows Windows 98, NT, 2000, XP
– una generosa lance de Unix/Linux, consultor, y
win2003 Windows 2003 Server
EL AUTOR
cantidad de RAM y autor y CEO de Ralf Spenneberg
vista Windows Vista una CPU rápida. Open Source Training. Ralf ha
solaris Solaris 9.x Además, los admi- publicado varios libros sobre
nistradores que detección de intrusiones, SELinux,
hpux10 HPUX 10
buscan rendi- cortafuegos y redes privadas vir-
hpux HPUX 11
miento necesitarán tuales. La segunda edición de su
irix IRIX 6 último libro VPN on Linux se pub-
modificar los pará-
macos MacOS >= 10.3 licó hace unos meses.
metros del prepro-
32 Número 72 WWW.LINUX- MAGAZINE.ES