12 febrero 2013

Diagnosticando ataques de red

Existen muchas herramientas 'todo en uno' a modo de HIPS para detectar ataques de red, Patriot NG o Marmita -para Windows- son ejemplos de herramientas que simplifican la detección de ataques.

En el post de hoy vamos a realizar nuestro propio sistema de detección de amenazas de red codificando nuestras propias herramientas.

Para realizar los ejemplos me planteé dos opciones: Scapy (Python) o Net::RawIP + Net::Pcap (Perl)

Desde mi punto de vista (totalmente subjetivo y basado en mi apreciación personal) me da la impresión que la opción Perl es mucho mas elegante, la forma en la que está diseñada es coherente en cuanto a las funciones y parámetros y se nota que ha habido una planificación en el desarrollo. En el caso de Scapy, no puedo evitar tener la sensación de que se han ido añadiendo funcionalidades según se iban detectando necesidades y eso, a la postre, hace que emplear esa librería resulte mucho más caótico e incoherente. No puedo evitar cierta sensación de anarquía a la hora de desarrollar con Scapy

Además (y esto es genérico a casi todos los proyectos en Python) creo que a la hora de documentarlos se abusa excesivamente del uso del interprete interactivo. Coincido en que probablemente sea la forma más pedagógica de enseñar, pero me gusta mucho más como se hace en Perl: Un montón de ejemplos + un listado de funciones y parámetros.

A la hora de avanzar rápido resulta más práctico tomar un ejemplo, adaptarlo, y buscar en la lista de funciones lo que falte. Como decía, probablemente sea una forma peor de enseñar, pero es a la que más acostumbrado estoy (y probablemente cualquiera que venga de C o similar también)

Tras estas deliberaciones, ¿Cual ha sido la opción que he elegido? Scapy

¿Motivo? Windows. Creo que hoy día (año 2013) es innegociable que cualquier librería de propósito general tenga soporte para Linux y Windows, casi seguro que dentro de poco se una el requisito de MacOS.

Net::RawIP, aun siendo excelente, NO tiene soporte para Windows, así que, mi querida Net::RawIP, nos hemos querido mucho, hemos hecho cosas muy interesantes, pero nuestro amor toca a su fin, has envejecido mal y no te has sabido adaptar a los nuevos tiempos.

Detectando servidores DHCP Piratas con Scapy

Una de las formas más efectivas de realizar un ataque masivo a una red es emplear un servidor DHCP 'pirata' que envíe configuraciones ad-hoc para nuestros intereses. Chema lo explicó bastante bien en este post.

Tomando como ejemplo base el código publicado en este post, he creado un sencillo script que permite detectar cuando aparece un nuevo servidor DHCP en la red, lo que hace es ir periódicamente enviando 'discovers' y detectando cuando aparece un nuevo servidor.

Tips: Para evitar los molestos mensajes de error sobre IPV6 he añadido:

import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) 

Para eliminar los mensajes de tipo 'Sent 1 packets' basta con añadir:

conf.verb = 0



Detectando ataques de tipo ARP-SPOOF

Los ataques 'MitM' son ya todo un clásico de las maldades que se pueden hacer en una red local, basta con realizar un ataque 'ARP Spoof'.

Para detectarlo, es tan fácil como monitorizar el tráfico ARP en busca de respuestas maliciosas que busquen suplantar al router.


Este script toma como parámetros la IP del router y su MAC (fácilmente conseguibles usando el comando arp)

python arp.py 192.168.0.1 00:50:56:f9:77:cb

5 comments :

cibermike dijo...

Hola,
No tengo conocimientos avanzados en estos temas pero el problema que le veo al script para detectar ataques tipo ARP-SPOOF es que alguien que lo vaya a ejecutar lo primero que hará será falsear su dirección MAC y ponerse la misma que la del router (se puede obtener fácilmente) por lo que fallaría la condición.
Sobre este tema, tengo especial interés de cara a proteger la infraestructura de la compañía para la que trabajo por lo que lanzo la siguiente pregunta, ¿qué medidas son las más efectivas para prevenir el ARP/MAC/IP Spoofing? Buscando documentación sobre el tema he visto que hay dispositivos de red que incorporan opciones de configuración para prevenir este tipo de cosas pero no me queda claro si son realmente efectivos o si es conveniente complementarlo con otras medidas.

BorjaMerino dijo...

Hola Cibermike,

si la infraestructura en la que trabajas es crítica o requiere de cierto nivel de seguridad, invertir un poco de dinero en un switch decente puede ayudarte a prevenir y detectar multitud de ataques capa 2. Algunos switches Cisco (no trabajo para Cisco :p) disponen de DAI (Dynamic ARP Inspector), DHCP Snooping, Port Security, IP Source Guard, etc. con las que puedes detectar y mitigar los ataques comentados anteriormente y muchos más. Si el switch en cuestión también cuenta con tablas CAM virtualizadas te verás menos afectado por ataques dos-ARP. Si no delegas la seguridad en el switch tendrás que contar con dispositivos auxiliares como por ejemplo IDS para detectar este tipo de problemas, o utilizar software como Arpwatch/Patriot NG/Nast/ArpOn/etc., añadir MAC estáticas manualmente, etc. Sin embargo, estas soluciones para un entorno crítico son únicamente parches que, o bien únicamente detectan pero no previenen, o solo contemplan ataques muy concretos (obviando otros) o no te sirven en determinados escenarios. Si te decantas por Snort, échale un vistazo al preprocessor arpspoof pero como te comenté anteriormente hay multitud de ataques L2/L3 que Snort no contemplará. Si tienes opción a comprar un switch invierte tiempo en documentarte en sus caracteristicas de seguridad, puedes ahorrarte mucho tiempo a la larga.

Un saudo, Interesante entrada btw

Yago Jesus dijo...

Coincido con Borja, existe HW bastante completo para mitigar estos ataques. Respecto a lo que dices de ponerse la IP del router, en realidad eso lo más probable es que generase un DoS en la red

BorjaMerino dijo...

Efectivamente, si se pone la MAC del router haría un "port stealing" en el switch (la mac asociada al gateway dentro de la CAM estaría alternando entre el puerto legítimo y el del atacante) por lo que seguramente se produciría un DoS

Madrikeka dijo...

Entre el post y los comentarios me habéis dado un par de ideas.
Muchas gracias por toda la información!!