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

¿TOR? ¡ No en mi servidor !

Sin duda las redes TOR han adquirido un protagonismo considerable en estos últimos años. Ya debemos saber que no siempre TOR, se usa para realizar actos delictivos sino también para evadir censuras en países autoritarios y dónde la democracia y libertad de expresión es un lujo escaso.

No obstante, nosotros siempre nos centramos en las posibilidades que puedan dar las redes TOR, tanto ofensivamente como defensivamente.

Hoy toca ser defensivos, y vamos a ver como poder parar de forma simple, visitas desde redes TOR a un servicio apache nuestro, publicado en Internet. Las reglas pararán cualquier intento de conexión pero utilizaremos apache como sonda de prueba.

La idea me surgió hace tiempo pero hoy he podido plasmarla en el artículo. Y es que entrando en pequeños debates de como mejorar servicios de Firewalls conocidos, con un gran profesional al que aprovecho y le mando saludos, me propuse hacer algo básico para trasladar mi idea y/o ponerla en práctica.

Empecemos pues.

La idea: No permitir accesos desde redes TOR a nuestro servidor y de paso, bloquear IPs que hayan sido reportadas o estén listadas en repositorios dedicados a recopilar esto.

¿Qué vamos a usar?

  • IPTables
  • IPSet
  • Feeds de IPs/Maliciosas y TOR
  • Script base de trick77(Github: https://github.com/trick77/ipset-blacklist)

torblocklogo Read more

De camino al Buffer Overflow (III)

Hoy Lunes, retomamos la Parte III de la saga de artículos “De camino al Buffer Overflow”. Esta vez, desbordaremos de forma interesante una variable de la pila, la cual nos permitirá alterar el flujo normal del programa. Simplemente y como de costumbre, espero que os guste y que sea de vuestro interés.

Antes que nada, se facilitan los enlaces correspondientes a las entradas previas:

De camino al Buffer Overflow – Parte I

De camino al Buffer Overflow – Parte II

Para iniciar la explicación nos respaldaremos del siguiente código:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 void func1(char *arg) {

            char name[32] = {0};

            strcpy(name, arg);

            printf(“Hi %s\n”, name);

}

 int main(int argc, char *argv[]) {

            if ( argc != 2 ) {

                        printf(“Use: %s YourName\n”, argv[0]);

                        exit(0);

            }

             func1(argv[1]);

             printf(“End of program\n”);

            return 0;

}

Fuente: sevillasecandbeer.org

Fuente: sevillasecandbeer.org

Read more

ASCII Art en logs de servidor Web

Como estamos en vísperas del día de los Reyes Magos, hoy traemos una entrada divertida y que esperamos que os guste. Eso sí, como siempre, dadle buen uso. Vamos a insertar un poco de “arte” a modo de ASCII Art en los logs de un servidor Web. Mola, ¿no?

No es nada nuevo, de hecho la idea surge a raíz de un tweet de Mercè Molist donde se mostraba un mensaje que habían dejado en unos logs de un servidor. Me pareció bastante ingenioso, así que investigando un poco (es bastante simple como veréis a continuación) decidí replicarlo pero incluyendo un ASCII Art.

¿No sabéis lo que es? Seguro que estáis hartos de verlo, algo como esto:

 __  __           __   _                ________  _          
   / / / ____ ______/ /__(_____  ____ _   / ____/ /_(__________ 
  / /_/ / __ `/ ___/ //_/ / __ \/ __ `/  / __/ / __/ / ___/ __ \
 / __  / /_/ / /__/ ,< / / / / / /_/ /  / /___/ /_/ / /__/ /_/ /
/_/ /_/\__,_/\___/_/|_/_/_/ /_/\__, /  /_____/\__/_/\___/\____/ 
                              /____/

¿Y cómo lo vamos a hacer? Muy sencillo, seguiremos los siguientes pasos, que como podréis comprobar, son muy simples:

  1. Guardar nuestro ASCII Art en un fichero.
  2. Crear un script en Python que lea línea por línea el fichero.
  3. Por cada línea leída, hace una petición HTTP al servidor Web.

Aquí lo interesante es que modificaremos las cabeceras de HTTP en función de cómo queramos hacer la petición, y es que dependerá de varios factores, por ejemplo de cómo esté configurado el formato de log en el servidor.

Algo que en los servidores Apache, por ejemplo, se podría definir con la siguiente línea en su archivo de configuración:

CustomLog ${APACHE_LOG_DIR}/access.log combined

En el caso de servidores Web de tipo Apache, el formato de logs se puede personalizar, y existen varios formatos para ello. Por ejemplo, con el formato de log “common“, un access.log de un Apache tendría este aspecto:

[05/Jan/2016:11:02:26 +0100] “GET / HTTP/1.1” 200 572

Sin embargo, por ejemplo con el formato de log “combined“, un access.log tendría el siguiente aspecto:

[05/Jan/2016:11:40:53 +0100] “GET / HTTP/1.1” 200 572 “-” “”

En este último formato (combined), los dos últimos valores que van entre comillas, justo después del 572 (tamaño de petición), son el Referer (origen de la petición) y el User-agent, respectivamente.

Si el servidor está usando este formato, con nuestro script en Python podemos “jugar” a insertar nuestro ASCII Art a través de una de estas cabeceras.

Read more

Feliz Navidad y próspero Año Nuevo

Otro año más, desde 2009 (se dice pronto) que se puso en marcha este blog, seguimos al pie del cañón para poder ofreceros contenidos sobre hacking ético. El objetivo no es otro que el que podáis aprender, los que menos duchos en la materia estáis o los que tengáis consultas/dudas sobre temas concretos, contrastando así nuestros artículos con iniciativas propias, investigaciones, proyectos, etc… A fin de cuentas, el objetivo es sencillo, aprender entre todos.

Si bien no es fácil mantener una cadencia decente de publicación de artículos, nunca cae en nuestro olvido el casi-deber de ofreceros contenidos interesantes para todos los públicos.

Dicho esto y habiendo rechazado varios impulsos pseudomelancólicos-navideños pasaremos directamente a desearos que paséis una Feliz Navidad y un próspero Año Nuevo aunque vamos a “mojarnos” un poco y desearos algo muy concreto, mucha salud para todos vosotros y todas vuestras familias y/o gente querida.

Que otro año más sigamos “encontrándonos” por aquí.

Atentamente: El equipo de Hacking-Etico.com

Certificación OSCP: Experiencia y consejos

Hoy venimos a hablar de una de las certificaciones profesionales que se ofrecen a día de hoy en el mercado.

Mucho se ha hablado sobre las certificaciones profesionales, ¿merecen la pena o son un gasto innecesario? A continuación os voy a hablar de una certificación que recientemente he obtenido y que bajo mi punto de vista SÍ que merece la pena: Offensive Security Certified Professional (OSCP), una de las certificaciones que ofrece Offensive Security.

oscp-certs

Todas las certificaciones de Offensive Security son puramente técnicas y prácticas, es decir, certificaciones para aquellas personas técnicas que realmente necesite aprender y no tener una simple entrada más en su CV.

Read more

De camino al Buffer Overflow (II)

Volvemos en Hacking-Etico.com con esta segunda entrega de “De camino al Buffer Overflow” para abrir el apetito este fin de semana. Se trabajarán en profundidad los conceptos de la primera, disponible en este enlace, con lo cual recomiendo su relectura para no obviar algún detalle que se nos pueda pasar por alto, especialmente información relacionada con los registros ESP y EBP.

Para iniciar la explicación, nos respaldaremos del siguiente código:

int add(int x, int y) {

            int sum;

            sum = x + y;

            return rum;

}

func1() { add(3, 4); }

Fuente: sevillasecandbeer.org

Fuente: sevillasecandbeer.org

Read more

De camino al Buffer Overflow (I)

El Karma siempre estará de nuestro lado si conocemos las entrañas de nuestro sistema operativo y aún más, cuando queramos averiguar lo que le está sucediendo a un programa o conocer aquello a lo que está expuesto. En esta secuencia de posts se intentará dar un conocimiento avanzado sobre el entorno de ejecución. Sin más, espero que os guste y gracias por leerlo.

Cuando se inicia la ejecución de un programa, el sistema operativo carga el código ejecutable en una zona de memoria no ocupada y reserva dos espacios más de memoria que serán utilizados durante su ejecución, en concreto, como pila de ejecución y como área de datos dinámicos (en Inglés, heap).

La pila es encargada de contener los parámetros de las funciones, sus variables locales y sus valores de retorno, mientras que el heap almacena aquellos datos que se han solicitado mediante una instrucción de reserva de memoria, como por ejemplo, utilizando malloc en C o new en C++. Pues bien, una vez el código esté copiado a la memoria, sola será necesario que el sistema operativo indique a la CPU que tiene que apuntar con el registro puntero de instrucciones (conocido como EIP, del Inglés Extended Instruction Pointer) a la primera posición de éste.

Fuente: sevillasecandbeer.org

Fuente: sevillasecandbeer.org

Read more

Enjaulando un usuario SSH

Hace unos días se me planteó una situación interesante que puede llegar hasta a ser habitual a algunos de los lectores de nuestro blog.

Debía facilitar una cuenta SSH a un número X de personas para que probaran desde su localización si podían acceder a un SSH y a su vez si podían lanzar ataques de bruteforce, como “concepto” para que pudieran experimentar como es eso de sacar contraseñas utilizando Fuerza Bruta y como mitigar este ataque.

Solo tenía una máquina en ese momento con IP pública dinámica (vamos una VM en mi casa) pero daba la casualidad que el tiempo (¿qué es eso?) que disponía era escaso como para crear una nueva máquina o limpiar la que tenía de pruebas anteriores, datos y demás información “clasificada” por lo que el riesgo de que alguno que fuera más listo de la cuenta o el simple hecho de tenerla publicada en Internet podía causar una termoimplosión nuclear.

El tiempo es oro y por ello la solución temporal más efectiva que pude plantear en ese momento fue: Enjaular un usuario SSH. Podría haber alternativas, pero el SSH en cuestión iba a estar habilitado durante 6 horas.

Sobre cómo hacer esto, es de lo que va a tratar el artículo que hoy publico tras bastante tiempo de vacaciones en las Bahamas con cerveza Hack&Beers y pescando en las aguas cristalinas (Oh shit!! It’s not real).

En primera instancia vamos a dejar muy claro determinados conceptos, haciendo especial hincapié en las fases que algunos/as las consideraréis muy sencillas de comprender pero otros quizás no.

ssh1 Read more

Web Hacking : Una línea para manejarlos a todos

¿Podría darte una línea de código acceso a un sitio Web completo? ¿Qué información obtendría un atacante si consiguiera llegar al nivel más bajo de tu página Web? es decir, a tu BBDD o SSOO. Dependiendo del objetivo de la misma podría encontrar seguramente información sobre la identidad de los usuarios, transacciones bancarias, compras online, usuarios, contraseñas y mucho más.

¿Cuánto vale tu información? Debemos de establecer unos controles de seguridad mínimos a nuestro sitio Web, llevar a cabo una serie de auditorías de seguridad que garanticen el buen funcionamiento de la misma. No sólo tener en regla la política de cookies y poco más, sino os puede ocurrir como la Web con la que me encontré hace unas semanas a la hora de preparar una charla. Antes de nada os muestro un disclaimer.


Aviso Legal y Descargo de Responsabilidad

  1. El objetivo de lo mostrado a continuación tiene fines educativos para aprender a mejorar la seguridad de nuestros sitios Web.
  2. No nos hacemos responsables del mal uso que se le pueda dar a las herramientas mostradas.
  3. Toda la auditoría Web mostrada a continuación se ha llevado a cabo con permisos de sus administradores según lo acordado en documento legal.

Vamos a llevar a cabo la auditoría de un sitio Web siguiente la metodología OWASP, concretamente seguiremos la OWASP Testing Guide V4. Los diferentes puntos que abarca dicha metodología los podéis ver detalladamente en el enlace anterior. A continuación nombramos los aspectos generales a tratar.

Read more