Cómo escanear todo Internet



El rango completo de direcciones IPv4 es de 4 mil millones de direcciones IP. Esto parece un gran número, pero toda la Internet IPv4 se puede escanear por completo para un puerto TCP en 40 minutos , por ejemplo, para encontrar todos los servidores web del mundo o todos los puertos SSH abiertos. En este caso, un servidor y un canal gigabit son suficientes. Esto es útil para la investigación, por ejemplo, si recopila estadísticas sobre las tecnologías utilizadas en el mundo o estima el porcentaje de servicios vulnerables que están abiertos al exterior.

Programa Zmap(no debe confundirse con nmap) le permite escanear enormes rangos de redes mucho más rápido que cualquier escáner debido a la arquitectura especial. En este artículo, veremos un ejemplo de cómo compilar una lista de todos los servidores web del mundo usando zmap. Al tener una lista de hosts con un puerto HTTP abierto, ya puede usar un escáner más inteligente, pasándole una lista precisa de objetivos.

Lo que es malo nmap


Para escanear subredes pequeñas, Nmap se usa tradicionalmente: una herramienta múltiple de código abierto popular con muchos bollos de Pentester en su interior. Es muy adecuado para escanear rangos pequeños y hosts selectivos. Nmap tiene su propio motor para escribir scripts personalizados en lua (Nmap Script Engine) y muchos scripts geniales listos para usar. Pero nmap no es adecuado para escanear redes grandes, como millones o incluso miles de millones de direcciones. Dichas tareas llevarán varios días o incluso semanas. El hecho es que nmap usa el subsistema de red del sistema operativo y se abre un socket completo para cada solicitud. No puede prescindir de él para una conexión TCP completa cuando necesita chatear con el servicio, por ejemplo, hacer una solicitud GET a un servidor web. Pero esto reduce enormemente el rendimiento cuando se requiere un escaneo SYN rápido,donde la tarea es solo averiguar si el puerto está abierto.

Zmap y Masscan


Los escáneres asíncronos Zmap y Masscan son más adecuados para nosotros: ambos funcionan mucho más rápido, usan el controlador PF_RING (un socket que acelera significativamente la captura de paquetes) y aleatorizan direcciones para evitar un DoS mortal. A diferencia de Nmap, no usan el sistema TCP / IP: el primero genera tramas Ethernet desnudas, el segundo usa una pila TCP autoescrita.

Masscan se considera el escáner de Internet más rápido que puede atravesar todo el rango de IPv4 en seis minutos, pero solo con unos pocos adaptadores físicos conectados en paralelo, el tráfico saliente con paquetes SYN se genera a partir de uno, y las respuestas llegan al otro. En condiciones de una sola conexión, el Zmap modificado fue casi una vez y media más rápido. Estos registros, por supuesto, se establecieron en la plancha superior en canales de 10 Gbit / s, y será difícil y costoso repetirlos usted mismo. En una conexión gigabit mucho más asequible, Zmap también funciona más rápido que Masscan debido al uso más eficiente de los recursos de canal y CPU y puede completarse en aproximadamente 45-50 minutos.


Flujo de trabajo simplificado de Zmap y Masscan. El generador de tráfico saliente y el procesador de respuesta entrante funcionan por separado

Sin entrar en detalles técnicos, Zmap y Masscan utilizan dos entidades: un generador de tráfico saliente que contiene solicitudes SYN y un procesador de respuesta entrante separado. El rendimiento aquí está limitado solo por el ancho del canal y el rendimiento de la interfaz de red, es decir, el límite de PPS (paquetes por segundo). Por lo tanto, el proceso de escaneo se puede dividir en varias interfaces o incluso en varios hosts físicos, si es posible reemplazar la IP de origen con la dirección del controlador de paquetes entrante.

Escaneo de preparación


Debe tenerse en cuenta que el escáner carga el sistema y especialmente las interfaces de red, utilizando todo el canal disponible. Si comienza a escanear sin avisar al host, se verá como DDoS y lo más probable es que se desconecte de la red muy rápidamente. También debe estar preparado para que escanear todo Internet provoque una respuesta: comenzarán a quejarse de usted. Es decir, el anfitrión recibirá un montón de cartas automáticas quejándose de "nos está escaneando".

Entonces, antes de comenzar su proyecto, es mejor prepararse:

  • — ( - ). , . .
  • PTR- — , . , , . , PTR IP-, , - :
    scanner-for-educational-project.ivan-ivanov.com
  • User-Agent — - HTTP-, User-Agent, . , .
  • — , . .

NAT,


Es importante comprender que zmap genera millones de solicitudes TCP al mismo tiempo. Si se instala un enrutador con NAT, un firewall con seguimiento de conexión, protección DDoS o cualquier otro sistema con un firewall con estado que intente rastrear conexiones entre Internet y el servidor de escaneo, se descompondrá porque no puede digerir tantas conexiones. Por lo tanto, no puede ejecutar zmap mientras está en NAT, por ejemplo, detrás de un enrutador WiFi doméstico.

Probar Zmap


Instale Zmap ( instrucción )

Prueba en algo simple, vea los servidores web vecinos de habr.com:

$ zmap -p 80 178.248.237.0/24 -B 100M -o habr.txt

Opciones:

  • -p 80 : puerto TCP 80, es decir, solo estamos buscando servidores HTTP
  • 178.248.237.0/24 es el rango objetivo de direcciones. Si no lo especifica, se escaneará todo el Internet.
  • -B 100M : el ancho máximo de canal utilizado por zmap. Si no se especifica esta opción, se eliminará todo el canal disponible.
  • -o habr.txt : escribe los resultados en un archivo de texto. Obtendrá las direcciones que respondieron a la solicitud, es decir, en las que hay un servidor HTTP


Escanear 254 direcciones con zmap tomó unos segundos

Formatos de salida de Zmap


Por defecto, zmap simplemente agrega las direcciones encontradas a un archivo de texto, separándolas con saltos de línea. Pero también puede escribir resultados en formato json y xml. La opción --output-fields le permite especificar campos adicionales que se agregarán a la salida.

Probemos, por ejemplo, un formato de salida más avanzado en json, que indica el puerto en el que vino la solicitud de respuesta y el TTL del paquete:

$ zmap -p80  --output-module=json --output-fields=ttl,sport,dport,saddr 178.248.237.68 -o habr.com.json

#  
$ cat habr.com.json
{ "ttl": 58, "sport": 80, "dport": 51309, "saddr": "178.248.237.68" }

¡Escanea todo el Internet!


Traté de ejecutar un análisis en VPS, y después de unos minutos se me prohibió el requisito de verificar el servidor en busca de virus. Esto es bastante lógico, porque este análisis se parece a DDoS desde el host. Pero después de discutir mi tarea con el soporte, me ofrecieron tomar un servidor dedicado y escanearlo.

Así es como se ve el escaneo en la interfaz de 200Mbit / s, el tiempo previsto es de aproximadamente seis horas:


incluso con un canal de 100 Mbit / s, se puede escanear toda la Internet durante la noche.

Que hacer despues


Ahora podemos decir cuántas direcciones mundiales están escuchando en el puerto 80 y recopilar una lista de ellas. Se puede enviar al escáner L7 para analizar la capa de aplicación en busca de vulnerabilidades.

Por ejemplo, obtenga el título HTML de todos los servidores web del mundo usando nmap. A la entrada de nmap, transferimos el archivo recibido de zmap en el formato habitual:


$ nmap -sV -p 80 -v -n  --script http-title  -iL habr.txt




All Articles