So scannen Sie das gesamte Internet



Der gesamte Bereich der IPv4-Adressen umfasst 4 Milliarden IP-Adressen. Dies scheint eine große Zahl zu sein, aber das gesamte IPv4-Internet kann in 40 Minuten vollständig nach einem TCP-Port durchsucht werden , um beispielsweise alle Webserver der Welt oder alle offenen SSH-Ports zu finden. In diesem Fall reichen ein Server und ein Gigabit-Kanal aus. Dies ist beispielsweise für die Forschung nützlich, wenn Sie Statistiken zu den weltweit verwendeten Technologien sammeln oder den Prozentsatz an anfälligen Diensten schätzen, die nach außen offen sind. Zmap-

Programm(nicht zu verwechseln mit nmap) ermöglicht es Ihnen, große Netzwerkbereiche aufgrund der speziellen Architektur viel schneller als jeder andere Scanner zu scannen. In diesem Artikel sehen wir uns ein Beispiel an, wie Sie mit zmap eine Liste aller Webserver der Welt erstellen. Mit einer Liste von Hosts mit offenem HTTP-Port können Sie bereits einen intelligenteren Scanner verwenden und ihm eine genaue Liste von Zielen übergeben.

Was ist schlecht nmap


Zum Scannen kleiner Subnetze wird traditionell Nmap verwendet - ein beliebtes Open-Source-Multitool mit vielen Pentester-Brötchen. Es eignet sich gut zum Scannen kleiner Bereiche und selektiver Hosts. Nmap hat eine eigene Engine zum Schreiben von benutzerdefinierten Skripten in Lua (Nmap Script Engine) und viele coole vorgefertigte Skripte. Nmap eignet sich jedoch nicht zum Scannen großer Netzwerke wie Millionen oder sogar Milliarden von Adressen. Solche Aufgaben dauern mehrere Tage oder sogar Wochen. Tatsache ist, dass nmap das Netzwerksubsystem des Betriebssystems verwendet und für jede Anforderung ein vollständiger Socket geöffnet wird. Sie können für eine vollständige TCP-Verbindung nicht darauf verzichten, wenn Sie mit dem Dienst chatten müssen, z. B. eine GET-Anforderung an einen Webserver senden müssen. Dies verringert jedoch die Leistung erheblich, wenn ein schnelles SYN-Scannen erforderlich ist.wo die Aufgabe nur ist herauszufinden, ob der Port offen ist.

Zmap und Masscan


Asynchrone Zmap- und Masscan-Scanner eignen sich besser für uns: Beide arbeiten viel schneller, verwenden den PF_RING- Treiber (einen Socket, der die Paketerfassung erheblich beschleunigt) und randomisieren Adressen, um ein tödliches DoS zu vermeiden. Im Gegensatz zu Nmap verwenden sie kein System-TCP / IP: Das erste generiert nackte Ethernet-Frames, das zweite verwendet einen selbstgeschriebenen TCP-Stack.

Masscan gilt als der schnellste Internet-Scanner, der in sechs Minuten den gesamten IPv4-Bereich durchlaufen kann, aber nur mit wenigen parallel geschalteten physischen Adaptern wird ausgehender Datenverkehr mit SYN-Paketen von einem generiert und Antworten kommen zum anderen. Unter den Bedingungen einer einzelnen Verbindung war die modifizierte Zmap fast eineinhalb Mal schneller. Diese Rekorde wurden natürlich auf 10-Gbit / s-Kanälen auf das oberste Eisen gesetzt, und es wird schwierig und teuer sein, sie selbst zu wiederholen. Bei einer viel günstigeren Gigabit-Verbindung arbeitet Zmap aufgrund der effizienteren Nutzung der Kanal- und CPU-Ressourcen auch schneller als Masscan und kann in etwa 45 bis 50 Minuten abgeschlossen werden.


Vereinfachter Workflow von Zmap und Masscan. Der Generator für ausgehenden Verkehr und der Prozessor für eingehende Antworten arbeiten separat

Ohne auf technische Details einzugehen, verwenden Zmap und Masscan zwei Entitäten: einen Generator für ausgehenden Datenverkehr mit SYN-Anforderungen und einen separaten Prozessor für eingehende Antworten. Die Leistung ist hier nur durch die Kanalbreite und die Leistung der Netzwerkschnittstelle begrenzt, nämlich das PPS-Limit (Pakete pro Sekunde). Daher kann der Scanvorgang in mehrere Schnittstellen oder sogar mehrere physische Hosts unterteilt werden, wenn es möglich ist, die Quell-IP durch die Adresse des eingehenden Pakethandlers zu ersetzen.

