
Scanner SYN stateless e banner grabber più veloci ed efficienti grazie all'uso dello stack TCP/IP in userland.
SOMMARIO
polarbearscan è un tentativo di effettuare banner grabbing e port scanning in modo più rapido ed efficiente. Combina due idee diverse che, si spera, lo renderanno degno della vostra attenzione e del vostro tempo.
La prima di queste idee è utilizzare lo stateless SYN scanning tramite cookie crittograficamente protetti per analizzare gli acknowledgment in arrivo. Per quanto ne sa l'autore, questa tecnica è stata pionierizzata da Dan Kaminsky in scanrand. Scanrand stesso faceva parte di Paketto Keiretsu, una raccolta di utility di scansione, ed è stato rilasciato tra il 2001 e il 2002. Un mirror di questo codice si trova su Packet Storm [1].
La seconda idea è utilizzare uno stack TCP/IP in userland con patch, in modo che lo scanner possa ripristinare immediatamente lo stato alla ricezione di un pacchetto crittograficamente verificato con i flag SYN e ACK impostati. Lo stack userland utilizzato qui da polarbearscan si chiama libuinet [2]. A differenza di altri stack TCP/IP in userland in circolazione, questo è molto maturo, essendo semplicemente un porting dello stack TCP/IP di FreeBSD.
Applicando patch allo stack libuinet, si può quindi costruire un socket e completare il normale handshake TCP a 3 vie rispondendo con un ACK appropriato. In questo modo si stabilisce immediatamente una connessione TCP pienamente funzionante. Questo è diverso da altri scanner (come nmap) che, dopo aver notato che una porta TCP è aperta, dovrebbero effettuare una connessione TCP completa tramite il kernel per eseguire operazioni come banner grabbing o version scanning. Una connessione TCP completa porta a un intero nuovo handshake TCP a 3 vie. Questo scarta completamente lo stato implicito accumulato dai primi due pacchetti scambiati tra gli host. Evitando ciò, si può ridurre l'uso della larghezza di banda e passare immediatamente dal rilevare che una porta è aperta al connettersi ad essa. Questa connessione può quindi semplicemente rimanere in attesa di ricevere dati in modalità banner grab o può inviare una richiesta HTTP.
Si noti che lo scanner attualmente supporta solo scansioni basate su IPv4 e funzionerà correttamente solo su interfacce di tipo Ethernet (cablato o wireless). Non ci sono piani per supportare IPv6 o interfacce diverse nel prossimo futuro.
INSTALLAZIONE
Compilare il codice è piuttosto semplice. È sufficiente una connessione funzionante a Internet e git deve essere installato in modo che le dipendenze richieste possano essere scaricate. Oltre a questo, sono necessari gli utility di sviluppo standard (gcc, make, patch), le versioni di sviluppo delle librerie (pthread, pcap, OpenSSL). Sulle distribuzioni basate su Debian è possibile installare semplicemente tutti i pacchetti elencati nel file DEPENDENCIES. Dopodiché si dovrebbe essere in grado di digitare 'make' e le dipendenze esterne verranno scaricate tramite git e l'intero scanner verrà compilato. Il binario può quindi essere copiato in /usr/bin o /usr/local/bin o simili.
Se la compilazione fallisce, si prega di inviare un'email all'autore (contatti sotto) includendo l'output di errore, la versione del kernel, la versione di libc e qualsiasi altra cosa che potrebbe aiutare a riprodurre e risolvere il problema. Il vostro aiuto è gentilmente apprezzato.
UTILIZZO
Eseguire lo strumento dovrebbe essere piuttosto semplice. Sono necessari i privilegi di root. L'opzione -h mostra brevi informazioni sull'utilizzo e le opzioni spiegate. Nella maggior parte dei casi non è necessario più che specificare il tipo di scansione da eseguire, l'elenco delle porte da scansionare e l'IP target o gli intervalli di IP. Per gli intervalli IP è supportata la notazione CIDR.
Esistono quattro diversi tipi di scansione specificati con -s.
-sB: Questo esegue un banner grab standard. Lo scanner non invierà alcun dato; si limiterà ad attendere e ricevere dati e visualizzarli fino al primo newline o carriage return ricevuto.
-sH: Questa modalità invia una richiesta "GET / HTTP/1.1" a ogni connessione stabilita con successo. È molto utile per identificare rapidamente i server HTTP.
-sT: La modalità di scansione TLS invia una sonda NULL TLS1.0 con zero opzioni e zero algoritmi specificati. Tuttavia, se sul lato ricevente è presente un server TLS valido, analizzerà e cercherà di capire se si tratta di una risposta di errore TLS valida, che verrà quindi visualizzata.
-sC: Scansione personalizzata che carica un payload da un file (specificato con -d) e invia questo payload a ogni socket stabilito con successo. Può essere utile per sondare rapidamente protocolli molto specifici.
-p: L'elenco delle porte TCP da scansionare, che può essere un intervallo di porte o porte singole, con intervalli e porte singole separati da virgole. Alcuni esempi: -p22,80,8080-9000,143 scannerà le porte 22, 80, 143 e l'intervallo da 8080 a 9000.
-b : Il limite di larghezza di banda da applicare per le sonde in uscita. Questo non si applica ai dati inviati e ricevuti sui socket, ma solo alle sonde SYN effettive inviate. Esempi: -b300k, -b67m, -b500b produrrebbero limiti di larghezza di banda rispettivamente di 300 kbps, 76 Mbps e 500 bps.
-d : Nome del file contenente il payload utilizzato per la scansione personalizzata. L'intero file verrà inviato fino a un massimo di 128 kB, che dovrebbe essere più che sufficiente per la maggior parte degli scopi.
-t: Specifica il numero di secondi che lo scanner attenderà dopo aver inviato tutte le sonde, ricevendo dati dai socket ancora connessi. Questo presupponendo che ce ne siano, altrimenti terminerà nel momento in cui non ci sarà più lavoro da fare.
-x: Forza lo strumento a mostrare sempre l'output ricevuto in notazione esadecimale. Altrimenti mostrerà i dati in notazione esadecimale solo se vengono trovati caratteri non stampabili.
-v: Specifica un output verboso. È utile principalmente per il debug.
-i : L'interfaccia da utilizzare per selezionare l'IP di origine e configurare il backend pcap. Non dovrebbe essere necessario su macchine standard con una sola NIC configurata correttamente, ma con più NIC potrebbe essere necessario.
-r : Il seme casuale da utilizzare per il RNG. Utile principalmente per il debug e per assicurarsi che lo strumento generi esattamente la stessa sequenza di pacchetti. L'argomento è un intero e può essere specificato in notazione esadecimale e decimale.
-T : Sostituisce il valore TTL IP predefinito da utilizzare nelle sonde SYN. Non è realmente necessario per nulla, ma incluso per completezza.
-W : Sostituisce la dimensione predefinita della finestra TCP da utilizzare nelle sonde SYN. Non è realmente necessario per nulla, ma incluso per completezza.
-I : Sostituisce il valore ID IP predefinito da utilizzare nelle sonde SYN. Non è realmente necessario per nulla, ma incluso per completezza.
-n: Questa opzione dovrebbe essere utilizzata solo se si sa cosa si sta facendo. Fa sì che lo strumento NON imposti la regola del firewall per eliminare tutti i pacchetti RST in uscita. Se utilizzata, lo scanner non farà fork e si ha la responsabilità di impostare questa regola manualmente, altrimenti il kernel invierà pacchetti RST per ogni pacchetto SYNACK ricevuto. Ciò renderà lo strumento semplicemente inutilizzabile. La regola così come viene impostata su Linux è la seguente:
$ /sbin/iptables -A OUTPUT -p tcp --tcp-flags RST RST -j DROP
-o: Questa opzione non esegue la reindirizzazione dell'I/O, quindi si vedrà più output degli interni di uinet. È aggiunta solo per completezza o per scenari di debug, poiché altrimenti non è molto utile.
-h: Le informazioni sull'utilizzo.
Alcuni esempi su come utilizzare lo strumento. Per eseguire un banner grab della porta 22 su una rete /24 utilizzare:
./pbscan -sB -p22 x.x.x.x/24
Per eseguire una scansione HTTP su diverse porte HTTP comuni per un singolo IP con output in modalità esadecimale utilizzare:
./pbscan -sH -x -p80,8080-9000 x.x.x.x
Durante la scansione, premendo un tasto sull'input standard verranno stampate alcune statistiche, come il numero di porte aperte identificate, il numero di ACK TCP validi ricevuti, il numero di connessioni attualmente attive e quante sonde SYN del totale sono già state inviate. Apparirà qualcosa come:
sent: 1.97% (of 254), open: 0, active: 2, acks: 2
AUTORE
Questo strumento è stato scritto da Vincent Berg. Contattatemi via email a [email protected] o visitate il mio sito web http://santarago.org per aggiornamenti/novità su questo scanner.
RINGRAZIAMENTI
Molto apprezzamento per diverse persone che hanno aiutato nei test, nel porting di questa bella applicazione e nella segnalazione di bug. Grazie a Ehab, Joseph, Alejandro, Julian e Diego.
RIFERIMENTI
[1] http://packetstormsecurity.com/files/30489/paketto-1.10.tar.gz.html