Archive for IDS

Instalación de Snorby

En los artículos anteriores hemos configurado Snort para que nos escribiera las alertas en un fichero Unified2 y con Barnyard2 conseguimos pasar estas alertas a nuestra Base de Datos de Mysql. Para nuestra gestión de alertas que genere nuestro Snort vamos a instalar la aplicación Web SNORBY en un sistema operativo Debian 8.

Aquí os dejamos una captura del dashboard así como del login de este framework muy interesante e intuitivo.

snrb1

Login de acceso a nuestro framework

Read more

Instalación de un IDS con Snort. Parte II

Continuando con la instalación de un IDS con Snort (Parte I), vamos a ver como actualizar las reglas de VRT o EmergingThreats para SNORT.

snort_large

Existen varios programas para dicho cometido, pero nosotros vamos a utilizar “PulledPork”.

Lo primero que tenemos que hacer es instalar los pre-requisitos necesarios para su instalación, Para ello ejecutamos:

            apt-get install libcrypt-ssleay-perl libwww-perl

A continuación procedemos a la instalación de PulledPork:

cd /usr/src

wget http://pulledpork.googlecode.com/files/pulledpork-0.7.0.tar.gz

tar -zxvf pulledpork-0.7.0.tar.gz

cd pulledpork-0.7.0

cp pulledpork.pl /usr/local/bin

cd etc/

cp *.conf /etc/snort

El siguiente paso a realizar, es la configuración de Pulledpork.

1.Editamos el fichero de configuración:

      nano –c /etc/snort/pulledpork.conf

**Nota: Necesitarás darte de alta en la página http://www.snort.org y después de activar tu cuenta deberás solicitar tu Oinkcode.

snort

2. Modificamos las siguientes líneas:

Comentamos las líneas 19, 21 y 26. Para ello ponemos a principio de la línea el carácter “#”.

A continuación de la línea 26 añadimos las siguientes líneas

rule_url=https://www.snort.org/rules/|snortrules-snapshot-2976.tar.gz|aquí hay que poner tu Oinkcode

rule_url=https://rules.emergingthreatspro.com/|emerging.rules.tar.gz|open

Y modificamos las siguientes líneas

Línea #74 – cambiar por: rule_path=/etc/snort/rules/snort.rules

Línea #81 – des-comentar y cambiar por: out_path=/etc/snort/rules/

Línea #89 – cambiar por: local_rules =/etc/snort/rules/local.rules

Línea #92 – cambiar por: sid_msg=/etc/snort/sid-msg.map

Línea #119 – cambiar por: config_path=/etc/snort/snort.conf

Línea #121 – cambiar por: sostub_path=/etc/snort/rules/so_rules.rules

Línea #133 – cambiar por: distro=Debian-Lenny

Linea #141 – cambiar por: black_list=/etc/snort/rules/black_list.rules

Línea #192 – des-comentar y cambiar por: snort_version=2.9.7.6

Línea #196 – des-comentar y cambiar por: enablesid=/etc/snort/enablesid.conf

Línea #198 – des-comentar y cambiar por: disablesid=/etc/snort/disablesid.conf

Línea #199 – des-comentar y cambiar por: modifysid=/etc/snort/modifysid.conf

A continuación ejecutamos el siguiente comando para deshabilitar todo el bloque de reglas fwsam.

echo pcre:fwsam >> /etc/snort/disablesid.conf

Si queremos guardar todas las reglas en un solo fichero, tenemos que ejecutar el siguiente comando.

      /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -T -l

Para guardar las reglas en ficheros diferentes

     /usr/local/bin/pulledpork.pl -c /etc/snort/pulledpork.conf -k -l

Una vez actualizadas nuestras reglas para Snort procedemos a la instalación y configuración de BARNYARD2.

Para ello realizamos los siguientes pasos.

1.Instalación de pre-requisitos

      apt-get install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev mysql-client libmysqlclient-dev

