next   previous   contents

Descrizione e caratteristiche

 La tecnica del portknocking e' un sistema per comunicare con un computer in rete che non richiede alcuna porta aperta per poter funzionare. Non e' infatti necessario mantenere i corrispondenti servizi costantemente in ascolto e pronti a ricevere connessioni. Questa sua caratteristica' costituisce indubbiamente un grande vantaggio: finche' una porta rimane aperta, il servizio applicativo ad essa associato e' in grado di accettare connessioni, restando quindi vulnerabile a diversi attacchi.
 Prima che una connessione ad uno specifico servizio possa essere stabilita viene usata una speciale sequenza di pacchetti di rete, ovvero una serie di tentativi di connessione verso delle porte di rete chiuse come meccanismo di autenticazione del richiedente del servizio. Il richiedente “bussa alle porte” e si fa riconoscere prima di poter accedere, da qui il nome “portknocking”. La sequenza di pacchetti utilizzata per autenticarsi prende il nome di sequenza di knock.
 Sfruttando questa tecnica e' quindi possibile manipolare dinamicamente le regole di filtraggio, aprendo una o piu' porte solo quando necessario, una volta autenticatosi il richiedente.
 Naturalmente possono esistere numerose sequenze, associate ad azioni differenti. Ad esempio si possono prevedere sequenze di knock diverse per l'accesso ai singoli servizi applicativi.

 Viene ora illustrato un'esempio pratico dell'utilizzo di questa tecnica, per gestire l'accesso al servizio SSH su una macchina Linux che utilizzi iptables. Il server sul quale il servizio e' in esecuzione presenta quindi tutte le porte di rete chiuse, ad eccezione delle cosiddette porte dinamiche, per mezzo della seguente regola di filtraggio :

iptables -P INPUT DROP

 La scelta di utilizzare l'azione DROP anziche' REJECT, e' giustificata dal fatto che essa si limita a scartare il pacchetto arrivato, senza inviare alcun pacchetto di errore ICMP ai richiedenti il servizio. Viene cosi' reso indistinguibile il rifiuto del pacchetto dall'assenza del server.


 Un utente fidato per potere accedere al servizio, deve iniziare una serie di connessioni verso diverse porte secondo un certo ordine. La particolare sequenza di knock ovviamente e' un segreto noto esclusivamente agli utenti che debbono essere abilitati all'utilizzo del servizio applicativo, ed al software lato server responsabile del riconoscimento delle sequenze stesse.


 Il portknocking server riconoscendo una particolare sequenza puo' modificare le regole di filtraggio, ad esempio aggiungere una regola per mezzo di iptables, che consenta l'accesso al servizio SSH all'indirizzo IP del richiedente, come illustrato dall'immagine successiva :


 Per esempio un utente puo' cercare di connettersi in sequenza alle porte 24, 20 e 21. Dal suo punto di vista i tentativi di connessione non hanno avuto successo, come se la macchina di destinazione non esistesse. I pacchetti della sequenza di knock vengono infatti scartati dal firewall in maniera "silenziosa", senza cioe' ritornare al richiedente alcun messaggio d'errore.

 Nel frattempo pero', il portknocking server interpreta la sequenza di knock ricevuta e nel caso essa sia giudicata valida, puo' eseguire l'azione associata. Nel caso illustrato si potrebbe aprire la porta 22 all'indirizzo IP del richiedente, con il seguente comando :

iptables -A INPUT -s $IP -p tcp --dport 22 -j ACCEPT

 Sfruttando il medesimo meccanismo, una volta che l'utente abbia terminato le sue operazioni, e' possibile specificare un seconda sequenza per chiudere la porta precedentemente aperta tramite il comando :

iptables -D INPUT -s $IP -p tcp --dport 22 -j ACCEPT

 Per l'implementazione di un simile sistema esistono varie possibilita' e criteri su cui basarsi, che verranno discusse dettagliatamente nei capitoli successivi.
Volendo pero' riassumere, le metodologie realizzative si riducono alle seguenti tre:

1. Monitoraggio dei log di sistema
2. Analisi real-time del traffico di rete al livello Datalink
3. Riutilizzo di meccanismi di Intrusion Detection quali snort oppure hogwash

next   previous   contents