Scan Prep


Es ist zu beachten, dass der Scanner das System und insbesondere die Netzwerkschnittstellen unter Verwendung des gesamten verfügbaren Kanals lädt. Wenn Sie mit dem Scannen beginnen, ohne den Host zu warnen, sieht es wie DDoS aus und Sie werden höchstwahrscheinlich sehr schnell vom Netzwerk getrennt. Sie müssen auch darauf vorbereitet sein, dass das Scannen des gesamten Internets eine Reaktion hervorruft - sie werden sich über Sie beschweren. Das heißt, der Host erhält eine Reihe von automatischen Briefen, in denen er sich beschwert, dass Sie uns scannen.

Bevor Sie mit Ihrem Projekt beginnen, sollten Sie Folgendes vorbereiten:

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

NAT,


Es ist wichtig zu verstehen, dass zmap gleichzeitig Millionen von TCP-Anforderungen generiert. Wenn ein Router mit NAT, eine Firewall mit Verbindungsverfolgung, DDoS-Schutz oder ein anderes System mit einer zustandsbehafteten Firewall, die versucht, Verbindungen zu verfolgen, zwischen dem Internet und dem Scan-Server installiert ist, fällt sie aus, weil sie nicht so viele Verbindungen verarbeiten kann. Daher können Sie zmap nicht im NAT ausführen, z. B. hinter einem WLAN-Heimrouter.

Ich versuche Zmap


Installieren Sie Zmap ( Anleitung )

Test auf etwas Einfachem, siehe benachbarte Webserver von habr.com:

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

Optionen:

  • -p 80 - TCP-Port 80, dh wir suchen nur nach HTTP-Servern
  • 178.248.237.0/24 ist der Zieladressenbereich . Wenn Sie dies nicht angeben, wird das gesamte Internet gescannt.
  • -B 100M - Die maximale Kanalbreite, die von zmap verwendet wird. Wenn diese Option nicht angegeben ist, wird der gesamte verfügbare Kanal entsorgt.
  • -o habr.txt - schreibt die Ergebnisse in eine Textdatei. Es werden die Adressen abgerufen, die die Anfrage beantwortet haben, dh auf denen sich ein HTTP-Server befindet


Das Scannen von 254 Adressen mit zmap dauerte einige Sekunden

Zmap-Ausgabeformate


Standardmäßig fügt zmap die gefundenen Adressen einfach einer Textdatei hinzu und trennt sie durch Zeilenumbrüche. Es können aber auch Ergebnisse im JSON- und XML-Format geschrieben werden. Mit der Option --output-fields können Sie zusätzliche Felder angeben, die der Ausgabe hinzugefügt werden.

Versuchen wir zum Beispiel ein erweitertes Ausgabeformat in json, das den Port angibt, an dem die Antwortanforderung und die TTL des Pakets eingegangen sind:

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

Scannen Sie das gesamte Internet!


Ich habe versucht, einen Scan auf VPS durchzuführen, und nach einigen Minuten wurde mir die Anforderung gesperrt, den Server auf Viren zu überprüfen. Dies ist ziemlich logisch, da ein solcher Scan wie DDoS vom Host aussieht. Nachdem ich meine Aufgabe mit dem Support besprochen hatte, wurde mir angeboten, einen dedizierten Server zu nehmen und darauf zu scannen.

So sieht das Scannen auf der 200-Mbit / s-Schnittstelle aus, die vorhergesagte Zeit beträgt ungefähr sechs Stunden:


Selbst mit einem Kanal von 100 Mbit / s kann das gesamte Internet über Nacht gescannt werden.

Was macht man als nächstes


Jetzt können wir feststellen, wie viele Weltadressen Port 80 abhören, und eine Liste davon sammeln. Es kann an den L7-Scanner gesendet werden, um die Anwendungsschicht auf Schwachstellen zu analysieren.

Holen Sie sich beispielsweise mit nmap den HTML-Titel aller Webserver auf der Welt. In die nmap-Eingabe übertragen wir die von zmap empfangene Datei im üblichen Format:


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




All Articles