Perché il port scanning contribuisce alla sicurezza del vostro sistema

Le porte sono in gran parte responsabili del fatto che i pacchetti trovino la loro strada per giungere alla destinazione desiderata. Svolgono la funzione di interfacce tra computer e servizi di sistema o programmi e vengono utilizzate dai protocolli di rete TCP e UDP. In combinazione con l’indirizzo IP il sistema operativo sa, grazie all’indicazione della porta, non solo a quale computer di destinazione inviare il flusso di dati, ma anche a quale applicazione deve trasmettere i pacchetti.

Cosa c’è da sapere sulle porte

A ogni porta viene assegnato un numero da 0 a 65535, ma in questo intervallo ci sono tre sezioni tra cui distinguere:

  • Le porte da 0 a 1023 rientrano tra le porte standard, attribuite per la maggior parte a protocolli e servizi fissi dall’Internet Assigned Numbers Authority (IANA). Così ad esempio la porta 80 è riservata alle connessioni HTTP e perciò risulta la porta decisiva per i web server.
  • I numeri delle porte che vanno da 1024 a 49151 sono di norma previsti per i servizi registrati, ma vengono anche assegnati ai client (in particolare dal sistema Linux).
  • Le porte da 49152 a 65535 vengono assegnate dinamicamente ai client dai sistemi operativi.

Per instaurare una connessione da una porta precisa, è necessario che sia aperta, quindi attivata. In particolare, per il trasferimento dei dati su Internet, ciò si traduce logicamente in un’elevata quantità di porte aperte, cosa che porta con sé alcuni problemi: ogni porta aperta costituisce un potenziale accesso per gli hacker, nel caso in cui la rispettiva applicazione presenti delle falle di sicurezza. Per questo motivo dovreste sempre tenere a mente quali porte sono aperte sul vostro sistema e quali applicazioni si nascondono dietro al traffico dati corrente. Così i port scanner risultano dei mezzi affermati con i quali si rilevano le porte attivate.

Che cos’è il port scanning?

Con il termine port scanning si intende il procedimento mirato di verifica delle porte aperte di un computer grazie a dei tool specifici. Per eseguire una scansione simile, non dovete essere loggati sul sistema di destinazione, ma solo esservi connessi, ad esempio tramite una rete locale o via Internet. Grazie ai port scanner inviate in fase di test dei pacchetti specifici alle diverse porte e ottenete le relative risposte o messaggi di errore, che il tool analizza e valuta.

A seconda della varietà di funzioni del programma di scansione utilizzato ricevete così non solo informazioni riguardo alle porte aperte o chiuse, ma scoprite anche quale sistema operativo è utilizzato sul computer di destinazione, da quanto tempo il PC è stato attivato o quali porte utilizzano i relativi servizi e applicazioni.

Il port scanning rappresenta per gli amministratori di sistema un mezzo molto efficiente per controllare il traffico dati in una rete e rilevare eventuali vulnerabilità. In alcuni casi si possono così risolvere problemi di rete concreti. Visto che i tool non hanno nessun effetto percepibile sulla performance dei sistemi indagati, potete utilizzarli facilmente per intraprendere tali misure di sicurezza.  Anche sul proprio PC personale ha senso impiegare un port scanner: non appena installate e utilizzate le applicazioni, che richiedono una connessione a Internet, vengono aperte automaticamente anche le porte, a patto che non venga impedito dal vostro firewall. Un port scan vi aiuta a mantenere il controllo e vi mostra le porte non più necessarie, che potete di conseguenza chiudere per minimizzare il rischio per la sicurezza.

Come funziona esattamente il port scanning?

I port scanner offrono di norma diverse tipologie di funzionamento, anche se la maggior parte si muovono intorno al protocollo TCP orientato alla connessione. Per comprendere i procedimenti essenziali durante il port scanning, è perciò utile dare uno sguardo all’instaurazione della connessione TCP generale:

  • Nell’ambito del processo denominato three-way handshake, il client invia prima di tutto un pacchetto SYN (dal verbo synchronize = “sincronizzare“) alla relativa porta di destinazione.
  • Se raggiunge in questo modo un’applicazione, riceve come risposta un pacchetto SYN/ACK combinato (dai verbi synchronize e acknowledge = “sincronizzare e confermare“) e questo conferma l’accettazione della connessione.
  • Il client invia nella terza e ultima parte un pacchetto ACK (dal verbo acknowledge = “confermare“), di modo che la connessione venga instaurata e che possa cominciare lo scambio dati.

