Nmap: uno “strumento hacker” per i professionisti della sicurezza
di Justin Hutchens
La nozione di “hacker etico” è sempre stata ironica. Le tendenze in via di sviluppo dell’hacking etico e della sicurezza offensiva hanno trasformato l’industria della sicurezza delle informazioni in una delle industrie più auto-perpetuanti al mondo.
Il software e gli strumenti utilizzati per proteggere le risorse informative vulnerabili sono gli stessi strumenti che possono essere utilizzati per sfruttarle. Forse è il contrario. Forse gli strumenti che sono stati creati al solo scopo di sfruttare le risorse informative vengono ora utilizzati per salvaguardarle. Suppongo che questo sia un dibattito che potrebbe andare avanti all’infinito ed è in realtà solo un altro esempio di ” cosa è venuto prima the la gallina o l’uovo?”
Lo scopo di questo saggio non è quello di discutere la questione filosofica dell’intento. Le mie intenzioni sono più modeste. Cerco semplicemente di giustificare l’importanza di uno strumento che è stato costantemente etichettato come software di hacking dannoso. Lo strumento a cui mi riferisco è Network Mapper, o nmap in breve. Che tu sia un agente canaglia impazzito che è intenzionato a incitare la rivoluzione globale o un professionista della sicurezza di rete (si spera che quest’ultimo, piuttosto che il primo), nmap dovrebbe avere un posto permanente nel tuo toolkit. Forse, invece di lanciare critiche a uno strumento di networking estremamente funzionale, dovremmo tenere gli individui responsabili delle loro azioni e riflettere sul noto avvertimento di Benjamin Parker…”con grande potere, arriva una grande responsabilità.”Nonostante alcune affermazioni contrarie, nmap non è un software dannoso. E penso che l’unica ragione per cui è spesso etichettato come tale è a causa della sua lista molto impressionante di capacità. Nonostante il suo potenziale di danneggiare, nmap può certamente svolgere un ruolo importante nella protezione di un’infrastruttura di rete all’interno di un ambiente professionale.
Nmap si è costantemente evoluta nel corso degli anni da una semplice utility di scansione a una piattaforma di test di penetrazione in piena regola. Può essere utilizzato in ogni fase del processo di controllo della sicurezza, per includere il rilevamento della rete, la scansione delle porte, l’enumerazione dei servizi, la mappatura delle vulnerabilità e persino lo sfruttamento. In questo articolo, discuterò le capacità di nmap in quanto riguardano ogni fase del processo di test di penetrazione.
Installazione e preparazione
Ovviamente, prima di utilizzare nmap, è importante avere una versione funzionale installata sul sistema che si sta utilizzando. Per impostazione predefinita, nmap è già installato sulla maggior parte dei sistemi operativi di test di penetrazione e sicurezza di rete come Kali-Linux, Backtrack, DEFT, Node-Zero, Security Onion e NST. Tuttavia, può anche essere caricato su quasi tutte le piattaforme di tua scelta. Nmap può essere facilmente installato su tutti i sistemi operativi comunemente utilizzati per includere Windows, Linux e OSX. C’è anche la documentazione disponibile per l’installazione su piattaforme più oscure per includere BSD, Solaris, AIX e AmigaOS. I pacchetti di installazione e le istruzioni su come eseguire l’installazione su uno di questi sistemi sono disponibili alla pagina http://nmap.org/book/install.html.
Zenmap – Interfaccia grafica
Oltre alla tradizionale interfaccia a riga di comando per nmap, c’è anche un’interfaccia grafica front-end chiamata Zenmap. Zenmap è anche integrato in molte delle diverse piattaforme di test di penetrazione precedentemente discusse. Tuttavia, non è installato di default in Kali-Linux (la piattaforma che userò per questo tutorial). Fortunatamente, è nel repository di installazione e può essere facilmente installato con un singolo comando:
apt-get install zenmap
Zenmap point-and-click, non solo in modo efficace semplifica ciò che altrimenti richiederebbero comandi complicati, ma può anche essere uno strumento estremamente utile per l’apprendimento dell’utilizzo di nmap. Utilizza “profili” per salvare le configurazioni di scansione comunemente utilizzate per modifiche e/o utilizzi successivi. Dai un’occhiata all’immagine dell’interfaccia Zenmap fornita in Figura 1 e affronteremo brevemente ciascuno dei componenti.
Figura 1. Interfaccia grafica Zenmap
Il primo componente è il campo di destinazione (Figura 1. Un). In questo campo è possibile specificare i sistemi remoti su cui si desidera eseguire una scansione. È possibile inserire un singolo indirizzo IP (ad esempio 192.168.1.1), è possibile immettere un intervallo sequenziale di indirizzi IP (ad esempio 192.168.1.0-255) oppure è possibile utilizzare la notazione CIDR per specificare una sottorete desiderata (ad esempio 192.168.1.0/24). Il secondo componente è il campo Profilo (Figura 1. B). È possibile fare clic sulla freccia a discesa a destra di questo campo per visualizzare diversi profili preconfigurati per la scansione. I profili consentono di salvare le configurazioni di scansione comunemente utilizzate per un uso futuro. È inoltre possibile creare profili dei propri e saranno poi visualizzati in questo elenco (discuteremo come farlo più avanti in questo articolo). Il terzo componente è il campo Comando (Figura 1. C). Questo campo indicherà il comando che verrà inviato al backend. Per avviare il comando che appare in questo campo, è sufficiente fare clic sul pulsante Scansione. È possibile modificare direttamente il valore in questo campo; tuttavia, verrà popolato automaticamente in base ai valori del campo di destinazione e del profilo selezionato. Se siete nuovi a nmap, si dovrebbe prestare molta attenzione a questo campo, in quanto vi fornirà una migliore comprensione della sintassi appropriata e l’uso di diversi comandi nmap. Il quarto componente è l’elenco Host / Servizio (Figura 1. D). Una volta eseguite le scansioni, le informazioni verranno popolate in questo elenco. Se è selezionato il pulsante Hosts, verranno elencati tutti gli indirizzi IP host rilevati. E se hai selezionato il pulsante Servizi, tutti i servizi di rete scoperti verranno elencati. Il componente finale (Figura 1. E) è dove è possibile ordinare tutte le informazioni che sono state prodotte da tutte le scansioni eseguite. La scheda Output Nmap visualizzerà l’output esatto che sarebbe stato fornito se il comando fosse stato immesso dall’interfaccia della riga di comando. Il contenuto della scheda Porte/host varierà a seconda che il pulsante Host o Servizi sia selezionato per l’elenco. Se il pulsante Hosts è selezionato, le informazioni nella scheda Porte / Hosts rifletteranno i servizi identificati nell’indirizzo IP attivamente evidenziato nell’elenco. In caso contrario, se il pulsante Servizi è selezionato, le informazioni nella scheda Porte/host identificheranno tutti gli host che sono stati trovati per avere il particolare servizio che è evidenziato nell’elenco. La scheda topologia fornisce una rappresentazione grafica della topologia logica della rete, per includere tutti gli host che sono stati scoperti dalla scansione. Utilizzerà i valori TTL (Time-To-Live) restituiti per visualizzare l’orientamento logico degli host, l’uno rispetto all’altro. La scheda Dettagli host è dove si trova la maggior parte delle informazioni che sono state scoperte su un host selezionato. Queste informazioni includono indirizzi MAC, indirizzi IP, porte aperte, servizi identificati, informazioni sul sistema operativo e qualsiasi informazione aggiuntiva che è stata raccolta. Infine, la scheda scansioni fornirà una cronologia delle scansioni eseguite durante la sessione.
Nella parte superiore dello schermo vedrai diversi menu a discesa per includere Scansione, Strumenti, Profilo e Aiuto. Il menu Aiuto è auto-esplicativo. Il menu Scansione contiene opzioni per creare nuove scansioni, salvare scansioni o aprire scansioni salvate in precedenza. Il menu Strumenti fornisce alcune funzioni aggiuntive che possono essere utilizzate per ordinare e organizzare le informazioni raccolte durante le scansioni. E il menu Profilo fornisce opzioni per creare nuovi profili di scansione o modificare i profili esistenti.
Ora discuteremo brevemente come creare un nuovo profilo e quindi avviare una scansione utilizzando quel profilo. Per iniziare, selezionare il menu a discesa Profilo e quindi selezionare ” Nuovo profilo o comando.”Questo aprirà un’interfaccia di configurazione del profilo che può essere visto in Figura 2.
Figura 2. Zenmap Profile Editor
La prima scheda (Scheda profilo) consente di creare un nome e una descrizione univoci per il profilo. Tutte le altre schede sono dove si specificheranno diverse configurazioni che verranno utilizzate nella scansione. Come si può vedere nella scheda Scansione visualizzata in Figura 2, la creazione di un profilo di scansione è semplice come selezionare le caselle per le opzioni che si desidera abilitare, l’immissione di valori in modo che tali opzioni possono essere utilizzate in modo efficace, o selezionando da scelte predefinite nel menu a discesa. Se non sei sicuro della funzione o dell’uso appropriato di qualsiasi opzione qui, puoi passarci sopra con il mouse e la colonna della guida sul lato destro dello schermo verrà automaticamente popolata con informazioni su ciò che fa l’opzione specifica e valori e sintassi appropriati per tutti i campi di input richiesti. Con ogni piccola regolazione apportata alla configurazione di scansione, il campo comando in alto viene regolato di conseguenza. Questa caratteristica rende Zenmap uno strumento estremamente efficace per imparare a utilizzare correttamente i comandi nmap. Dopo aver configurato le opzioni di scansione a proprio piacimento, è possibile selezionare il pulsante di scansione in alto a destra dello schermo per uso singolo, oppure è possibile selezionare Salva modifiche in basso a destra. Il pulsante Salva modifiche salverà il profilo con il nome fornito nella prima scheda configurazioni e può quindi essere utilizzato immediatamente o in un secondo momento selezionandolo per nome dal menu a discesa Profilo sull’interfaccia Zenmap principale. Sebbene Zenmap sia molto potente, non dovresti permettergli di diventare una stampella che ti impedisce di imparare le funzioni della riga di comando di nmap. Sebbene Zenmap possa eseguire molte delle stesse funzioni, ha ancora i suoi limiti e non è potente come nmap. Per utilizzare nmap in modo efficace e al suo pieno potenziale, è importante acquisire familiarità con l’interfaccia a riga di comando.
Network Discovery
Il primo passo nel processo di test di penetrazione che ci accingiamo a discutere è network discovery. Prima di valutare la sicurezza dei sistemi informativi su una rete, è necessario identificare ciò che si sta valutando. Esistono diversi modi in cui è possibile scoprire gli host su una rete utilizzando nmap. In questa sezione, discuteremo come utilizzare nmap per eseguire la scoperta dell’host ai livelli 2, 3 e 4 del modello O e discuteremo anche i vantaggi e gli svantaggi di ciascuno. Un esempio di comando per eseguire il rilevamento del livello 2 può essere visto qui:
nmap-PR-sn 192.168.1.0-255
L’opzione -PR
specifica un ping ARP. Questo utilizza i pacchetti ARP (Address Resolution Protocol) di livello 2 per identificare gli host live all’interno dell’intervallo specificato. Lo fa inviando una richiesta di trasmissione ARP per ciascuno degli indirizzi IP identificati. Se sulla rete è presente un host live con uno di questi indirizzi IP, tale host invierà una risposta ARP al sistema di scansione con il suo indirizzo IP e il suo corrispondente indirizzo MAC layer 2. Nmap raccoglierà le risposte da tutti gli host dal vivo e quindi restituirà un elenco di host che sono stati scoperti. Lo switch -sn
viene utilizzato per richiedere a nmap di non eseguire alcuna scansione delle porte. Ciò impedisce la trasmissione di qualsiasi traffico aggiuntivo, oltre a quanto necessario per eseguire lo sweep di rilevamento host layer 2. Layer 2 discovery è efficace perché è la più veloce di tutte e tre le opzioni. Tuttavia, è limitato dal fatto che può essere eseguito solo su host che si trovano sulla stessa rete locale del sistema che sta eseguendo la scansione.
Per gli host remoti, è necessario utilizzare il rilevamento layer 3 o layer 4. Un esempio di comando che può essere utilizzato per eseguire il rilevamento del livello 3 è:
nmap-PE-sn 109.74.11.0-255
Questo comando invierà una serie di richieste ICMP echo a ciascun indirizzo IP del livello 3 nell’elenco. Nmap raccoglierà tutte le risposte ICMP echo ricevute e restituirà un elenco di tutti gli host live. Questa scansione di rilevamento è più lenta rispetto all’esecuzione di un ping ARP, ma restituirà risultati per gli host su reti remote.
Infine, supponiamo che si stia tentando di scoprire i sistemi remoti (quindi non è possibile utilizzare il livello 2) che si trovano dietro un firewall che elimina tutto il traffico ICMP in arrivo (quindi non è possibile utilizzare il livello 3). Per risolvere questo problema, è necessario eseguire il rilevamento al livello di trasporto (livello 4). Esistono diversi modi in cui è possibile utilizzare le scansioni di livello 4 per eseguire il rilevamento. Un metodo efficace sta usando un ping UDP. Un esempio di un comando ping UDP è:
nmap-PU53-sn 109.74.11.0-255
Questo comando genera una serie di richieste di stato del server DNS per ciascuno degli indirizzi IP di destinazione. Una serie di risposte di query DNS verranno ricevute dagli host dal vivo e nmap restituirà questi risultati. Poiché il DNS è un servizio comunemente utilizzato sulla porta UDP 53, è possibile identificare ulteriori host live utilizzando questa tecnica che potrebbero essere stati configurati per non rispondere al traffico ICMP. Un altro strato efficace 4 alternativa a ICMP ping sweeps è quello di utilizzare un TCP ACK ping. Un esempio di questo può essere visto sotto:
nmap-PA80-sn 109.74.11.0-255
Questo comando invierà una serie di risposte ACK non richieste alla porta specificata per tutti gli host nell’intervallo IP. Poiché questi pacchetti ACK erano fuori dal contesto di qualsiasi linea di comunicazione stabilita, gli host live risponderanno con un pacchetto TCP RST per indicare che la comunicazione dovrebbe essere interrotta. Nmap raccoglierà queste risposte come indicazione degli host dal vivo e ne restituirà un elenco.
Scansione delle porte ed enumerazione dei servizi
Ora che abbiamo scoperto gli indirizzi IP attivi sulla rete su cui stiamo eseguendo un test di penetrazione, dobbiamo identificare le porte aperte su ciascun sistema e i servizi in esecuzione su quelle porte. La scansione delle porte TCP sui sistemi remoti è la funzione più basilare di nmap. Per eseguire una scansione TCP di un sistema di destinazione, utilizzare il comando di base:
nmap 109.74.11.34
Come altri comandi nmap, questo può essere utilizzato anche per eseguire scansioni contro più host utilizzando una serie sequenziale (192.168.1-255) o notazione CIDR (192.168.1.0/24). Questo comando nmap standard esegue una scansione su 1000 porte TCP comunemente utilizzate. In alternativa, è possibile specificare una singola porta da scansionare utilizzando l’opzione-p seguita dal numero di porta che si desidera scansionare.
nmap 109.74.11.34-p 21
Questo comando precedente esegue la scansione della porta TCP 21 sul sistema specificato. È anche possibile eseguire la scansione di una serie di porte utilizzando l’interruttore-p e quindi elencare le porte desiderate, separandole con virgole.
nmap 109.74.11.34-p 80,443
Questo comando esegue la scansione delle porte 80 e 443 sul sistema di destinazione. È possibile eseguire la scansione di un intervallo sequenziale di porte utilizzando l’opzione -p
seguita dal primo valore nell’intervallo, un trattino e quindi dall’ultimo valore nell’intervallo.
nmap 109.74.11.34-p 0-100
Il comando precedente esegue la scansione delle prime 100 porte. Per eseguire la scansione di tutte le 65.536 porte TCP su una destinazione, utilizzare il seguente comando:
nmap 109.74.11.34-p 0-65535
È possibile utilizzare una scansione TCP ACK per identificare le porte filtrate. Per fare ciò, utilizzare l’interruttore-sA. È quindi possibile specificare una porta o una serie di porte. Nessuna specifica porta eseguirà la scansione delle porte standard 1,000. Questo restituirà quindi un elenco di porte filtrate. Un esempio di questo comando può essere visto di seguito:
nmap 109.74.11.34-sA
I penetration tester e i professionisti della sicurezza a volte scansionano solo le porte TCP aperte sui sistemi di destinazione. Trascurare i servizi UDP può far trascurare completamente le vulnerabilità evidenti che potrebbero facilmente portare a compromessi. Per cercare i servizi UDP su un sistema di destinazione, utilizzare il seguente comando:
nmap 109.74.11.34-sU
Poiché i servizi UDP non sono orientati alla connessione nello stesso modo in cui sono i servizi TCP, ciò richiederà più tempo di una tipica scansione TCP. Il tempo necessario per completare le scansioni UDP può essere ridotto scansionando porte specifiche. È possibile specificare le porte nello stesso modo in cui si era con le scansioni TCP.
nmap 109.74.11.34-sU-p 69
Il comando precedente esegue una scansione della porta UDP 69, una porta comunemente usata per TFTP (Trivial File Transport Protocol). È anche possibile identificare la versione e il numero di versione per ogni particolare servizio. Per fare ciò, utilizzare l’interruttore-sV.
nmap 109.74.11.34-sV
Questo comando utilizzerà una combinazione di banner grabbing e probe-response analysis per tentare di identificare il servizio e il numero di versione di quel servizio per ogni porta scansionata. Utilizzando tecniche simili, è anche possibile che nmap tenti di determinare il sistema operativo in esecuzione sulla destinazione. Per fare ciò, utilizzare l’opzione -O
.
nmap 109.74.11.34-O
Una volta completato, restituirà un’identificazione positiva del sistema operativo o darà una migliore ipotesi e quindi un elenco di altri possibili sistemi operativi.
Tecniche di scansione avanzate
C’è un problema comune che si incontra spesso quando si esegue un test di penetrazione contro le reti aziendali di medie e grandi dimensioni. La maggior parte delle aziende e organizzazioni in questi giorni sono diventati più di sicurezza-minded e probabilmente hanno firewall o sistemi di rilevamento delle intrusioni in piedi tra voi ei sistemi che si sta tentando di eseguire la scansione. Per eseguire la scansione di tali sistemi, avremo bisogno di impiegare alcune tecniche di scansione più avanzate. Un modo per bypassare potenzialmente firewall e / o sistemi di rilevamento delle intrusioni è quello di utilizzare alcune tecniche di scansione stealth tradizionali che sono integrati in nmap. Un metodo che può essere impiegato è quello di utilizzare un modello di temporizzazione più lento. I modelli di temporizzazione vanno da -T0
(paranoid scan) fino a -T5
(Insane scan). Più basso è il valore del modello di temporizzazione, più lenta sarà la scansione. Le scansioni più lente hanno meno probabilità di essere contrassegnate dai sistemi di rilevamento delle intrusioni. Un esempio di scansione paranoica potrebbe essere:
nmap 109.74.11.0-255-T0
Un’altra tecnica che può essere utilizzata per mascherare la scansione è quella di inondare la rete con traffico di richiamo aggiuntivo utilizzando lo switch -D
. Questa funzione vi permetterà di specificare più indirizzi per falsificare il traffico da o è possibile utilizzare l’opzione RND per falsificare il traffico da indirizzi casuali.
nmap 109.74.11.0-255-D RND:5
Oltre a eseguire la tradizionale scansione della porta TCP dei sistemi di destinazione, il comando sopra riportato falsificherà anche il traffico da 5 indirizzi casuali per offuscare il traffico di scansione effettivo. Un’altra tecnica che può essere utilizzata è quella di variare la lunghezza del pacchetto delle richieste trasmesse. Alcuni sistemi di rilevamento delle intrusioni e firewall cadranno pacchetti in base alla lunghezza dei pacchetti di firma. Per evitare ciò, è possibile specificare la lunghezza dei dati utilizzando l’opzione --data-length
seguita dalla dimensione del pacchetto in numero di byte.
nmap 109.74.11.0-255 data data-length 15
Questo comando invierà tutto il traffico di scansione in pacchetti lunghi 15 byte. Anche se questo potrebbe essere utile per evitare alcuni sistemi di rilevamento delle intrusioni basati su firme, l’invio coerente di pacchetti di una lunghezza di pacchetto specificata insolita potrebbe contrassegnare un sistema di rilevamento delle intrusioni basato su anomalie. I sistemi di rilevamento delle intrusioni di rete segnalano anche il traffico se si inizia a connettersi in sequenza a sistemi all’interno di un intervallo di rete specificato. Per evitare di eseguire le scansioni in sequenza, è possibile utilizzare l’opzione --randomize-hosts
.
nmap 109.74.11.0-255 random randomize-hosts
Questo comando sopra analizzerà casualmente ogni host nell’intervallo invece di eseguirlo in sequenza (109.74.11.0, quindi 109.74.11.1, quindi 109.74.11.2, ecc.). Anche se non puoi falsificare il tuo indirizzo IP (perché non riceverai le risposte necessarie per determinare le porte aperte), puoi falsificare il tuo indirizzo MAC. Per fare ciò, è possibile utilizzare l’opzione spoo spoof-mac, seguita da un ID fornitore, un indirizzo MAC specifico o 0.
nmap 109.74.11.0-255 spoo spoof-mac 0
L’utilizzo di 0 come argomento applicherà un indirizzo MAC casuale al traffico di scansione. Un’ultima tecnica che vale la pena menzionare è l’utilizzo dell’interruttore-f per i pacchetti di frammenti.
nmap 109.74.11.0-255-f
La frammentazione dei pacchetti separerà i payload di dati del traffico di scansione in più pacchetti, consentendo di bypassare più facilmente i sistemi di rilevamento delle intrusioni di ispezione dei contenuti o i firewall. Mentre tutte queste tecniche possono essere efficaci per la scansione di server accessibili pubblicamente dietro un firewall, di solito non sono sufficienti per la scansione di host su una rete interna. Mentre alcuni server accessibili al pubblico saranno disponibili per la scansione, gran parte dell’infrastruttura interna sarà più profonda all’interno della rete e non così facilmente accessibile. Si consideri il diagramma in Figura 3. Questo è un semplice esempio di configurazione comune nelle reti aziendali.
Figura 3. Configurazione di rete comune
Il problema che incontriamo qui è che la rete interna si trova dietro un firewall interno, che ha regole più severe sul traffico di ingresso, rispetto al firewall esterno. Questo firewall interno probabilmente blocca il traffico in entrata da indirizzi remoti sul Web; tuttavia, è possibile che i sistemi nella DMZ possano comunicare con i sistemi interni. Per poter eseguire la scansione di questi sistemi interni, dobbiamo far funzionare i sistemi nella DMZ per nostro conto. Discuteremo diversi modi per farlo, per includere la scansione proxy, la scansione zombie e la scansione di rimbalzo FTP.
Probabilmente il modo più semplice per eseguire la scansione dei sistemi interni è utilizzando una catena proxy. Supponiamo di aver acquisito l’accesso a un servizio proxy all’interno della DMZ individuando un servizio proxy ad accesso aperto, forzando bruto un servizio proxy con hydra o installando un servizio proxy su una macchina già compromessa. Una volta configurato il sistema per instradare il traffico attraverso quel proxy, è possibile eseguire scansioni nmap utilizzando una scansione completa della connessione (-sT
).
nmap 10.1.1.0-255-sT
Se non è disponibile alcun servizio proxy, esistono alcuni modi intelligenti per sfruttare le macchine all’interno della DMZ per ottenere risultati di scansione sui sistemi interni. Un modo per farlo è quello di utilizzare la scansione zombie, noto anche come scansione inattiva. Al fine di eseguire una scansione zombie contro i sistemi sulla LAN interna, dobbiamo trovare un host zombie praticabile all’interno della DMZ. Un host zombie è un sistema relativamente inattivo che utilizza il sequenziamento IPID incrementale. Al fine di individuare un host zombie, possiamo usare uno script nmap per eseguire la scansione del DMZ per un sistema che si adatta a questa descrizione.
nmap ip script ipidseq 109.74.11.0-255
Questo script invierà una serie di pacchetti a ciascun host e traccerà i numeri IPID per tutte le risposte ricevute. Sarà quindi analizzare questi numeri IPID per classificare ogni sistema sia come sequenza casuale, tutti gli zeri, o incrementale. Vedere Figura 4 per un esempio di output per un sistema incrementale.
Figura 4. Zombie host trova con IPID Sequenza Script
Una volta che abbiamo acquisito un indirizzo IP per il nostro sistema di zombie, siamo pronti a tentare la nostra scansione zombie. Prima di affrontare come eseguire la scansione, discuterò brevemente come funziona la scansione. Fare riferimento alla Figura 5 per un diagramma di ciò che avviene quando viene eseguita una scansione zombie contro una porta aperta.
Figura 5. Scansione zombie contro porta aperta
Innanzitutto, il nostro scanner nmap determina il valore IPID corrente del sistema zombie inviando un pacchetto SYN/ACK non richiesto. Poiché nessun pacchetto SYN è stato originariamente inviato dal sistema zombie per stabilire una connessione, lo zombie risponde al nostro scanner con un primo pacchetto. Il nostro sistema di scansione utilizzerà quindi l’IPID del pacchetto RST come punto di riferimento. Quindi, il nostro sistema di scansione seguirà immediatamente questo con un pacchetto SYN falsificato inviato al sistema di destinazione utilizzando un indirizzo IP di origine del sistema zombie. Poiché l’indirizzo IP di origine è uno all’interno della DMZ, è più probabile che questa richiesta di connessione possa passare attraverso il firewall. Se il target riceve il pacchetto e la porta di destinazione è aperta, il target restituirà un pacchetto SYN / ACK al sistema zombie (chi pensa abbia inviato il pacchetto SYN originale). Poiché questo pacchetto SYN/ACK viene ricevuto fuori contesto, il sistema zombie risponderà al sistema di destinazione con un pacchetto RST, incrementando così il suo valore IPID di uno. Infine, il nostro scanner invierà un ultimo pacchetto SYN/ACK al sistema zombie. La successiva PRIMA risposta dallo zombie incrementerà l’IPID ancora una volta. Quindi, se la porta di destinazione sul sistema remoto è aperta, il valore IPID finale restituito sarà due numeri superiore al valore originale. In alternativa, la figura 6 illustra cosa avviene quando la porta del sistema di destinazione è chiusa.
Figura 6. Scansione zombie contro porta chiusa
Se la porta sul sistema di destinazione è chiusa, il sistema zombie non riceve alcuna risposta non richiesta dal target e quindi non viene istigato a inviare un primo pacchetto al target. Quindi, se il valore IPID della prima risposta finale è aumentato solo di uno, possiamo dedurre che la porta è chiusa perché nessuna risposta SYN/ACK è stata inviata al sistema zombie per istigare una PRIMA risposta. Altrimenti, se il valore IPID finale è aumentato di due rispetto al valore originale, possiamo dedurre che la porta sul sistema di destinazione deve essere aperta perché deve aver risposto allo zombi che ha istigato la risposta che ha incrementato il valore IPID del sistema zombi.
Mentre questo può sembrare estremamente complicato; non farti intimidire dalla descrizione, poiché nmap fa quasi tutto il lavoro per te. Per eseguire effettivamente una scansione zombie, devi solo inserire un semplice comando.
nmap-Si 192.168.199.132-Pn 192.168.199.130
L’opzione -sI
indica a nmap di eseguire una scansione zombie utilizzando il seguente indirizzo IP come host zombie (192.168.199.132). L’opzione -Pn
impedisce a nmap di eseguire un ping ICMP iniziale sul sistema di destinazione prima di tentare la scansione. Quindi, l’indirizzo IP finale nel comando identifica il sistema di destinazione. L’output per questo comando può essere visto in Figura 7.
Figura 7. Scansione zombie contro porta chiusa
Va notato che l’intervallo IP che ho usato per dimostrare questa scansione zombie è un intervallo privato sulla mia rete interna. Affinché ciò funzioni efficacemente contro una rete remota, come descritto nello scenario originale, i sistemi sia nella DMZ che nella rete interna devono essere su intervalli IP instradabili pubblicamente. Se la rete interna è configurata su un intervallo privato dietro un server NAT (Network Address Translation), lo scanner nmap non sarà in grado di inviare il pacchetto SYN contraffatto all’indirizzo interno dalla sua posizione remota.
Un altro modo per utilizzare i sistemi all’interno della DMZ per tentare di eseguire la scansione degli host sulla rete interna è utilizzare il bounce FTP. Alcuni server FTP legacy supportano la capacità di trasmettere file a un sistema di terze parti. Se hai scoperto un server FTP nella DMZ che consente l’accesso anonimo o che hai forzato brute con hydra, puoi testare il server FTP per determinare se supporta il rimbalzo FTP. Per fare ciò, utilizzare lo script ftp-bounce.
nmap ftp script ftp-bounce
ftp-bounce.username = anonimo,
Questo comando utilizza lo script nmap con gli argomenti username e password contro il server FTP. Una volta completata, questa scansione indicherà se il rimbalzo FTP è possibile o meno. Se lo script indica che il bounce FTP funziona, è possibile utilizzare il server FTP per eseguire una scansione delle porte contro altri sistemi sulla rete. Figura 8 illustra come funziona.
Figura 8. FTP bounce scan
Lo scanner tenterà di inviare dati binari, tramite la funzione FTP bounce, al sistema di destinazione in una porta designata. Se i dati vengono trasmessi, il server FTP lo riporterà allo scanner, indicando che la porta sul sistema di destinazione è aperta. Per eseguire una scansione di rimbalzo FTP, utilizzare l’opzione -b
.
nmap-b ftpuser:: 21 10.1.1.128-255
In questo comando, la funzione -b
viene utilizzata per eseguire una scansione di rimbalzo ftp utilizzando il nome utente “ftpuser” e la password PassW0rd
, contro il server FTP su 192.168.11.201 ospitato sulla porta TCP 21. Le azioni descritte nel diagramma sopra verranno quindi eseguite contro ciascuna delle porte 1000s comuni su ciascuno degli host di destinazione da 10.1.1.128 a 10.1.1.255.
Mappatura e sfruttamento delle vulnerabilità con NSE
Una volta scoperti gli host live sulla rete di destinazione e riusciti a enumerare le porte aperte e/o i servizi in esecuzione su tali host, è possibile iniziare a testare e sfruttare le vulnerabilità. Con il nuovo NSE integrato (Nmap Scripting Engine), ci sono un certo numero di script precaricati che vengono forniti con l’installazione standard di nmap. Questi script hanno una vasta gamma di funzioni diverse dalla raccolta di informazioni di base (come i due che abbiamo già discusso), mappatura delle vulnerabilità, forzatura bruta, denial of service e persino sfruttamento remoto. Tutti questi script si trovano nella directory di installazione di nmap. In Kali-Linux, possono essere trovati a /usr/share/nmap/scripts/
. Per accedere a questi script e iniziare a lavorare con essi, utilizzare i seguenti comandi:
cd /usr/share/nmap/scripts/
ls
Il comando cd
cambierà la directory nella posizione degli script NSE e il comando ls
visualizzerà il contenuto della directory. È quindi possibile visualizzare uno qualsiasi degli script utilizzando il comando cat
, seguito dal nome dello script che si desidera visualizzare. Ai fini di questa dimostrazione, useremo ftp-vuln-cve2010-4221.nse
. Per visualizzare il contenuto di questo script, utilizzare il seguente comando:
cat ftp-vuln-cve2010-4221.nse
Figura 9. NSE script contents
Figura 9 visualizza il contenuto di questo script. Se si passa alla parte superiore del contenuto dello script, vedrete diversi pezzi di informazioni utili per includere una descrizione dello script, un elenco di risorse aggiuntive per riferimento, e l’uso appropriato e la sintassi dello script. Tuttavia, l’ordinamento di questi script nella directory e l’individuazione di uno script che esegue una funzione specifica può essere molto noioso. A mio parere, questo è dove Zenmap (l’interfaccia grafica che avevamo precedentemente discusso) brilla davvero. Per dimostrare quanto sia utile l’interfaccia Zenmap quando si lavora con gli script NSE, aprirla nuovamente dalla riga di comando con il comando:
zenmap
Quindi selezionare il menu a discesa Profilo e fare clic su “Nuovo profilo o comando.”Dopo l’editor del profilo si apre, scegliere la scheda Scripting nella parte superiore dello schermo. Figura 10 visualizza un’immagine dell’interfaccia di scripting Zenmap.
Figura 10. Zenmap Scripting Interface
Un elenco di tutti gli script nmap disponibili si trova sul lato sinistro dello schermo. È possibile selezionare uno di questi per averlo incluso nel comando nmap. Alcuni script richiedono argomenti per poter essere eseguiti correttamente. Gli script di autenticazione post richiedono spesso un nome utente e una password per specifici servizi di rete. Nell’esempio in Figura 10, gli argomenti possono essere forniti per configurare l’attacco di forza bruta che deve essere eseguito contro il servizio MySQL. È inoltre possibile passare facilmente gli argomenti dello script inserendo i valori nella finestra Argomenti. Questi argomenti verranno popolati automaticamente nel comando nmap generato. La finestra in alto al centro fornisce una descrizione dello script selezionato, l’uso appropriato e la sintassi, e anche le categorie per descrivere le funzioni dello script. Queste categorie possono essere particolarmente utili se si sta tentando di eseguire un tipo specifico di attività, ad esempio l’analisi delle vulnerabilità. Dopo aver avviato uno script NSE con un comando nmap, vedrai i risultati nell’output nmap standard. Nel caso di script di forza bruta, l’output mostrerà se l’attacco di forza bruta ha avuto successo e, in tal caso, mostrerà il nome utente e la password scoperti. Nel caso di script di vulnerabilità, l’output indicherà se la vulnerabilità è presente sui sistemi di destinazione. E nel caso degli script di sfruttamento, l’output fornirà informazioni sul carico utile che è stato successivamente consegnato al sistema di destinazione.
Scripting con Nmap
Oltre al proprio motore di scripting integrato, nmap supporta anche diverse opzioni di output che lo rendono facile da usare linguaggi di scripting tradizionali per l’esecuzione di analisi di output. Due formati di output che possono essere utili per lo scripting includono l’output greppable (-oG
) e l’output XML (-oX
). XML può essere efficace per i linguaggi di scripting di livello superiore che hanno moduli che possono essere importati per l’analisi XML e l’output greppable può essere utilizzato in combinazione con lo scripting della shell bash per semplificare l’analisi dei risultati nmap. Per dimostrare come questa funzione di output potrebbe essere utilizzata in combinazione con lo scripting, esamineremo un semplice script di shell bash a 4 righe, visualizzato in Figura 11 per analizzare i risultati di una scansione nmap.
Figura 11. Nmap Result Analysis Bash Script
Si consideri uno scenario in cui una scansione nmap è stata già eseguita su una rete molto grande e l’output della scansione è stato salvato in formato greppable in un networkscan.file txt. E supponiamo che vogliamo usare hydra per eseguire un attacco di forza bruta contro tutti i servizi FTP sulla rete, ma non vogliamo sprecare il tempo che sarebbe necessario per eseguire nuovamente la scansione della porta 21 sull’intera rete. Questo semplice script estrarrà tutti i sistemi che hanno una porta specificata aperta. La prima riga richiede all’utente un numero di porta. La seconda riga assegna quindi il valore dell’input dell’utente alla variabile “porta”. La terza riga indica all’utente che verranno elencati tutti i sistemi con quella porta aperta. E infine, l’ultimo comando è dove abbiamo grep fuori i risultati dall’output greppable nmap. Lo script utilizza il comando grep per estrarre tutte le righe dal file di output che fanno riferimento alla porta specificata. Ciò includerà linee che enumerano ogni istanza di dove la porta è aperta, chiusa o filtrata. Quindi, convoglia l’output su un’altra funzione grep che estrae solo le istanze in cui la porta specificata è aperta. Questo output viene quindi convogliato alla funzione taglia, che specifica un carattere di spazio come delimitatore e quindi emette il secondo campo. In questo modo, il nostro script emette quindi l’indirizzo IP per ogni sistema che ha la porta specificata aperta. Figura 12 visualizza l’output dello script.
Figura 12. Nmap Result Analysis Script Output
Sebbene questo sia uno script molto semplice, dimostra quanto sia facile estrarre informazioni dal formato di output greppable. Una volta acquisite, queste informazioni raccolte potrebbero essere facilmente utilizzate per ulteriori script. Potrebbe essere usato come punto di partenza per eseguire qualche altra attività successiva contro ogni sistema che è stato identificato per avere una porta specifica aperta.
Uno strumento di test di penetrazione All-In-One
Combinando le sue diverse capacità, si potrebbe facilmente eseguire un test di penetrazione completo utilizzando nmap da solo. Non si può negare che nmap, con la sua impressionante lista di funzioni e capacità, è uno strumento veramente potente. E con il progredire degli anni, probabilmente diventerà ancora più potente man mano che sempre più persone continueranno a contribuire a questo progetto. Come un bambino con la pistola di suo padre, nmap può essere uno strumento pericoloso nelle mani sbagliate. Ma se usato correttamente, può essere una risorsa inestimabile per garantire la sicurezza dell’infrastruttura di rete. Quindi ricorda sempre di usarlo saggiamente e di usarlo bene.
Circa l’autore
Justin Hutchens attualmente esegue analisi delle vulnerabilità di rete, rilevamento delle intrusioni e digital forensics per una grande rete aziendale con oltre 33.000 sistemi in rete. Ha ricoperto numerosi ruoli diversi nel campo della tecnologia dell’informazione per includere la progettazione della rete, lo sviluppo del sistema, l’amministrazione del database e la sicurezza della rete. Attualmente insegna anche corsi sui test di penetrazione con i sistemi operativi Backtrack e Kali-Linux. Attualmente ha conseguito una laurea in Information Technology e molteplici certificazioni professionali tra cui CISSP (Certified Information System Security Professional), CEH (Certified Ethical Hacker), ECSA (EC-Council Certified Security Analyst) e CHFI (Computer Hacking Forensic Investigator).