Introduzione
Nell'amministrazione degli spazi web, la materia delle reti è particolarmente interessante per comprendere meglio il funzionamento alla base della comunicazione tra macchine remote.
I protocolli di comunicazione più famosi sono il TCP( Transmission Control Protocol) / IP (Internet Protocol), definito anche come Internet protocol suite e l'UDP (User Datagram Protocol).
Nei protocolli di comunicazione citati, le porte collaborano a definire più nodi da associare a un indirizzo IP, per permettere l'accesso ai diversi servizi in esecuzione a quella posizione logica.
Nozioni di base
Modelli e Strati
In informatica, i modelli aiutano a comprendere meglio la realtà che ci circonda, fornendo diversi livelli di astrazione (un po' come guardare la stessa cosa ma, ogni volta, concentrandoci su dettagli differenti).
Il modello OSI è un modello concettuale che ci torna utile nel descrivere il funzionamento di una rete. I livelli di astrazione del modello OSI sono chiamati Layers(come "strati"). Le porte si trovano nel transport layer, lo "strato" in cui si tratta la comunicazione tra servizi e applicazioni.
Termini importanti in Reti
Ti presentiamo un po' di terminologia usata per definire elementi o processi coinvolti nelle comunicazioni remote:
- Porta: una locazione indirizzabile in rete, implementata nei sistemi operativi, che permette di distinguere il traffico in base alle applicazioni o servizi verso cui confluisce.
- Socket Internet: un descrittore di file che specifica un indirizzo IP e un numero di porta associato, con il relativo protocollo di comunicazione che verrà utilizzato per lo scambio di dati.
- Binding("Legame"): Il processo che si innesca quando una applicazione o un servizio usano una socket per gestire il flusso dei dati (Input/Output).
- Ascolto: un servizio si definisce "in ascolto su una porta" quando si sta legando a una porta di un indirizzo IP, tramite un protocollo, per mettersi in attesa di richieste dai clients. Sulla stessa porta, si stabilisce una connessione per rispondere a una richiesta ricevuta.
- Scansione delle porte: il port scanning è una pratica che consente di sondare le porte in ascolto in un server e di recuperare varie informazioni su porte aperte, servizi e sistema operativo in esecuzione sulla macchina remota.
Porte
Classificazione delle porte
I numeri di porta vanno da 1 a 65535 e sono categorizzati in base al sottoinsieme di questo range:
- Da 1 a 1024: porte associate alle funzionalità essenziali della rete nei sistemi operativi Linux e Unix-based. Queste porte necessitano dei permessi di root per essere gestite.
- Da 1025 a 49151: porte disponibili per riservare dei servizi specifici a esse. Ciò viene fatto contattando lo IANA (Internet Assigned Numbers Authority), l'autorità che gestisce la distribuzione degli indirizzi IP globali, dei simboli associati ai protocolli e dei numeri in Internet.
- Da 49152 a 65535: porte destinate a un uso privato, non disponibili per essere riservate a dei servizi.
Porte fondamentali
Dato il numero enorme di porte disponibili, sarebbe impossibile illustrarti i servizi associati ad ogni porta!
Ci sono però delle porte con protocolli "essenziali" ai servizi più comuni nel web:
- 20: FTP data,protocollo di trasferimento file
- 21: Controller FTP
- 22: SSH, protocollo per connettersi in sicurezza a un terminale di una macchina remota
- 23: Telnet, un protocollo deprecato a causa della scarsa affidabilità
- 25: SMTP, protocollo mail
- 43: WHOIS
- 53: Servizi DNS
- 67: DHCP server
- 68: DHCP client
- 80: HTTP, porta per la comunicazione client-server non cifrata.
- 110: POP3, porta per servizi mail
- 113: porta con servizi per l'identificazione IRC
- 143: IMAP, porta per servizi mail
- 161: SNMP
- 194: IRC, porta dedicata alla comunicazione testuale via chat
- 389: LDAP
- 443: HTTPS, HTTP sicuro
- 587: SMTP - porta per l'invio messaggi
- 631: CUPS - porta per collegarsi a un server dedicato solo alla stampa
Nei sistemi Linux, il file services conterrà le informazioni sulle porte più comuni e i loro servizi.
Basterà usare il comando less, che permette di stampare a video il contenuto di un file. Stampando il contenuto di services, potrai scoprire la lista delle porte più comuni e dei rispettivi servizi sulla macchina in uso.
$ less /etc/services
Essendo l'output potenzialmente molto lungo, dovrai usare la barra spaziatrice per stampare man mano le altre pagine di risultati. Per interrompere la visualizzazione, basterà invece premere il tasto Q.
Scansione delle porte
Scansionare le proprie porte è un ottimo metodo per verificare i servizi in esecuzione sul nostro server e le eventuali porte che potrebbero rappresentare delle vulnerabilità che verrebbero sfruttate da utenti malintenzionati.
È bene ricordare che gli strumenti che andremo a mostrarti possono permettere diversi gradi di "aggressività" durante le scansioni. Ti raccomandiamo di testare solo sul tuo server e di evitare scansioni troppo aggressive, soprattutto su indirizzi IP non appartenenti a te.
Controllare le porte aperte
Uno dei primi tools, installato di default sulle distribuzioni Linux, è netstat. Nel caso in cui non ci fosse, sarà sufficiente installarlo tramite il comando:
$ sudo apt install net-tools
(Nota: è chiaro che, a seconda del sistema operativo in esecuzione sulla propria macchina, il comando per installare i tools di rete, tra cui netstat, potrebbe variare nella sintassi.)
netstat consente di eseguire una scansione delle porte per verificare i servizi attivi sul tuo server e alcune informazioni collegate a essi (numero di porta, stato "in ascolto" o meno, tipo di protocollo di comunicazione utilizzato).
Per far ciò, basterà immettere il comando:
$ sudo netstat -plunt
L'output ottenuto, dovrebbe essere simile:
Esploriamo adesso gli altri tool per andare a fondo nel test delle vulnerabilità delle proprie porte.
Analisi delle vulnerabilità
In informatica è stata coniata l'espressione Offensive Security per definire un metodo proattivo per proteggere la propria macchina da attacchi. Spesso, provare a violare le difese dei nostri server è un ottimo modo per comprendere come un utente malintenzionato potrebbe provare a muoversi nell'approccio di un attacco.
Nmap
Questo tool è molto importante per l'analisi delle vulnerabilità del tuo sistema. Sostanzialmente, nmap ti consente di provare a violare le difese di una rete e scoprire le sue debolezze come farebbe un utente malintenzionato.
(Nota:Ci teniamo nuovamente a ricordare che possono esserci ripercussioni, anche legali, qualora questo o altri strumenti venissero utilizzati per ledere terzi. L'utilizzo di questi tool deve essere consapevole.)
Per installare nmap, usa il comando:
$ sudo apt-get update
$ sudo apt-get install nmap
Scansione porte con Nmap
Per entrare nel vivo, utilizzeremo il server di test di nmap (scanme.nmap.org), messo a disposizione per provare le scansioni. In alternativa, potresti usare il tuo stesso server o potresti, approfondendo l'argomento, configurare una Virtual Machine su cui tentare i tuoi attacchi. Una Virtual Machine molto comune e utilizzata è Metasploitable .
Le opzioni di nmap sono veramente numerose e variegate, al punto che l'esplorazione di tutte le funzionalità offerte dal tool richiederebbe molto tempo a un utente inesperto. Per tale motivo, ti mostreremo alcuni dei comandi e delle opzioni più utilizzate con nmap per poter eseguire dei test basici sul tuo server.
È bene sapere che le opzioni andranno eseguite, per il massimo livello di precisione, con i privilegi sudo e che, all'aumentare del livello di dettaglio, aumenterà il consumo di tempo di nmap prima di restituire l'output.
Eccoti una lista delle opzioni di nmap:
- Esamina il sistema operativo dell'host:
$ sudo nmap -O scanme.nmap.org
- Nel caso avessi ricevuto un warning sulla possibile non disponibilità dell'host, esegui una analisi saltando il passaggio della verifica host con:
$ sudo nmap -PN scanme.nmap.org
- Effettua un'analisi senza eseguire la traduzione DNS sull'indirizzo specificato. Ciò rende l'analisi più veloce:
$ sudo nmap -n scanme.nmap.org
- Analizza solo una specifica porta:
$ sudo nmap -p 80 scanme.nmap.org
- Cerca solo le connessioni TCP:
$ sudo nmap -sT scanme.nmap.org
- Cerca solo le connessioni UDP:
$ sudo nmap -sU scanme.nmap.org
- Cerca solo le connessioni TCP o UDP:
$ sudo nmap -n -PN -sT -sU -p- scanme.nmap.org
L'analisi TCP "SYN" possono scoprire le vulnerabilità di una connessione TCP.
Le connessioni TCP si basano su una sincronizzazione tra le due parti coinvolte in una comunicazione di rete. Solitamente, viene inviata una richiesta di sincronizzazione al server che, in base alla possibilità o meno di tale sincronizzazione, invierà indietro una conferma. Infine, il mittente invia un'ultima notifica al server per stabilire la connessione.
Un'analisi di tipo "SYN" permette di interrompere questa connessione dopo aver ricevuto la conferma dal server. Ciò ti consentirà quindi di verificare le porte in ascolto su un server senza però far risultare il traffico di una connessione stabilita con esso, dal momento in cui il processo di sincronizzazione non viene portato a termine. È bene ricordarti, per chiarezza, che questo metodo è contrastato da firewall avanzati o configurazioni di sicurezza dei server che hanno la capacità di rilevare queste richieste di connessione incomplete.
Per eseguire una scansione "SYN", usa:
$ sudo nmap -sS scanme.nmap.org
Sui server non basati su Windows, esiste un approccio più anonimo che permette di inviare degli header TCP non validi. Un header è un elemento che costituisce l'intestazione di un pacchetto di dati (o segmento) inviato durante la comunicazione TCP tra un mittente e un destinatario. I segmenti contengono diverse informazioni necessarie allo stabilimento di una connessione TCP tra le due parti. Inviare un header sbagliato porterà alla ricezione di una notifica nel caso in cui una specifica porta sia chiusa.
Per verificare la chiusura di una porta tramite questo metodo, puoi ricorrere a diverse opzioni per Nmap :
La sintassi del comando sarà simile:
$ sudo nmap -PN -p 80 -sN scanme.nmap.org
Per verificare la versione di un servizio in esecuzione sulla porta di un server, aggiungi il flag -sV, come in esempio:
$ sudo nmap -PN -p 80 -sV scanme.nmap.org
È possibile anche effettuare una scansione multipla su diversi indirizzi IP. In nmap, puoi specificare un range di indirizzi IP che desideri scansionare in una scansione sola.
Per far ciò potrai utilizzare l'opzione -PN, aggiungendo un range di indirizzi IP definito da un valore di partenza a un valore finale, separati con il carattere - o il carattere /.
Nell'esempio:
$ sudo nmap -PN 111.78.98.10-22
Il comando scansionerà tutti gli indirizzi IP da 111.78.98.10 a 111.78.98.22.
Infine, potrai fare la stessa cosa esaminando un range di reti per verificare i servizi attivi su di esse, tramite -sP:
$ sudo nmap -sP xxx.xxx.xxx.xxx-yyy
Con queste informazioni , abbiamo terminato il primo prospetto dei comandi più utili di Nmap.
Conclusioni
Terminato questo tutorial, sarai in grado di riconoscere i principali servizi attivi su una rete e le porte da ricercare per individuarli.
Sarai inoltre in grado di effettuare delle piccole scansioni su degli host o delle reti per scoprire eventuali presenze di porte aperte e vulnerabili.