Se viene contattata una porta chiusa, il client riceve in risposta nel secondo passaggio un pacchetto RST (dal verbo reset = “resettare“) e quindi l’handshake viene interrotto.

Visto che da una parte risulterebbe molto faticoso e dall’altra sarebbe molto complesso scambiare i dati con i diversi tipi di applicazione, il port scanning è limitato solo a semplici tentativi di connessione, come dimostrano i metodi di scansione comuni presentati qui di seguito.

TCP SYN scan

Nel caso del TCP SYN scan si parla spesso anche di una scansione semi-aperta, perché non si mira a instaurare una connessione TCP completa. Con questo metodo inviate con il port scanner i classici pacchetti SYN alle singole porte e aspettate la risposta dell’host di destinazione. Se questo rinvia un pacchetto SYN/ACK, segnala che la rispettiva porta è aperta ed è possibile instaurare una connessione. Se la risposta comprende un pacchetto RST, la porta è invece chiusa.

Se l’host di destinazione non fornisce una risposta, è preattivato con tutta probabilità un filtro di pacchetto, come un firewall. Le scansioni TCP SYN non sono visibili per le applicazioni verificate e perciò non generano neanche file di log; per questo motivo si chiamano anche Stealth scan (in italiano “scansioni segrete”).

TCP connect scan

Se eseguite con il vostro port scanner una scansione di tipo connect, generate e inviate i pacchetti non in maniera autonoma, bensì utilizzate la funzione del sistema connect, disponibile quasi su ogni sistema operativo, ad esempio viene usato anche dal browser per instaurare una connessione al relativo server. Il tool di scansione non ha quindi niente a che fare con l’instaurazione della connessione, ma incarica così il sistema operativo. In questo modo se la connessione va a buon fine, viene confermata che la porta è aperta, mentre se il tentativo di connessione fallisce, viene segnalato che la porta è chiusa.

Nei file di log delle rispettive applicazioni con porte aperte, nel caso di una connessione andata a buon fine, si vede che è stato applicato questo metodo di scansione. Non vengono però forniti chiarimenti sui filtri impiegati. Se vi mancano i permessi per l’invio di pacchetti semplici, il TCP connect scan è perciò un’alternativa utile alla scansione SYN.

TCP FIN, Null e Xmas scan

Con questi tre metodi di port scanning potete fare la distinzione tra porte aperte e chiuse. Così ci si serve di due principi che sono registrati nel RFC (Request for Comments) del TCP (793): da una parte i pacchetti in entrata, nel caso in cui non si tratti di pacchetti RST, verranno sempre risposti da una porta chiusa con un proprio pacchetto RST, dall’altra tutti i pacchetti, che non sono segnalati come SYN, RST o ACK, verranno ignorati da una porta aperta. I tre tipi di scansione sfruttano questa situazione nella scansione dei sistemi conformi RFC con i loro pacchetti personalizzati:

  • La scansione Null non utilizza alcun markup particolare.
  • La scansione FIN invia al port scanner i pacchetti FIN (da finish = in italiano “terminare“).
  • Le scansioni Xmas si basano su una combinazione di segnalazioni FIN, PSH (da push = in italiano “avanzare“) e URG (da urgent = in italiano “urgente“); il pacchetto si illumina, per così dire, come un albero di Natale.