2.Instalación de barnyard2

cd /usr/src/

wget http://www.securixlive.com/download/barnyard2/barnyard2-1.9.tar.gz

Si no funciona podemos utilizar el siguiente enlace

wget ftp://ftp.tw.freebsd.org/pub/ports/distfiles/barnyard2-1.9.tar.gz

tar xvfz barnyard2-1.9.tar.gz

cd barnyard2-1.9

./configure –with-mysql

Si durante la instalación se produce el siguiente error es que no encuentra la librería libmysqlclient.*. Para saber en qué directorio se encuentra podemos ejecutar el siguiente comando

      find / -name libmysql*

snort

snort

Como vemos en la imagen anterior (lo he marcado en rojo) ya sabemos la ruta donde se encuentra la librería y reanudamos la instalación.

./configure –with-mysql –with-mysql-libraries=/usr/lib/i386-linux-gnu

make

make install

cp /usr/src/barnyard2-1.9/etc/barnyard2.conf /etc/snort/

 3.Configuración del fichero barnyard2.conf.

nano –c /etc/snort/barnyard2.conf

Comprobamos las siguientes líneas.

Linea 29     config reference_file:     /etc/snort/reference.config

Linea 30     config classification_file: /etc/snort/classification.config

Linea 31     config gen_file:           /etc/snort/gen-msg.map

Linea 32     config sid_file:           /etc/snort/sid-msg.map

Y añadimos al final del fichero

output database: log, mysql, user=<usuario base de datos> password=<pasword usuario> dbname=<base de datos> host=<indicamos ip del servidor sql> sensor_name=<nombre de sensor>

           Un ejemplo de configuración para añadir las alertas a la base de datos de Snorby,

output database: log, mysql, user=snorbyuser password=PASSWORD123 dbname=snorby host=192.168.1.111 sensor_name=sensor1

Para terminar comprobamos que funcione correctamente Snort y Barnyard2

/usr/local/bin/snort -q -u snort -g snort -c /etc/snort/snort.conf -i eth0 &

/usr/local/bin/barnyard2 -c /etc/snort/barnyard2.conf -d /var/log/snort -f snort.log –w /etc/snort/bylog.waldo &

Con esto finalizamos el artículo de hoy, en el siguiente veremos cómo instalar y configurar Snorby para complementar nuestro IDS.

Saludos.

Juanjo Martínez

Instalación de un IDS con Snort. Parte I

En este nuevo artículo se estrena nuestro compañero de SVT Security ServicesJuanjo Martínez. Se trata de Instalación de un IDS con Snort. Parte I.

En este “estreno” que realiza para hacking-etico.com, nos va a publicar una “saga” de Snort. Concretamente, en esta primera parte vamos a ver cómo instalar y configurar nuestro IDS Snort, en futuros artículos veremos la actualización automática de reglas con Pulledpork e instalación y configuración de Snorby y Barnyard2.

Pero, antes de nada, ¿Qué es un IDS?, según la WIKIPEDIA “es un programa de detección de accesos no autorizados a un computador o a una red.”, cuyo funcionamiento de estas herramientas se basa en el análisis del tráfico de red, el cual al entrar al analizador es comparado con firmas de ataques conocidos, o comportamientos sospechosos, cómo puede ser el escaneo de puertos, paquetes malformados, etc. El IDS no sólo analiza qué tipo de tráfico es, sino que también revisa el contenido y su comportamiento.

snort_large Read more

Creando un túnel SSH con Nessus

Muchas veces a la hora de hacer una auditoría externa y tener algún sistema de protección exterior (Firewall, IDS…), se nos habilitan diferentes mecanismos para poder acceder dentro de la red que queremos auditar sin que su seguridad exterior se vea comprometida. Es muy común habilitar un túnel SSH para acceder al interior de la red local.

notaLegal

