Técnicas de prevención de intrusiones (IDS/IPS)

Como ya sabemos , cualquiera de nosotros puede ser el objetivo de un ataque cibernético. Algunos CEO’s estiman que nadie se interesaría por su empresa porque es poco conocida o muy pequeña . Eso es totalmente falso .

El sistema de información de una empresa debe estar protegido a todos los niveles , no simplemente instalando un antivirus.

Como lo indica el título , hoy haré una introducción a las técnicas de prevención de intrusiones a nivel sistema y red .

IDS Y IPS

¿ Qué es un IDS ?

ids

Hablamos de sistema de detección de intrusiones (Intrution Detection System , en inglés) para referirnos al mecanismo que permite detectar un ataque o actividad sospechosa .

Existen 2 tipos de IDS .

Los NIDS (Network-Based Intrution Detection System) , que supervisan la actividad de la red .

Los HIDS (Host-Based Intrution Detection System) , que supervisan la activad del sistema .

NIDS

Funcionan de la siguiente manera .

En primer lugar , el tráfico de la red es capturado gracias a PCAP (packet capture) .

A continuación , los paquetes capturados se filtran para refinar las búsquedas . Posteriormente , se efectúa un análisis de las firmas , con los mismos inconvenientes que tienen los antitivirus , es decir con la misma dificultad que tienen los Avs a la hora de detectar los 0days .

Finalmente , las alertas son gestionadas y alamacenadas en ficheros logs normalizados .

HIDS

Los HIDS supervisan la actividad de los usuarios , los procesos , los comandos utilizados , las fechas de conexión de los usuarios y mucho más .

También existen IDS híbridos , que desempeñan el papel de HIDS y NIDS .

Un IDS híbrido es muy práctico para analizar lo que llamamos “correlación” , es decir el enlace que existe entre varios eventos . Por ejemplo , si se genera un error http 404 , no sería sospechoso . Pero si al mismo tiempo otras peticiones generan errores , es probable que nuestro sitio web este siendo atacado .

Instalación de Snort

Snort es uno de los IDS más efectivos , y además , es gratis 🙂 .

En este tutorial utilizaré la versión 2.9.8.0 y la instalaré en una máquina con Ubuntu 15.10 . Pero no os preocupéis , porque funciona igualmente en versiones anteriores .

Lo primero que hay que hacer es instalar los requisitos :

sudo apt-get install -y build-essential libpcap-dev libpcre3-dev libdumbnet-dev bison flex zlib1g-dev

Vamos a crear una carpeta en la cual descargaremos snort .

mkdir ~/snort
cd ~/snort

Antes de instalar snort , tenemos que instalar DAQ (Data AcQuisition library)

wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
tar -xvzf daq-2.0.6.tar.gz
cd daq-2.0.6
./configure
make
sudo make install

NB : Hay que descargar la última versión , en mi caso es la 2.0.6

Ahora podemos instalar snort .

wget https://www.snort.org/downloads/snort/snort-2.9.7.6.tar.gz
tar -xvzf snort-2.9.8.0.tar.gz
cd snort-2.9.8.0
./configure --enable-sourcefire
make
sudo make install

NB : Hay que descargar la última versión , en mi caso es la 2.9.8.0

Un vez que hemos instalado snort , toca actualizar las bibliotecas compartidas y los enlaces simbólicos .

sudo ldconfig
sudo ln -s /usr/local/bin/snort /usr/sbin/snort

Para utilizar snort en modo IDS , vamos a crear una cuenta especial , copiar los archivos de configuración y darles los permisos necesarios .

sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/preproc_rules
sudo touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/rules/local.rules
sudo mkdir /var/log/snort
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
sudo cp ~/snort/snort-2.9.8.0/etc/*.conf* /etc/snort
sudo cp ~/snort/snort-2.9.8.0/etc/*.map /etc/snort

Antes de ejecutar snort , vamos a editar el archivo de configuración .

sudo gedit /etc/snort/snort.conf
ipvar HOME_NET 192.168.1.101/24 #Vuestra ip local
ipvar EXTERNAL_NET $HOME_NET
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules

Las reglas serán descargadas de forma automática gracias a Pulledpork , por lo tanto podemos comentarlas .

sudo sed -i 's/include $RULE_PATH/#include $RULE_PATH/' /etc/snort/snort.conf

Para poder añadir una regla y probarla , vamos descomentar :

include $RULE_PATH/local.rules

Ahora hagamos una prueba de configuración .

sudo snort -T -c /etc/snort/snort.conf

Si hasta ahora lo estáis haciendo bien , tendréis este mensaje .

Snort successfully validated the configuration!
Snort exiting

Vamos a añadir una regla muy simple en el archivo : /etc/snort/rules/local.rules .

alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:001;)

Ejecutemos snort :

sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i wlan0

NB: Si usais ubuntu 15.10 , es posible que vuestra interface red no sea ni eth0 , ni wlan0 .

Y hagamos un ping hacia una máquina exterior para observar la alerta . Por ejemplo : ping example.com

10/31-02:27:19.663643  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:19.663675  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:20.658378  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:20.658404  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:21.766521  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:21.766551  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:22.766167  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101
10/31-02:27:22.766197  [**] [1:10000001:1] ICMP test [**] [Priority: 0] {ICMP} 93.184.216.34 -> 192.168.1.101

A partir de aquí , solo nos queda crear nuestras propias reglas o descargarlas directamente aquí .

¿ Qué es un IPS ?

ips1

Los IPS funcionan de forma similar a los IDS , pero toman medidas contra las actividades o programas maliciosos que detectan .

Ya no hablamos de NIDS y HIDS , sino de NIPS y HIPS .

Un NIPS puede abandonar o anular una conexión TCP sospechosa , y un HIPS puede finalizar un proceso o eleminar un programa sospechoso .

También podemos utilizar snort como IPS gracias al plugin Snortsam .

fail2ban es uno de los IPS más conocidos , y permite analizar los logs del sistema en busca de motivos suficientes para tomar contramedidas .

¿Te gustó este artículo ? Deja un comentario y compártelo 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

diecisiete + 4 =

*