domingo, 2 de mayo de 2010

Cuántos somos en esta red???

mmm un poco falto inspiración últimamente, terminando los parciales (o no, no estoy muy seguro xD). Hoy me entró la necesidad de poder saber al "instante" la totalidad de hosts conectados a una LAN, (que necesidades las mías xD).
Lo primero que me vino a la mente fue hacer un ping a cada host de la red, pero cabe la posibilidad de que los hosts no respondan las ECHO-Request ICMP, entonces me estaría perdiendo alguno que otro. Entonces lo mas recomendable me pareció ser utilizar ARP (Address Resolution Protocol), protocolo esencial en las redes LAN para traducir las direcciones de red (IP en este caso) a direcciones de capa de enlace (Ethernet MAC address en este caso).

Cabe aclarar que las comunicaciones entre hosts que pertenecen a un mismo segmento LAN se realiza mediante direcciones MAC, las direcciones IP realmente se utilizan cuando los hosts se encuentran en diferentes redes.

Volviendo al tema... buscando alguna aplicación que sea útil para esta tarea me encontré inicialmente con "arping" (parte del paquete iputils), que justamente nos permite crear paquetes ARP.

Primero aproximación con arping:

Podemos ver que el host 192.168.0.1 está activo y respondió a la primer consulta, entonces no fue necesario enviar mas. "-f deja de enviar ni bien recibe una respuesta" "-c 2 máximo de consultas".

root@moon:/home/juan# arping -f -c 2 -I eth0 192.168.0.1
ARPING 192.168.0.1 from 192.168.0.36 eth0
Unicast reply from 192.168.0.1 [00:08:54:29:06:__]  0.876ms
Sent 1 probes (1 broadcast(s))
Received 1 response(s)


Definitivamente esto no es lo que queria, tener que repetir el comando mas de 200 veces para recorrer todo la red C no está en mis planes, si bien podría hacerse con un script, no me interesa.

Buscando un poco mas encontré a don "arp-scan", el nombre es bastante explícito xD. Es bastante mas flexible que arping y nos permite realizar consultas a un rango de direcciones, una única dirección, o toda la red. El man de arp-scan es un poco rebuscado, pero se deja leer :D.

Probando arp-scan:
Ahora si!, escaneamos un rango de direcciones de la red, desde 192.168.0.1 a 192.168.0.48 y nos encontramos con 4 hosts activos!

root@moon:/home/juan# arp-scan -I eth0 -q -r 1 192.168.0.1-192.168.0.48
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 48 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1    00:08:54:29:06:__   
192.168.0.10    00:27:19:dc:d7:__   
192.168.0.20    00:e0:4c:a8:89:__   
192.168.0.26    00:19:66:38:0a:__   

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 48 hosts scanned in 0.539 seconds (89.05 hosts/sec).  4 responded


Logré lo que pretendía, pero claramente se enviaron 48 ARP-Request con mi dirección IP como origen de la consulta. Que a dónde voy?, simple, si se trata de nuestra red no hay problema, nadie va a quejarse al ver tanto interés por parte de una dirección por conocer a todos los hosts activos, pero si no se trata de nuestra red? en el último caso sería muy interesante poder evitar que nuestra dirección de red y nuestra MAC se incluyeran en las consultas :D. Claro que si!!!, arp-scan nos permite alterar los campos del paquete ARP para lograr esto :D.

Arp-scan e IP spoof:
Acá va el primer intento por anonimizar (existe?) las consultas. "-s 192.168.0.45" es la dirección que figurará como origen en la consulta, ahora ya no ponemos en juego nuestra dirección IP real! pero claro xD, aún enviamos nuestra dirección MAC original, es decir que aún somos un blanco fácil...

root@moon:/home/juan# arp-scan -I eth0 -r 1 -q -s 192.168.0.45 192.168.0.1-192.168.0.48
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 48 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1    00:08:54:29:06:_   
192.168.0.10    00:27:19:dc:d7:_   
192.168.0.20    00:e0:4c:a8:89:_   
192.168.0.26    00:19:66:38:0a:_   

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 48 hosts scanned in 0.465 seconds (103.23 hosts/sec).  4 responded
root@moon:/home/juan#


Arp-scan e IP spoof + MAC spoof V1:
El primer intento fue ir directamente a lo fácil y alterar todos los campos utilizando arp-scan, pero mi sorpresa fue estaa... Al cambiar tanto la dirección mac (de la consulta, como la que va dentro del paquete) como la dirección IP de origen, las respuestas no son capturadas correctamente por arp-scan (puede verificarse con wireshark (por ejemplo) que las consultas y respuestas se completan perfectamente) y podríamos creer que el host no está activo (192.168.0.1 está activo, aunque no lo parezca). Si bien es totalmente factible corroborar los hosts activos viendo las respuestas desde wireshark, estaríamos complicando mas el panorama, y esa jamás fue la idea :D.

root@moon:/home/juan# arp-scan -I eth0 -r 1 -q -S 00:11:22:33:44:55 -u 00:11:22:33:44:55 -s 192.168.0.45 192.168.0.1
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 1 hosts (http://www.nta-monitor.com/tools/arp-scan/)

0 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 1 hosts scanned in 0.347 seconds (2.88 hosts/sec).  0 responded
root@moon:/home/juan#


Arp-scan e IP spoof + MAC spoof V2:
En esta versión primero cambiamos la dirección MAC de nuestro adaptador de red, utilizando macchanger (a decir verdad no es necesario utilizarlo, puede hacerse tranquilamente con ifconfig) y luego lanzamos nuestro querido arp-scan, para encontrarnos finalmente con los hosts activos, pero esta vez ocultando completamente nuestra identidad dentro de la red.

root@moon:/home/juan# macchanger -m 00:11:22:33:44:55 eth0
Current MAC: 00:24:21:6d:00:36 (unknown)
Faked MAC:   00:11:22:33:44:55 (Cimsys Inc)
root@moon:/home/juan# arp-scan -I eth0 -r 1 -q -S 00:11:22:33:44:55 -u 00:11:22:33:44:55 -s 192.168.0.45 192.168.0.1-192.168.0.48
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 48 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1    00:08:54:29:06:__   
192.168.0.10    00:27:19:dc:d7:__   
192.168.0.20    00:e0:4c:a8:89:__   
192.168.0.26    00:19:66:38:0a:__   

4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 48 hosts scanned in 0.476 seconds (100.84 hosts/sec).  4 responded
root@moon:/home/juan#


Algunas consideraciones:
-"Arp-scan e IP spoof" aunque parezca que fuimos cuidadosos no lo fuimos, wireshark detectó que una dirección MAC estaba asociada a dos direcciones de red, la dirección actual y la dirección falsa, esto podría haber disparado alarmas en alguno de los hosts y haber alertado al administrador.
-Podría darse el caso donde la IP que elijamos para ocultarnos ya esté asignada en la red, seria interesante elegir una dirección que difícilmente esté en uso, para evitar conflictos de direcciones que puedan alarmar a los usuarios de los hosts o el administrador mismo.
-Si si, esto es la previa para un ataque MITM (hombre en el medio), posiblemente en la próxima entrada :D.
-arping no me permitió utilizar una dirección que no fuese la que tiene asignada la interface eth0, un poco de mal gusto xD.
-Había pensado en una mas, pero se me acaba de olvidar :D.

Ahora si que me bajó el sueño!