Hoy vamos a ver cómo aprovechar ese túnel para correr Nessus como si estuviéramos ubicados dentro de la red. Como sabéis, la versión gratuita de Nessus tan sólo nos permite escaneos a direcciones IP locales, sin embargo mediante el túnel vamos a conseguir utilizar esta herramienta frente a una IP pública, como si estuviéramos dentro de la red a auditar aún estando fuera de la misma.

Vamos a utilizar para ello un túnel SSH y la herramienta Proxychains de la cual tenéis un artículo en el blog sobre cómo trabajar con ella y Tor.

http://hacking-etico.com/2013/08/27/anonimato-con-tor-y-proxychains/

En el siguiente diagrama vemos el entorno en el cual vamos a trabajar:

tunel

La idea es crear un túnel SSH y haciendo uso de Proxychains reenviaremos todas las peticiones de nuestro PC (Nodo A) a través del túnel, de tal forma que Nessus va a pensar que está corriendo el scanner en la máquina intermedia (Nodo B) que sí está en la misma red del servidor a auditar (Nodo C). Los pasos a seguir son los siguientes:

Creación del túnel SSH con el nodo B.

Para crear el túnel previamente tenemos que tener habilitado en el nodo B el servicio SSH con nuestro usuario correspondiente y una regla en el Firewall que permita las peticiones desde exterior hacia la máquina B (natearemos el puerto 22 mediante Port Fowarding a la máquina B).

Con todo preparado pondremos a la escucha un puerto en la máquina local A, de tal forma que todo lo que se envíe a ese puerto se reenviará a través del túnel que crearemos contra la máquina B. Usaremos el siguiente comando:

sudo ssh –p 22 –N –D 8081 [email protected]_B

Read more

Parando Metasploit con Snort

Hoy vamos a ver como podemos detectar cualquier tipo de ataque a una aplicación vulnerable de nuestro servidor, simplemente analizando aquellos posibles exploit que puedan ser lanzados contra este y añadiendo una regla en nuestro IDS para detectarlos y pararlos, en nuestro caso utilizaremos Snort. El escenario sería el siguiente:

escenarioPC-Metasplit

La idea es identificar una característica única del exploit a detectar con el IDS y crear una regla con Snort para detectarlo. Para ello previamente lo que hacemos es lanzar el exploit para explotar la vulnerabilidad y capturar el tráfico para analizarlo.

meterpreter

En este momento tenemos que identificar una característica única/particular de este exploit. Debemos ser capaces de obtener la máxima información de como funciona el exploit, para ello podemos analizar el código del propio exploit así como examinar su documentación.

Exploit –> http://www.exploit-db.com/exploits/28681/

Concretamente hemos usado un exploit bajo metasploit para explotar el puerto 21 de un FreeFTPd con una vulnerabilidad que lleva a cabo un PASS Command Buffer Overflow, es decir, introducir una contraseña no esperada para provocar un desbordamiento de buffer. Lanzamos el exploit varias veces y obtenemos varios ficheros .pcap que nos disponemos a analizar exhaustivamente:

wireshark1

wireshark2

Una vez que somos capaces de sacar información que identifique al exploit unívocamente nos disponemos a generar una regla en Snort. Las reglas en Snort constan de dos partes: la cabecera y las opciones. El objetivo de este artículo no es explicar el funcionamiento de Snort, ni tampoco el de como crear una regla, para ello podéis consultar su manual en http://manual.snort.org/.

Si analizamos cada uno de los paquetes que lanza el exploit veremos que se están inyectando operaciones tipo NOPs (No-Operation, instrucciones que no hacen nada, como por ejemplo sumarle 0 a un registro) para rellenar instrucciones además del Payload inyectado. Esto se suele hacer por muchos tipos de malware para reconducir la ejecución del programa, caso de caer en una posición de memoria donde haya una NOP, se ejecutarán todas las instrucciones que no hacen nada hasta llegar al trozo de código malicioso que realmente quiere ejecutar el atacante. Vemos con Wireshark las NOPs y lo que realmente inyecta el Payload.

