Scansionatore di porte TCP, emette pacchetti SYN in modo asincrono, scansione dell'intera Internet in meno di 5 minuti.
Questo è uno scanner di porte su scala Internet. Può scansionare l'intera Internet in meno di 5 minuti, trasmettendo 10 milioni di pacchetti al secondo, da una singola macchina.
Il suo utilizzo (parametri, output) è simile a nmap, il più famoso scanner di porte. In caso di dubbio, prova una di quelle funzionalità -- sono supportate le funzionalità per la scansione estesa di molte macchine, mentre non lo sono le scansioni approfondite di singole macchine.
Internamente, utilizza trasmissione asincrona, simile a scanner di porte come scanrand, unicornscan e ZMap. È più flessibile, consentendo range arbitrari di porte e indirizzi.
NOTA: masscan utilizza il proprio stack TCP/IP ad hoc. Qualsiasi cosa diversa da semplici scansioni di porte può causare conflitto con lo stack TCP/IP locale. Ciò significa che devi usare l'opzione --src-ip per eseguire da un indirizzo IP diverso, oppure usare --src-port per configurare quali porte sorgente usa masscan, e poi configurare anche il firewall interno (come pf o iptables) per isolare quelle porte dal resto del sistema operativo.
Questo strumento è gratuito, ma considera di contribuire economicamente al suo sviluppo: Indirizzo del portafoglio Bitcoin: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
Su Debian/Ubuntu, si procede più o meno come segue. Non ha realmente altre dipendenze oltre a un compilatore C (come gcc o clang).
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
Questo mette il programma nella sottodirectory masscan/bin. Per installarlo (su Linux) esegui:
make install
Il sorgente consiste in molti piccoli file, quindi la compilazione è molto più veloce usando la build multi-thread. Questo richiede più di 2 GB su un Raspberry Pi (e si rompe), quindi potresti usare un numero più piccolo, come -j4 piuttosto che tutti i thread possibili.
make -j
Mentre Linux è la piattaforma target principale, il codice funziona bene su molti altri sistemi (Windows, macOS, ecc.). Ecco alcune informazioni aggiuntive sulla compilazione:
makemakegmakecc src/*.c -o bin/masscanSu macOS, i binari x86 sembrano funzionare altrettanto velocemente sotto emulazione ARM.
L'utilizzo è simile a nmap. Per scansionare un segmento di rete per alcune porte:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
Questo farà:
10.x.x.x e la sottorete 2603:3001:2d00:da00::x<stdout> che può essere reindirizzato su un filePer vedere l'elenco completo delle opzioni, usa la funzionalità --echo. Questa scarica la configurazione corrente ed esce. Questo output può essere usato come input nel programma:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
Masscan può fare più che semplicemente rilevare se le porte sono aperte. Può anche completare la connessione TCP e l'interazione con l'applicazione su quella porta per ottenere semplici informazioni "banner".
Masscan supporta il controllo banner sui seguenti protocolli:
Il problema è che masscan contiene il proprio stack TCP/IP separato dal sistema su cui lo esegui. Quando il sistema locale riceve un SYN-ACK dal target sondato, risponde con un pacchetto RST che uccide la connessione prima che masscan possa catturare il banner.
Il modo più semplice per prevenirlo è assegnare a masscan un indirizzo IP separato. Ciò assomiglia a uno dei seguenti esempi:
# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
# masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d
L'indirizzo che scegli deve essere sulla sottorete locale e non altrimenti usato da un altro sistema. Masscan ti avvertirà che hai commesso un errore, ma potresti aver compromesso le comunicazioni dell'altra macchina per diversi minuti, quindi fai attenzione.
In alcuni casi, come WiFi, ciò non è possibile. In quei casi, puoi mettere un firewall sulla porta che masscan usa. Questo impedisce allo stack TCP/IP locale di vedere il pacchetto, ma masscan lo vede comunque poiché bypassa lo stack locale. Per Linux, ciò assomiglia a:
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
Probabilmente vorrai scegliere porte che non entrino in conflitto con le porte che Linux potrebbe altrimenti scegliere come porte sorgente. Puoi vedere il range che Linux usa, e riconfigurarlo, guardando nel file:
/proc/sys/net/ipv4/ip_local_port_range
Sull'ultima versione di Kali Linux (Agosto 2018), quel range è da 32768 a 60999, quindi dovresti scegliere porte al di sotto di 32768 o da 61000 in su.
Impostare una regola iptables dura solo fino al prossimo riavvio. Devi cercare come salvare la configurazione in base alla tua distribuzione, ad esempio usando iptables-save e/o iptables-persistent.
Su Mac OS X e BSD, ci sono passaggi simili. Per scoprire i range da evitare, usa un comando come il seguente:
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
Su FreeBSD e MacOS più vecchi, usa un comando ipfw:
# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000
Su MacOS più recenti e OpenBSD, usa l'utilità di filtraggio pacchetti pf. Modifica il file /etc/pf.conf per aggiungere una riga come la seguente:
block in proto tcp from any to any port 40000:40015
Quindi per abilitare il firewall, esegui il comando:
# pfctl -E
Se il firewall è già in esecuzione, riavvia o ricarica le regole con il seguente comando:
# pfctl -f /etc/pf.conf
Windows non risponde con pacchetti RST, quindi nessuna di queste tecniche è necessaria. Tuttavia, masscan è ancora progettato per funzionare al meglio usando il proprio indirizzo IP, quindi dovresti eseguirlo in questo modo quando possibile, anche quando non è strettamente necessario.
La stessa cosa è necessaria per altri controlli, come il controllo --heartbleed, che è solo una forma di controllo banner.
Sebbene utile per reti più piccole e interne, il programma è realmente progettato pensando all'intera Internet. Potrebbe assomigliare a questo:
# masscan 0.0.0.0/0 -p0-65535
Scansionare l'intera Internet è sbagliato. Per un motivo, parti di Internet reagiscono male alla scansione. Per un altro, alcuni siti tracciano le scansioni e ti aggiungono a una lista di blocco, il che ti farà essere bloccato da parti utili di Internet. Pertanto, vuoi escludere molti range. Per mettere in lista nera o escludere range, vuoi usare la seguente sintassi:
# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
Questo stampa semplicemente i risultati sulla riga di comando. Probabilmente vuoi salvarli su un file invece. Pertanto, vuoi qualcosa come:
# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml
Ma questo va solo alla velocità predefinita di 100 pacchetti/secondo, che impiegherà un'eternità per scansionare Internet. Devi accelerarlo come segue:
# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000