Tutti e tre i metodi di scansione si comportano esattamente allo stesso modo. I pacchetti di test inviati si occupano, per via delle specificazioni RFC, che una porta chiusa risponda con un pacchetto RST e che una porta aperta non fornisca alcuna risposta. Visto che però solo alcuni router trasmettono un messaggio di errore, se una porta viene filtrata, l’assenza di una risposta può anche indicare la presenza di una porta filtrata. Mentre i procedimenti danno ancora meno nell’occhio quando si tratta di scansioni SYN, hanno lo svantaggio di non funzionare quando i sistemi non si attengono esattamente all’RFC 793. In questo caso Windows rientra tra i rappresentati maggiori da nominare.

UDP scan

Nel caso di un UDP scan vengono inviati header UDP vuoti, senza dati, a tutte le porte di destinazione. Se un servizio risponde ugualmente con un pacchetto UDP, è confermato che la relativa porta è aperta. Invece, se il port scanner riceve dal router il messaggio di errore “Port unreachable“ (tipo 3, codice 3), sarà chiaro che la porta è chiusa. Altri messaggi di errore chiariscono che un filtro del pacchetto blocca la porta.

Il problema principale del testing della porta UDP è un elevato dispendio di tempo, perché su molti sistemi l’emissione dei rispettivi messaggi di errore per motivi di sicurezza può durare molto a lungo e anche le porte aperte rispondono solo in maniera molto irregolare. Il kernel di Linux limita il numero di messaggi, ad esempio a uno per secondo, cosa che per le 65.535 porte equivale a 18 ore per concludere una scansione.

Quali port scanner esistono?

Ci sono diversi scanner con una varietà di funzioni differenti, tra i quali la maggior parte di questi tool è freeware o open source. Nel caso di molti di questi si tratta di classici programmi da riga di comando, che possono essere utilizzati anche attraverso interfacce grafiche separate. Inoltre nel web ci sono innumerevoli soluzioni con le quali si possono scansionare le porte direttamente nel browser. Questi servizi sono funzionalmente molto limitati e offrono solo la possibilità di verificare le singole porte, come è il caso del port scanner di DNStools. Per questo motivo si adattano maggiormente come opzione pratica per un controllo veloce del computer di casa.

Netcat: l’antenato dei tool di rete

Netcat (abbreviato in nc) è stato rilasciato nel 1996 da uno sviluppatore anonimo con lo pseudonimo di “Hobbit”. Originariamente è stato scritto per le piattaforme UNIX, nel frattempo sono venute alla luce diverse opzioni di porting per altri sistemi come Windows e diversi sviluppi come GNU Netcat, OpenBSD Netcat, Cryptcat o Netcat6 (supportato anche dall’IPv6) che sono implementati solitamente in molte distribuzioni di Linux. La versione di base del tool della riga di comando serve prima di tutto per inviare o per leggere i dati attraverso le connessioni di rete TCP e UDP, ma può anche essere utilizzato come semplice port scanning. Così potete, ad esempio, con un semplice comando come

nc -zv localhost 20-30

verificare lo stato delle porte dalla 20 alla 30 sul sistema in esecuzione. Il controllo delle porte UDP richiede il parametro aggiuntivo -u. Inoltre potete scansionare dei sistemi esterni al posto del localhost, a patto che siate a conoscenza del nome host o dell’indirizzo IP.

Un’analisi di rete completa con Nmap

Uno strumento essenzialmente più efficace, che convince soprattutto nella sua funzione di port scanner, è Network Mapper, rilasciato nel 1997, più conosciuto con il nome abbreviato di Nmap. Il programma, sviluppato per i sistemi compatibili con UNIX, dispone di licenza GPL ed è disponibile dal 2000 anche per i sistemi Windows, seppur con delle piccole limitazioni.

Così ad esempio il TCP connect scan richiede sproporzionalmente molto più tempo per via dell’API di rete del sistema Windows e anche la scansione delle porte del proprio sistema è possibile solo tramite alcune scorciatoie. In generale Nmap si può utilizzare dalla riga di comando, ma esiste anche un’interfaccia grafica dalle prestazioni elevate, che prende il nome di Zenmap, con cui si può utilizzare il tool di rete in maniera ancora più pratica.