nops

user_pass

Con toda esta información ya podemos crear un regla en nuestro IDS Snort para detectar este exploit. A continuación mostramos la regla creada según las peculiaridades encontradas en el exploit:

drop tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg:”Exploit FreeFTPd  PASS Command Buffer Overflow detectado by Hacking-Ético”;  content:”USER anonymous”; content:”PASS “; pcre:”/^PASS\s[^\n]{100}/smi”; classtype:shellcode-detect; sid:1000001; rev:1; nocase;) ;

Hemos visto que el exploit va dirigido al puerto 21, que hace uso del usuario anónimo y que introduce varios caracteres raros en la parte de la PASS, por tanto esas serán nuestras características concretas para nuestra regla.

Analicemos pues la parte de la cabecera:

drop tcp $EXTERNAL_NET any -> $HOME_NET 21

Se aplicará la regla de eliminación de paquete (drop) a todos aquellos paquetes que vengan vía tcp desde una red exterior ($EXTERNAL_NET es una variable que identifica cualquier IP externa) desde cualquier puerto de comunicación en el origen (any); y cuya petición vaya destinada a una IP interna ($HOME_NET idem IP interna) sobre el puerto 21.

 Dentro de la parte de las opciones:

(msg:”Exploit FreeFTPd  PASS Command Buffer Overflow detectado by Hacking-Ético”;  content:”USER anonymous”; content:”PASS “; pcre:”/^PASS\s[^\n]{100}/smi”; classtype:shellcode-detect; sid:1000001; rev:1; nocase;) ;

En este apartado determinaremos que características tienen los paquetes que deben ser eliminados. Dejaremos constancia del bloqueo de paquetes en el log de Snort con el mensaje que aparece en msg.

El paquete debe ser una petición de usuario anónimo y que la clave contenga alguno de los datos contenidos en la expresión regular (pcre). Dicha expresión regular debe estar escrita en perl, podéis encontrar diferentes expresiones regulares y reglas en el fichero policy.rules de Snort. El resto de las opciones determinan la clase de paquete (classtype), el identificador de la regla local (sid) y revisión (rev); y por último añadimos la palabra nocase para indicar al motor de Snort que la aplicación de la regla no sea “case-sentitive“.

La regla se añadirá al final del fichero de configuración de snort (snort.conf). Una vez añadida se comprueba su funcionamiento con los .pcap capturados del ataque para ver si es efectiva en caso de producirse nuevo ataque.

snort -A fast -c /ruta/snort.conf –pcap-dir=”/ruta/pcaps/” -l .

-A modo de la alerta, rápida en este caso (fast)

-c fichero de reglas, en este caso el snort.conf que hace referencia a todos los ficheros de reglas de que se encuentra en la carpeta de snort (/rutaSnort/rules) y además contiene al final nuestra regla. Debe ponerse todo en una sola línea.

–pcap-dir indicamos la carpeta donde están los pcap para comprobar.

-l indicamos la carpeta de salida del log (se creará un fichero llamado alert)

Una vez comprobado el funcionamiento de las reglas con los pcaps que contienen la captura del exploit, obtenemos el siguiente resultado:

alert

 Vemos como además de nuestra regla, hay otras reglas dentro de snort que detectan el uso del usuario anonymous o el overflow en la PASS. Ahora sólo tendremos que coger un exploit de un 0day y analizarlo para crear una regla de Snort y que no afecte a nuestro servidor hasta que podamos parchear la vulnerabilidad en cuestión. También se suele analizar el tráfico que genera ciertos malware y crear reglas en función de las peticiones que realicen.

Bueno ahora sólo queda que os pongáis a jugar con algunos exploits y los analicéis para poder detectarlos.

Un handshake

@eduSatoe

“Si caminas solo andarás más rápido, si caminas acompañado llegarás más lejos”