Comment analyser l'intégralité d'Internet



La gamme complète d'adresses IPv4 est de 4 milliards d'adresses IP. Cela semble énorme, mais tout Internet IPv4 peut être complètement analysé pour un port TCP en 40 minutes , par exemple, pour trouver tous les serveurs Web du monde ou tous les ports SSH ouverts. Dans ce cas, un serveur et un canal gigabit suffisent. Cela est utile pour la recherche, par exemple, si vous collectez des statistiques sur les technologies utilisées dans le monde ou estimez le pourcentage de services vulnérables ouverts sur l'extérieur.

Programme Zmap(à ne pas confondre avec nmap) vous permet de numériser d'énormes gammes de réseaux beaucoup plus rapidement que n'importe quel scanner en raison de l'architecture spéciale. Dans cet article, nous verrons un exemple de la façon de compiler une liste de tous les serveurs Web dans le monde en utilisant zmap. Ayant une liste d'hôtes avec un port HTTP ouvert, vous pouvez déjà utiliser un scanner plus intelligent, en lui passant une liste précise de cibles.

Quel est mauvais nmap


Pour la numérisation de petits sous-réseaux, Nmap est traditionnellement utilisé - un outil multifonction open source populaire avec beaucoup de petits pains Pentester à l'intérieur. Il est bien adapté pour balayer de petites plages et des hôtes sélectifs. Nmap a son propre moteur pour écrire des scripts personnalisés dans lua (Nmap Script Engine) et de nombreux scripts prêts à l'emploi. Mais nmap n'est pas bien adapté pour analyser de grands réseaux, tels que des millions voire des milliards d'adresses. Ces tâches prendront plusieurs jours, voire plusieurs semaines. Le fait est que nmap utilise le sous-système réseau du système d'exploitation et qu'un socket complet est ouvert pour chaque requête. Vous ne pouvez pas vous en passer pour une connexion TCP complète lorsque vous devez discuter avec le service, par exemple, faire une demande GET à un serveur Web. Mais cela réduit considérablement les performances lorsqu'un balayage SYN rapide est requis,où la tâche consiste uniquement à savoir si le port est ouvert.

Zmap et Masscan


Les scanners asynchrones Zmap et Masscan nous conviennent mieux: les deux fonctionnent beaucoup plus rapidement, utilisent le pilote PF_RING (un socket qui accélère considérablement la capture des paquets) et randomisent les adresses pour éviter un DoS mortel. Contrairement à Nmap, ils n'utilisent pas le système TCP / IP: le premier génère des trames Ethernet nues, le second utilise une pile TCP auto-écrite.

Masscan est considéré comme le scanner Internet le plus rapide qui peut parcourir toute la plage IPv4 en six minutes, mais avec seulement quelques adaptateurs physiques connectés en parallèle, le trafic sortant avec les paquets SYN est généré par l'un et les réponses arrivent par l'autre. Dans les conditions d'une seule connexion, le Zmap modifié était presque une fois et demie plus rapide. Ces records, bien sûr, ont été établis sur le fer supérieur sur les canaux de 10 Gbit / s, et il sera difficile et coûteux de les répéter vous-même. Sur une connexion gigabit beaucoup plus abordable, Zmap fonctionne également plus rapidement que Masscan en raison d'une utilisation plus efficace des ressources de canal et de processeur et peut être achevé en 45 à 50 minutes environ.


Flux de travail simplifié de Zmap et Masscan. Le générateur de trafic sortant et le processeur de réponse entrant fonctionnent séparément

Sans entrer dans les détails techniques, Zmap et Masscan utilisent deux entités: un générateur de trafic sortant contenant des requêtes SYN et un processeur de réponse entrant distinct. Les performances ici ne sont limitées que par la largeur du canal et les performances de l'interface réseau, à savoir la limite PPS (paquets par seconde). Par conséquent, le processus d'analyse peut être divisé en plusieurs interfaces ou même plusieurs hôtes physiques s'il est possible de remplacer l'IP source par l'adresse du gestionnaire de paquets entrant.

Scan Prep


Il faut garder à l'esprit que le scanner charge le système et en particulier les interfaces réseau, en utilisant tout le canal disponible. Si vous commencez l'analyse sans avertir l'hôte, cela ressemblera à DDoS et vous serez très probablement déconnecté du réseau très rapidement. Vous devez également être préparé à ce que l'analyse de tout Internet provoquera une réponse - ils commenceront à se plaindre de vous. Autrement dit, l'hôte recevra un tas de lettres automatiques se plaignant "vous nous numérisez."

Avant de démarrer votre projet, il est donc préférable de préparer:

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

NAT,


Il est important de comprendre que zmap génère des millions de requêtes TCP en même temps. Si un routeur avec NAT, un pare-feu avec suivi des connexions, une protection DDoS ou tout autre système avec un pare-feu dynamique essayant de suivre les connexions est installé entre Internet et le serveur de numérisation, il tombera en panne car il ne peut pas digérer autant de connexions. Par conséquent, vous ne pouvez pas exécuter zmap dans le NAT, par exemple, derrière un routeur WiFi domestique.

Essayer Zmap


Installez le test Zmap ( instruction )

sur quelque chose de simple, consultez les serveurs Web voisins de habr.com:

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

Options:

  • -p 80 - port TCP 80, c'est-à-dire que nous recherchons uniquement des serveurs HTTP
  • 178.248.237.0/24 est la plage d'adresses cible. Si vous ne le spécifiez pas, l'intégralité d'Internet sera analysée.
  • -B 100M - la largeur de canal maximale utilisée par zmap. Si cette option n'est pas spécifiée, la totalité du canal disponible sera supprimée.
  • -o habr.txt - écrit les résultats dans un fichier texte. Il obtiendra les adresses qui ont répondu à la demande, c'est-à-dire sur lesquelles il y a un serveur HTTP


La numérisation de 254 adresses avec zmap a pris quelques secondes

Formats de sortie Zmap


Par défaut, zmap ajoute simplement les adresses trouvées à un fichier texte, en les séparant par des sauts de ligne. Mais il peut également écrire des résultats au format json et xml. L'option --output-fields vous permet de spécifier des champs supplémentaires qui seront ajoutés à la sortie.

Essayons par exemple un format de sortie plus avancé dans json, indiquant le port sur lequel la demande de réponse et le TTL du paquet sont arrivés:

$ 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" }

Scannez tout Internet!


J'ai essayé d'exécuter une analyse sur VPS, et après quelques minutes, j'ai été banni avec l'obligation de vérifier le serveur pour les virus. C'est tout à fait logique, car une telle analyse ressemble à DDoS de l'hôte. Mais après avoir discuté de ma tâche avec le support, on m'a proposé de prendre un serveur dédié et de le scanner.

Voici à quoi ressemble la numérisation sur l'interface 200Mbit / s, le temps prévu est d'environ six heures:


même avec un canal de 100 Mbit / s, tout Internet peut être scanné du jour au lendemain.

Que faire ensuite


Maintenant, nous pouvons dire combien d'adresses mondiales écoutent sur le port 80 et en collecter une liste. Il peut être envoyé au scanner L7 pour analyser la couche application pour les vulnérabilités.

Par exemple, obtenez le titre HTML de tous les serveurs Web dans le monde en utilisant nmap. À l'entrée nmap, nous transférons le fichier reçu de zmap au format habituel:


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




All Articles