Cara memindai seluruh Internet



Seluruh rentang alamat IPv4 adalah 4 miliar alamat IP. Ini sepertinya jumlah yang besar, tetapi seluruh Internet IPv4 dapat sepenuhnya dipindai untuk satu port TCP dalam 40 menit , misalnya, untuk menemukan semua server web di dunia atau semua port SSH yang terbuka. Dalam hal ini, satu server dan saluran gigabit sudah cukup. Ini berguna untuk penelitian, misalnya, jika Anda mengumpulkan statistik tentang teknologi yang digunakan di dunia, atau memperkirakan persentase layanan rentan yang terbuka ke luar.

Program Zmap(jangan bingung dengan nmap) memungkinkan Anda untuk memindai rentang jaringan yang sangat besar jauh lebih cepat daripada pemindai apa pun karena arsitektur khusus. Pada artikel ini, kita akan melihat contoh bagaimana mengkompilasi daftar semua server web di dunia menggunakan zmap. Memiliki daftar host dengan port HTTP terbuka, Anda sudah dapat menggunakan pemindai yang lebih cerdas, memberikannya daftar target yang akurat.

Apa itu nmap buruk?


Untuk memindai subnet kecil, Nmap biasanya digunakan - multitool open source yang populer dengan banyak roti Pentester di dalamnya. Ini sangat cocok untuk memindai rentang kecil dan host selektif. Nmap memiliki mesin sendiri untuk menulis skrip khusus dalam lua (Nmap Script Engine) dan banyak skrip siap pakai yang keren. Tetapi nmap tidak cocok untuk memindai jaringan besar, seperti jutaan atau bahkan miliaran alamat. Tugas semacam itu akan memakan waktu beberapa hari atau bahkan berminggu-minggu. Faktanya adalah bahwa nmap menggunakan subsistem jaringan dari sistem operasi dan soket penuh dibuka untuk setiap permintaan. Anda tidak dapat melakukannya tanpa itu untuk koneksi TCP penuh ketika Anda perlu mengobrol dengan layanan, misalnya, membuat permintaan GET ke server web. Tapi ini sangat mengurangi kinerja ketika pemindaian SYN cepat diperlukan,di mana tugasnya hanya untuk mengetahui apakah port terbuka.

Zmap dan Masscan


Scanner asinkron Zmap dan Masscan lebih cocok untuk kita: keduanya bekerja lebih cepat, menggunakan driver PF_RING (soket yang secara signifikan mempercepat penangkapan paket) dan mengacak alamat untuk menghindari DoS yang mematikan. Tidak seperti Nmap, mereka tidak menggunakan sistem TCP / IP: yang pertama menghasilkan frame Ethernet telanjang, yang kedua menggunakan tumpukan TCP yang ditulis sendiri.

Masscan dianggap sebagai pemindai Internet tercepat yang dapat melewati seluruh rentang IPv4 dalam enam menit, tetapi hanya dengan beberapa adapter fisik yang terhubung secara paralel, lalu lintas keluar dengan paket SYN dihasilkan dari satu, dan jawaban datang ke yang lain. Dalam kondisi koneksi tunggal, Zmap yang dimodifikasi hampir satu setengah kali lebih cepat. Catatan-catatan ini, tentu saja, ditempatkan di atas besi pada saluran 10 Gbit / s, dan akan sulit dan mahal untuk mengulanginya sendiri. Pada koneksi gigabit yang jauh lebih terjangkau, Zmap juga bekerja lebih cepat daripada Masscan karena penggunaan sumber daya saluran dan CPU yang lebih efisien dan dapat diselesaikan dalam waktu sekitar 45-50 menit.


Alur kerja yang disederhanakan dari Zmap dan Masscan. Generator traffic keluar dan prosesor respons yang masuk bekerja secara terpisah

