Il Port Knocking è una protezione a basso livello che può contribuire a migliorare la sicurezza di un server Linux che espone servizi sulla rete. In ambiente GNU Linux, qualunque Sysadmin che si rispetti dispone del suo accesso riservato ssh al sistema. Sfruttando i grandi pregi nell’utilizzo di Secure Shell (Ssh) può accedere ai server Linux in modo sicuro e protetto da occhi indiscreti.
I benefici di sicurezza che può portare il Port Knocking sono abbastanza evidenti. Tutte le porte sensibili del sistema possono rimanere costantemente chiuse ed inaccessibili ai malintenzionati. Solo l’amministratore di sistema può aprirle per accedere in tutta sicurezza e richiuderle dietro di se, una volta all’interno.
Non sarebbe fantastico se potessimo aprire una porta così critica come ssh
ad un semplice comando? Cioè semplicemente “bussando” alla porta ssh
e farcela aprire automaticamente dal sistema?
La risposta «Si», utilizzando il Port Knocking, è possibile!
In questa breve guida vogliamo introdurre il Port Knocking ed esplorare come implementare questa tecnica per mitigare alcuni aspetti della sicurezza.
Perché il Port Knocking
In un server, avere costantemente esposto il servizio ssh è qualcosa che potrebbe mettere a serio repentaglio la sicurezza complessiva delle piattaforme IT. E questo, soprattutto in quei sistemi che sono esposti sulla rete Internet; ma non solo.
Basti pensare che una sessione ssh del Sysadmin per eseguire le normali procedure di routine giornaliere di amministrazione può durare qualche minuto. Ma ma che succede in tutto il tempo durante il quale non c’è nessuna esigenza di accedere a quel server?
A volte può accadere che non sia necessario dover accedere al sistema per giorni, settimane e talvolta mesi. Magari per via di sistemi di monitoring esterni che ci assicurano del buon funzionamento del server stesso.
Ebbene, la porta 22/TCP rimane comunque aperta a disposizione di chiunque voglia tentare di accedere al sistema; anche dei non autorizzati. Questa, vale la pena ricordarlo, è la porta standard sulla quale il server accetta le connessioni ssh
, tipicamente utilizzata dall’amministratore per le operazioni sul server; dovrebbe quindi essere accuratamente profilata con una configurazione di sicurezza.
Come si può prevenire che la porta ssh rimanga chiusa quando non serve? Ma con il Port Knocking, naturalmente.
In ambiente GNU Linux possiamo ricorrere alla tecnica del Port Knocking. Possiamo effettivamente “bussare” su determinate porte chiuse del sistema e richiedere che la porta 22/TCP
ci venga aperta. A questo punto potremo liberamente accedere al sistema con le normali procedure.
Il medesimo problema problema potrebbe presentarsi anche per altri servizi, come ad esempio il servizio TFTP
oppure il servizio SNMP
. Insomma, le porte costantemente aperte nei server sono una vera manna per qualsiasi Hacker pronto a sfruttarle per attacchi informatici di vario tipo.
Va infatti ricordato che la tecnica del Port Knocking è utilizzabile teoricamente su qualsiasi porta TCP
o UDP
che non necessiti di essere costantemente aperta per erogare servizi di rete.
Che cos’è il Port Knocking
Il Port Knocking è uno strato aggiuntivo di sicurezza che può essere usato per farci aprire alcune porte del firewall interno che son normalmente chiuse. Fare cioè in modo di aprire solo determinate porte su espressa richiesta dell’amministratore.
Il meccanismo in generale è molto semplice, e può essere riassunto come segue:
- L’amministratore di sistema invia una segnalazione al server; letteralmente “bussando” (knocking) con una sequenza si pacchetti prestabilita, su alcune porte preconfigurate;
- Il server riconosce la sequenza, ed invia al firewall interno della macchina, un comando per aprire la porta designata per quella specifica sequenza;
- L’amministratore di sistema, a questo punto può effettuare la sua consueta connessione con dal proprio Client.
Questa gif può aiutare a chiarire il funzionamento del Port Knocking.
Il motivo prevalente per cui si implementa il Port Knocking è dettato dalla necessità di proteggere quanto più possibile il sistema dal Port Scanning. Ma anche per prevenire la cosiddetta enumerazione di servizi potenzialmente vulnerabili.
Infatti, se l’attaccante non è a conoscenza della valida sequenza di Port Knocking, il sistema rimane protetto. Le porte TCP
e UDP
potenzialmente vulnerabili, appaiono normalmente indisponibili all’attaccante, nascondendo così i servizi dall’esterno.
Cosa NON è il Port Knocking
Sulla scorta di quanto appena detto, alcuni Sysadmin tendono ad equiparare il Port Knocking ad una sorta di “Password” di accesso al sistema. Un’assunzione questa, quanto mai errata!
Sebbene la tecnica del “Bussare alla porta” può rivelarsi un’eccellente strategia per aumentare il livello di sicurezza a basso livello, essa non lo è affatto. Questa pratica non dovrebbe mai essere equiparata ad un sistema di autenticazione o autorizzazione per l’accesso ai sistemi informatici.
Essa infatti, si basa esclusivamente sulla condivisione tra client e server della sequenza del Port Knocking. Sostanzialmente, per aprire una porta TCP
o UDP
a seguito di uno specifico comando. Tale sequenza deve assolutamente rimanere segreta tra client e server. Una sorta di Preshared Key, insomma
Queste informazioni, cruciali per la sicurezza, in alcune circostanze potrebbero essere in qualche modo trafugate, accidentalmente rivelate o, come vedremo di seguito, “Sniffate” dai malintenzionati.
Si raccomanda quindi che i meccanismi di autenticazione ed autorizzazione siano comunque adeguatamente robusti e sicuri a salvaguardia di accessi indesiderati ai sistemi.
Criticità e limitazioni del Port Knocking
Il Port Knocking è un buon modo per cautelarsi dal Port Scanning, escludendo quindi una grande moltitudine di attacchi informatici. Almeno per quelli diretti a porte TCP
o UDP
che non necessitano di essere costantemente aperte e disponibili sempre in rete.
Tuttavia, non è certamente una tecnica che può garantire un livello di sicurezza assoluta, posto che,sappiamo bene, la sicurezza informatica assoluta non esiste.
Esistono circostanze in cui un malintenzionato può “sniffare” il traffico di rete e carpire la sequenza segreta del Port Knocking inviata al Server. In questi casi la tecnica della “Bussata” diventa praticamente inefficace.
Port Knocking e Sniffing
L’attaccante che può fare Sniffing di rete può scoprire in pochi minuti la sequenza segreta della bussata informatica. Può analizzare il traffico di rete utilizzando strumenti adeguati, come Tcpdump
, o il più versatile Wireshark.
Come è mostrato nell’immagine, i pacchetti utilizzati per il Port Knocking e la loro esatta sequenza sono in bella mostra. Qualunque hacker smaliziato sarà in grado di comprendere al volo che di che cosa si tratta e come replicare il la tecnica a proprio vantaggio.
Quindi, il Port Knocking NON ci mette del tutto al sicuro da tutti gli attacchi informatici. Assolutamente no! Ma può comunque rivelarsi un buon modo per mitigare il problema. No a caso la sequenza di Port Knocking può essere modificata in qualsiasi momento dal Sysadmin.
Il System Administrator saggio sa benissimo che:
l sistema informatico più sicuro è quello spento, al quale è stato scollegato il cavo di rete e se possibile anche il cavo di alimentazione.
È però ovvio che i server dovranno essere accesi e funzionanti per poter erogare quei servizi che ne giustificano la presenza; oltre ai soldi spesi.
Basti pensare che i servizi come FTP
, oppure Email o Web dovranno necessariamente essere sempre disponibili per gli utenti. Per questi servizi ovviamente la tecnica del Port Knocking non si può applicare; le metodologie di sicurezza da implementare in quei casi va individuata altrove.
Depistaggi e camuffamenti
Considerate le criticità implicite nel Port Knocking, è comunque possibile adottare qualche accorgimento in più per rendere questa tecnica un po’ più efficace nel mitigare attacchi conseguenti al Packet Sniffing.
Il depistaggio non è certamente una pratica sicura; tutt’altro.
Il depistaggio è una pratica che, se unita ad altre tecniche, può scoraggiare almeno una cospicua parte dei potenziali attaccanti. Contribuendo così a mitigare in parte il problema, riducendo il numero complessivo degli attacchi. Che non è poca cosa!
Camuffamento – Utilizzo di porte standard
Sebbene molti degli esempi riportati nelle varie guide reperibili in internet tendano ad utilizzare porte TCP
e UDP
non comuni e non utilizzate, un buon modo per depistare un eventuale attaccante consiste nell’inviare la sequenza di Port Knocking su porte standard e molto comuni, corrispondenti cioè a reali servizi.
Ovviamente le porte che verranno utilizzare per la sequenza di Port Knocking non dovranno corrispondere ad un effettivo servizio presente nel sistema.
L’utilizzo delle porte 80/TCP
(www-http), 443/TCP
(http protocol over TLS/SSL) oppure 8080/TCP
(www caching service) può facilmente ingannare chi sta sniffando la rete; facendoli apparire come normale traffico di rete; ovvero, classici tentativi di accesso a quei servizi.
Lo stesso discorso vale per le porte UDP. Si potranno utilizzare le porte ad esempio le porte 123/UDP
(Network Time Protocol), 69/UDP
(TFTP
), oppure 554/UDP
(Real Time Stream Control Protocol).
Depistaggio – Sequenza ritardata (Lazy Sequence)
Un altro modo consiste nel tentare di depistare l’aggressore, nascondendo la sequenza di pacchetti Port Knocking nel normale traffico di rete in entrata ed in uscita dal server.
Il termine “nascondere” qui va inteso come un modo per far si che i pacchetti relativi alla sequenza di Port Knocking siano sufficientemente distanti nel tempo tra loro. In modo si può aggiungere qualche grado di difficoltà a chi sta sniffando, rendendogli cioè il compito un po’ più arduo.
Normalmente, i Client per inviare la “Bussata” al server, sono impostati di default in modo da inviare in rapida successione tutti i pacchetti della sequenza prestabilita. Per confondere un po’ le acque all’eventuale aggressore che sta sniffando, sarà utile inviare i pacchetti della sequenza con intervalli che possono andare dai 700 millisecondi al 1.5 secondi.
In questo modo, i pacchetti della sequenza saranno “mescolati tra la folla” di migliaia di altri pacchetti in transito da e verso il server. Ciò aggiunge un po’ di difficoltà per rendere più arduo il compito dell’hacker; cioè capire cosa sta realmente accadendo.
Conclusioni
In campo informatico la sicurezza non è mai abbastanza, questo lo abbiamo già detto, ma non ci stancheremo mai di ripeterlo.
Ogni server che si rispetti dovrebbe avere a bordo il proprio firewall di sistema in modo che tutte le porte non necessarie risultino inaccessibili dall’esterno.
Soprattutto la porta 22/TCP
(ssh), quella tipicamente utilizzata per effettuare la manutenzione del sistema da parte del Sysadmin. Questa porta non dovrebbe essere mai esposta in rete se non vi è la reale necessità. Sia che si tratti di un server connesso alla rete internet, sia che si tratti di un sistema sulla rete intranet.
L’amministratore di sistema di un server GNU Linux ha però necessità di poter accedere tramite il protocollo ssh
per poter manutenere la macchina. Un problema non di poco conto.
Implementare il Port Knocking rende possibile mantenere chiusa la porta ssh
in modo che questa non sia costantemente disponibile a chiunque ed aprirla solo all’occorrenza.
Disclaimer
Questa pagina potrebbe contenere link di affiliazione. Gli acquisti o gli ordini che effettuerai tramite tali link possono generare commissioni che ci aiutano a sostenere questo sito web.