Metasploit: idle scanning y el IPID
El idle scanning se sirve del IPID para echarle el muerto del escaneo a otro ordenador zombie con lo que para hacerlo efectivo debemos -antes de nada- encontrar ese ordenador adecuado al que culpar.
Explicación del proceso
Para detectar si un puerto está abierto o cerrado, es necesario primero observar el IPID del zombie, enviar paquetes a la víctima haciéndole ver que realmente se los está enviando éste y, posteriormente, observar de nuevo el IPID utilizado por el intermediario. En función de los valores iniciales y finales obtenidos, se puede averiguar el estado del puerto destino.- El primer paso es enviar al zombie un paquete SYN+ACK, con objeto de que éste nos devuelva el paquete RST correspondiente, del cual tomaremos el IPID.
- Acto seguido, se realiza una solicitud de conexión a la víctima, previa manipulación del paquete para que sea el zombie el que figure como origen del mismo. Al recibirlo, dado que estamos asumiendo que el puerto está abierto, la víctima envía de vuelta la confirmación de la conexión al que cree que es el solicitante, el zombie. Si el puerto estuviera cerrado la víctima devuelve al aparente emisor un paquete RST indicándole que no será posible establecer la conexión solicitada. El zombie recibe el paquete RST y lo ignora.
- En caso de correcta conexión, el zombie recibe la confirmación de la conexión, pero como no es él el que la ha generado, responde a la víctima con una señal de reseteo (RST), incrementando su IPID.
- De nuevo, pasado unos segundos, desde el atacante se vuelve a obtener el IPID del zombie de la misma forma que al comienzo, comprobando que ha sido incrementado en 2 unidades. De esta forma, se determina que el puerto destino del escaneo estaba abierto.
Encontrar un zombie
Pasando a la práctica, si queremos encontrar un zombie y utilizamos Metasploit es tan sencillo como usar el scanner que trae para ello:msf auxiliary(writable) > use scanner/ip/ipidseq msf auxiliary(ipidseq) > show options Module options: Name Current Setting Required Description ---- --------------- -------- ----------- RHOSTS yes The target address range or CIDR identifier RPORT 80 yes The target port THREADS 1 yes The number of concurrent threads TIMEOUT 500 yes The reply read timeout in milliseconds msf auxiliary(ipidseq) > set RHOSTS 192.168.1.0/24 RHOSTS => 192.168.1.0/24 msf auxiliary(ipidseq) > set THREADS 50 THREADS => 50 msf auxiliary(ipidseq) > run [*] 192.168.1.1's IPID sequence class: All zeros [*] 192.168.1.2's IPID sequence class: Incremental! [*] 192.168.1.10's IPID sequence class: Incremental! [*] 192.168.1.104's IPID sequence class: Randomized [*] 192.168.1.109's IPID sequence class: Incremental! [*] 192.168.1.111's IPID sequence class: Incremental! [*] 192.168.1.114's IPID sequence class: Incremental! [*] 192.168.1.116's IPID sequence class: All zeros [*] 192.168.1.124's IPID sequence class: Incremental! [*] 192.168.1.123's IPID sequence class: Incremental! [*] 192.168.1.137's IPID sequence class: All zeros [*] 192.168.1.150's IPID sequence class: All zeros [*] 192.168.1.151's IPID sequence class: Incremental! [*] Auxiliary module execution completedDentro de esa red local que hemos escaneado todas las máquinas etiquetadas como Incremental! son ordenadores zombie que podremos utilizar para hacer el escaneo silencioso.
Escaneo silencioso o invisible
Ya hemos hecho lo más complicado, seleccionar la máquina que cargará con nuestras culpas, el resto es cosa de nmap, tan solo hemos de utilizar cualquier ordenador de los etiquetados como Incremental! anteriormente como argumento -sI de nmap:# nmap -P0 -p- -sI 192.168.1.2 192.168.1.150 Starting Nmap 5.00 ( http://nmap.org ) at 2009-11-05 01:51 CET Idle scan using zombie 192.168.1.2 (192.168.1.2:80); Class: Incremental Interesting ports on 192.168.1.150: Not shown: 996 closed|filtered ports PORT STATE SERVICE 135/tcp open msrpc 139/tcp open netbios-ssn 445/tcp open microsoft-ds 3389/tcp open ms-term-serv MAC Address: 00:0C:29:41:F2:E8 (VMware) Nmap done: 1 IP address (1 host up) scanned in 5.56 secondsLa opción -P0 previene que nmap envíe un ping incial a la máquina destino. Esto disminuye la velocidad del escaneo (hay menos información disponible sobre los tiempos), pero asegura que ningún paquete sea enviado al destino desde nuestra verdadera dirección de IP.
La opción -p- se usa para escanear todos los puertos, no solo los "conocidos", pero el escaneo será más lento. El -sI es obvio, para usar el zombie en las peticiones.
Y teóricamente -ya os digo que no he probado con ningún IDS activo- deberíamos estar protegidos contra los detectores de escaneos. Aún sabiendo que la curiosidad mató al gato... hacía tiempo que no me divertía tanto.
Comentarios
Veo que te me has adelantado en la lectura del metasploit-unleashed, y no conocía el módulo de metasploit para detectar hosts válidos para un iddle scan.
Por cierto, acostúmbrate a usar -PN ya que -P0 está "deprecated" y puede que lo acaben quitando.
+1 para tí :)
+1 para el post de mi parte tb.