next   previous   contents

Utilizzo del client

 Come gia' menzionato, nel tarball di servknock e' presente anche un secondo programma chiamato knock. Scopo di tale software e' generare le sequenze di knock ed inviarle al portknocking server, dal quale possono essere riconosciute e di conseguenza portare all'esecuzione delle azioni previste in risposta.
 Naturalmente dal server non viene ritornata alcuna risposta al client, quindi una volta inviata la sequenza il richiedente per avere conferma dell'avvenuta autenticazione, deve tentare di connettersi al servizio applicativo desiderato. Se il tentativo andra' a buon fine significa che la sequenza di knock e' stata correttamente riconosciuta.
 Come per il portknocking server, anche per il client esiste il relativo file di configurazione, chiamato knockrc . La sua struttura e' del tutto simile a quella di servknock.conf, con la prima parte del file costituita da una serie di coppie chiave=valore, che descrivono le opzioni di configurazione generali, e la seconda in cui sono definite le diverse sequenze.
 Non ci si sofferma sul significato delle opzioni ammissibili in knockrc, poiche' gia' descritte per il file di configurazione di servknock. E' comunque necessario ricordare come alcune di esse siano specifiche di servknock.conf e quindi non utilizzabili. Non e' infatti prevista l'opzione logfile, mentre nella definizione di una sequenza di knock sono ammesse esclusivamente name, sequence, e tcp_flags.
 Naturalmente, poiche' le sequenze possano essere riconosciute, tutte le opzioni utilizzate debbono corrispondere con quelle definite nel file di configurazione del portknocking server, con name come unica possibile eccezione.

###############################
# Knock Client conf file
###############################

# blowfish | twofish | xtea | rijndael-128 | serpent
cypher=twofish
iv=PsychoticWaltz
password=IntoThe3verflow
span=7000-7100,7500-7655

#open ssh on demand
<seq>
name=open_ssh
sequence=UDP:222,ICMP,TCP:56,UDP:22,TCP:99
tcp_flags=syn,ack,psh
</seq>

#close ssh
<seq>
name=close_ssh
sequence=UDP:212,TCP:149,ICMP,UDP:42,TCP:199,TCP:180
tcp_flags=syn,psh,fin
</seq>

#open port 80
<seq>
name=apache
sequence=TCP:90,UDP:44,ICMP
tcp_flags=syn,ack,psh
</seq>


 Il programma puo' venire invocato con la seguente linea di comando :

> knock -d <host> -i <interface> -s <sequence name> [-g <address>] [-f <conf file>]

  Le opzioni ammissibili sono le seguenti :

 -d : indica l'host al quale inviare la sequenza di knock. E' possibile specificare indifferentemente un nome (che deve quindi essere risolto da un DNS server) oppure direttamente l'indirizzo IP di destinazione.
 -f : permette di utilizzare un file di configurazione alternativo a quello di default ( ~/.knockrc). E' possibile specificare sia path relativi che assoluti.
 -g : indica l'indirizzo IP dell'eventuale gateway utilizzato.
 -h : stampa a video la seguente pagina di help

 -i : l'interfaccia da utilizzare per l'invio dei pacchetti, ad esempio eth0, eth1, ppp0 ecc.
 -s : il nome della sequenza di knock da generare. Tale nome deve coincidere con l'opzione name di una delle sequenze definite nel file di configurazione.

 Se tutti i parametri necessari sono stati specificati correttamente, il programma e' in grado di creare i pacchetti della sequenza ed inviarli a destinazione, utilizzando il device indicato:


 Dagli screenshot si puo' notare come gli elementi della sequenza di knock (riconoscibili dal colore bianco acceso), vengono inviati all'interno di una sequenza di pacchetti TCP ed UDP.
 Infatti, viene inviata una sequenza casuale di pacchetti UDP e TCP, detti smoke packets, prima e dopo ogni elemento della sequenza di knock. Scopo di questo accorgimento e' confondere gli elementi della sequenza di knock con altro traffico di rete, in modo tale che per un eventuale attacker sia piu' complesso il riconoscimento delle sequenze.
 Il numero di porta di destinazione di tali pacchetti, viene generato in maniera casuale ricorrendo alla funzione di libreria srandom, ed utilizzando l'attuale timestamp come seed del randomizzatore. Seguendo questo approccio le sequenze di numeri casuali generati saranno differenti tra le diverse esecuzioni del programma, cambiando il timestamp.
 E' inoltre possibile impostare alcuni parametri in fase di compilazione riguardanti la generazione degli smoke packets. Ad esempio impostando i valori di SMOKE_MIN_PORT e SMOKE_MAX_PORT a 4000 e 9000, e' possibile notare come la porta di destinazione degli smoke packets rientri entro tale intervallo :


 Tali parametri possono essere impostati smodificando il valore delle seguenti costanti definite nell'header file knock.h :

/*max nr. of smoke elements between knock packets*/
#define SMOKE_NR 3
/*prob. of a smoke packet to be included in the sequence*/
#define SMOKE_PERC 60
/*max port number in a smoke packet, max 65535*/
#define SMOKE_MAX_PORT 9000
/*min port number in a smoke packet, min 1024*/
#define SMOKE_MIN_PORT 4000


next   previous   contents