Tanpa membahas detail teknis, Zmap dan Masscan menggunakan dua entitas: generator lalu lintas keluar yang berisi permintaan SYN dan prosesor respons masuk yang terpisah. Kinerja di sini hanya dibatasi oleh lebar saluran dan kinerja antarmuka jaringan, yaitu batas PPS (paket per detik). Oleh karena itu, proses pemindaian dapat dibagi menjadi beberapa antarmuka atau bahkan beberapa host fisik, jika dimungkinkan untuk mengganti Source IP dengan alamat dari packet handler yang masuk.

Pindai Persiapan


Harus diingat bahwa pemindai memuat sistem dan khususnya antarmuka jaringan, memanfaatkan seluruh saluran yang tersedia. Jika Anda mulai memindai tanpa memperingatkan tuan rumah, itu akan terlihat seperti DDoS dan Anda kemungkinan besar akan terputus dari jaringan dengan sangat cepat. Anda juga harus siap bahwa pemindaian seluruh Internet akan memancing respons - mereka akan mulai mengeluh tentang Anda. Artinya, tuan rumah akan menerima banyak surat otomatis yang mengeluh "Anda memindai kami."

Jadi sebelum memulai proyek Anda, sebaiknya siapkan:

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

NAT,


Penting untuk dipahami bahwa zmap menghasilkan jutaan permintaan TCP pada saat yang sama. Jika router dengan NAT, firewall dengan pelacakan koneksi, perlindungan DDoS, atau sistem lain dengan firewall stateful mencoba melacak koneksi diinstal antara Internet dan server pemindaian, itu akan rusak karena tidak dapat mencerna begitu banyak koneksi. Oleh karena itu, Anda tidak dapat menjalankan zmap saat berada di NAT, misalnya, di belakang router WiFi rumah.

Mencoba Zmap


Instal Zmap ( instruksi )

Tes pada sesuatu yang sederhana, lihat server web tetangga dari habr.com:

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

Pilihan:

  • -p 80 - TCP port 80, artinya, kami hanya mencari server HTTP
  • 178.248.237.0/24 adalah kisaran target alamat. Jika Anda tidak menentukannya, seluruh Internet akan dipindai.
  • -B 100M - lebar saluran maksimum yang digunakan oleh zmap. Jika opsi ini tidak ditentukan, seluruh saluran yang tersedia akan dibuang.
  • -o habr.txt - tulis hasilnya ke file teks. Ini akan mendapatkan alamat yang menjawab permintaan, yaitu, di mana ada server HTTP


Memindai 254 alamat dengan zmap memerlukan beberapa detik

Format output Zmap


Secara default, zmap hanya menambahkan alamat yang ditemukan ke file teks, memisahkannya dengan jeda baris. Tetapi juga dapat menulis hasil dalam format json dan xml. Opsi --output-fields memungkinkan Anda untuk menentukan bidang tambahan yang akan ditambahkan ke output.

Mari kita coba misalnya format output yang lebih maju di json, yang menunjukkan port tempat permintaan respons dan TTL paket datang:

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

Pindai seluruh Internet!


Saya mencoba menjalankan pemindaian pada VPS, dan setelah beberapa menit saya dilarang dengan persyaratan untuk memeriksa server untuk virus. Ini cukup logis, karena pemindaian seperti itu tampak seperti DDoS dari host. Tetapi setelah membahas tugas saya dengan dukungan, saya ditawari untuk mengambil server khusus dan memindai di situ.

Beginilah pemindaian pada antarmuka 200Mbit / s, waktu yang diperkirakan sekitar enam jam:


Bahkan dengan saluran 100 Mbit / s, seluruh Internet dapat dipindai semalam.

Apa yang harus dilakukan selanjutnya?


Sekarang kita dapat mengetahui berapa banyak alamat dunia yang mendengarkan pada port 80 dan mengumpulkan daftar mereka. Itu dapat dikirim ke pemindai L7 untuk menganalisis lapisan aplikasi untuk kerentanan.

Misalnya, dapatkan Judul HTML dari semua server web di dunia menggunakan nmap. Untuk input nmap, kami mentransfer file yang diterima dari zmap dalam format yang biasa:


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




All Articles