L’ideatore, Gordon Lyon, e il team di sviluppatori di Nmap continuano a sviluppare il programma e le sue funzioni di port scanning, ampliandone così la varietà di features disponibili. In particolare le tecniche come l’OS fingerprinting, cioè il riconoscimento del sistema operativo di un host di destinazione, e la scansione dei servizi che si nascondono dietro una porta, rendono Nmap una delle soluzioni di port scanner più popolari. L’ampia scelta di funzioni si riflette anche nei metodi di scansione disponibili, che abbiamo riassunto per voi nella seguente tabella:

Metodo di port scanning

Comando Nmap

Descrizione

TCP connect scan

nmap -sT Host

Il classico controllo per non-amministratori

TCP syn scan

nmap -sS Host

Metodo di verifica veloce e che passa inosservato per gli amministratori

TCP FIN/XMAS/Null scan

nmap -sF Host

nmap -sX Host

nmap -sN Host

Metodi che possono aggirare i firewall

TCP ping scan

nmap -sP Host

Port scan atipico; serve a verificare la raggiungibilità di un host

TCP ACK scan

nmap -sA Host

Determina le porte filtrate, ma non fa distinzione tra porte aperte e chiuse 

TCP Window scan

nmap -sW Host

Paragonabile all’ACK scan; può verificare alcune porte aperte e chiuse

TCP Maimon scan

nmap -sM Host

Combinazione di FIN e ACK scan

TCP Idle scan

nmap -sI Host

Il più discreto, complesso e perciò anche il metodo di scansione più lento; funziona tramite un terzo computer

UDP scan

nmap -sU Host

Il metodo di scansione per le porte UDP senza connessione

SCTP Init scan

nmap -sY Host

Scansione delle porte con SCTP, un’alternativa al TCP e all‘UDP

Scan del protocollo IP

nmap -sO Host

Nessuna scansione delle porte; verifica quali protocolli basati su IP sono supportati sul sistema di destinazione

Potete scaricare Nmap e l’interfaccia Zenmap per il sistema operativo in uso sul sito ufficiale. Qui sono messe a disposizione l’ultima versione (stable) e una beta (development), che si trova ancora in fase di sviluppo.

Perché il port scanning non è sempre legale

Nmap non è solo amato dagli utenti del mondo informatico, ma anche dai registi cinematografici. Così ad esempio la figura femminile Trinity, nella seconda parte della saga fantascientifica della trilogia “Matrix”, si basa sul tool di rete per scansionare le porte del sistema di una centrale elettrica. Lei non è però in alcun modo interessata ad ottimizzare la sicurezza della centrale, ma utilizza il risultato della scansione per avere accesso al sistema. Per questo ricorre ad un codice dannoso, che sfrutta una falla di sicurezza attraverso la porta 22 del protocollo corrente SSH. La scena mostra però solo un attacco molto semplificato che si basa su un precedente port scan, ma rappresenta idealmente l’uso che i criminali possono fare del port scanning.

Un controllo delle porte non è perciò sempre legale; se ne consegue un exploit (così si chiama lo sfruttamento di una falla di sicurezza in gergo tecnico), si diventa perseguibili penalmente. Le conseguenze legali risultano, invece, meno chiare, quando paralizzate un sistema per via di port scan intensivi. Visto che il metodo di verifica, a causa dell’alta frequenza di richieste di connessioni, rappresenta un forte sovraccarico per il sistema di destinazione, può così verificarsi, in alcune circostanze, un suo arresto.

Inoltre i responsabili del sistema di destinazione potrebbero già individuare le vostre azioni ancora prima dell’arresto e giudicarle come le prime mosse in vista di un attacco. In un caso simile non sono perciò da escludere delle ripercussioni legali. Se viene provocato volontariamente un sovraccarico di un sistema esterno, sono in atto degli attacchi DoS e DDoS, che con molta probabilità verranno perseguiti penalmente. 

Assicuratevi perciò di essere autorizzati a condurre un port scan sul rispettivo sistema e utilizzate questo metodo solo per motivi di sicurezza e non per pura curiosità. Le vie indicate in cui impiegare il port scanning chiariscono quanto sia importante mantenere sotto controllo le porte del proprio sistema, del computer di rete e dei relativi servizi.