Esercizi Processing.pdf - the Netgroup at Politecnico di Torino
Esercizi Processing.pdf - the Netgroup at Politecnico di Torino
Esercizi Processing.pdf - the Netgroup at Politecnico di Torino
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Politecnico</strong> <strong>di</strong> <strong>Torino</strong><br />
Corso <strong>di</strong> Tecnologie per Reti <strong>di</strong> Calcol<strong>at</strong>ori<br />
<strong>Esercizi</strong> <strong>di</strong> riepilogo: Processamento <strong>di</strong><br />
traffico<br />
Fulvio Risso<br />
October 17, 2009
Contents<br />
I. <strong>Esercizi</strong> 3<br />
0.1. Definizione dell’architettura <strong>di</strong> un firewall <strong>di</strong> livello applic<strong>at</strong>ivo . . . . . . 4<br />
0.2. Definizione dell’architettura <strong>di</strong> un load-balancer <strong>di</strong> livello applic<strong>at</strong>ivo . . . 4<br />
II. Soluzioni 5<br />
0.3. Definizione dell’architettura <strong>di</strong> un firewall <strong>di</strong> livello applic<strong>at</strong>ivo . . . . . . 6<br />
0.4. Definizione dell’architettura <strong>di</strong> un load-balancer <strong>di</strong> livello applic<strong>at</strong>ivo . . . 8<br />
2
Part I.<br />
<strong>Esercizi</strong><br />
3
0.1. Definizione dell’architettura <strong>di</strong> un firewall <strong>di</strong> livello<br />
applic<strong>at</strong>ivo<br />
Si progetti l’architettura generale <strong>di</strong> un firewall a livello applic<strong>at</strong>ivo, car<strong>at</strong>terizz<strong>at</strong>o dalla<br />
capacità <strong>di</strong> payload inspection e in grado <strong>di</strong> boccare determin<strong>at</strong>e sessioni in base ad un<br />
d<strong>at</strong>abase <strong>di</strong> sign<strong>at</strong>ure. Si consideri che l’analisi avvenga solamente su base pacchetto,<br />
pertanto non è richiesto un modulo <strong>di</strong> riassemblaggio dei flussi TCP. Si richiede tuttavia<br />
che il modulo <strong>di</strong> session tracking (la “session table”) sia implement<strong>at</strong>o <strong>at</strong>traverso una<br />
memoria CAM, con l’opportuna logica aggiuntiva per la gestione delle sessioni.<br />
Si descrivano inoltre il funzionamento e le interazioni tra i vari blocchi.<br />
0.2. Definizione dell’architettura <strong>di</strong> un load-balancer <strong>di</strong> livello<br />
applic<strong>at</strong>ivo<br />
Si progetti l’architettura generale <strong>di</strong> un load-balancer a livello applic<strong>at</strong>ivo per un webserver,<br />
che sia in grado <strong>di</strong> <strong>di</strong>rottare il traffico ai vari server reali <strong>at</strong>traverso l’analisi<br />
dell’URL contenuta nel pacchetto <strong>di</strong> richiesta HTTP.<br />
Si descrivano inoltre il funzionamento e le interazioni tra i vari blocchi.<br />
4
Part II.<br />
Soluzioni<br />
5
0.3. Definizione dell’architettura <strong>di</strong> un firewall <strong>di</strong> livello<br />
applic<strong>at</strong>ivo<br />
La soluzione può essere schem<strong>at</strong>izz<strong>at</strong>a come segue.<br />
Control plane<br />
Session<br />
cleanup<br />
daemon<br />
Header<br />
parser<br />
Hit Trusted /<br />
Hit NoTrusted /<br />
Nohit<br />
Session Table<br />
SessionID, TS,<br />
SessionSt<strong>at</strong>us<br />
Sign<strong>at</strong>ure<br />
DB<br />
RegEx<br />
engine<br />
Slow p<strong>at</strong>h<br />
Fast p<strong>at</strong>h<br />
Dropper<br />
All’arrivo <strong>di</strong> un pacchetto vengono estr<strong>at</strong>ti gli header signific<strong>at</strong>ivi (la 5-tupla) che<br />
vengono utilizz<strong>at</strong>i come chiave <strong>di</strong> ingresso per la Session Table. Questa tabella (implementabile<br />
da una CAM) viene utilizz<strong>at</strong>a per memorizzare una informazione ternaria,<br />
ossia vi possono essere tre possibili output a fronte <strong>di</strong> un m<strong>at</strong>ch:<br />
• la sessione è presente nella tabella, è già st<strong>at</strong>a controll<strong>at</strong>a ed è risult<strong>at</strong>a ammissibile<br />
[Hit Trusted]<br />
• la sessione è presente nella tabella, è già st<strong>at</strong>a controll<strong>at</strong>a e non è risult<strong>at</strong>a ammissibile<br />
[Hit NoTrusted]<br />
• la sessione non è presente nella tabella [No Hit]<br />
Questo risult<strong>at</strong>o determina il percorso del pacchetto a seguire:<br />
• nel primo caso viene selezion<strong>at</strong>o il “fast p<strong>at</strong>h” e il pacchetto viene invi<strong>at</strong>o in uscita<br />
6
• nel secondo caso viene selezion<strong>at</strong>o il blocco “Dropper” e il pacchetto non viene<br />
f<strong>at</strong>to proseguire<br />
• nel terzo caso viene selezion<strong>at</strong>o lo “slow p<strong>at</strong>h” e il pacchetto viene esamin<strong>at</strong>o dal<br />
motore <strong>di</strong> espressioni regolari.<br />
Nel terzo caso, si possono ulteriormente verificare tre con<strong>di</strong>zioni:<br />
• se il pacchetto sod<strong>di</strong>sfa una delle regular expression che in<strong>di</strong>ca un possibile <strong>at</strong>tacco<br />
<strong>di</strong> sicurezza, quel determin<strong>at</strong>o SessionID viene aggiunto alla Session Table e il<br />
campo SessionSt<strong>at</strong>us viene impost<strong>at</strong>o ad un valore che in<strong>di</strong>ca che la sessione è<br />
malevola (in modo che i pacchetti successivi possano essere scart<strong>at</strong>i)<br />
• se il pacchetto non sod<strong>di</strong>sfa alcuna regular expression, il pacchetto appartiene ad<br />
una sessione “benevola”; in questo caso quel determin<strong>at</strong>o SessionID viene aggiunto<br />
alla Session Table con il campo SessionSt<strong>at</strong>us impost<strong>at</strong>o su “Trusted” (in modo<br />
che i pacchetti successivi possano essere inoltr<strong>at</strong>i alla destinazione)<br />
• se il pacchetto non contiene payload (ad esempio è un TCP SYN), non viene<br />
mo<strong>di</strong>fic<strong>at</strong>a la tabella delle sessioni e il pacchetto viene comunque lasci<strong>at</strong>o proseguire<br />
verso la destinazione.<br />
Infine, è necessario risolvere il problema della gestione delle entry vecchie nella Session<br />
Table.<br />
Questo viene risolto dal seguente algoritmo:<br />
• ogni volta che un pacchetto ottiene un m<strong>at</strong>ch su una entry della SessionTable, viene<br />
aggiorn<strong>at</strong>o un campo TimeStamp associ<strong>at</strong>o alla sessione stessa e che mantiene il<br />
valore dell’istante nel quale è st<strong>at</strong>o visto l’ultimo pacchetto <strong>di</strong> quella sessione<br />
• perio<strong>di</strong>camente, un processo <strong>di</strong> background (Session Cleanup Daemon) scan<strong>di</strong>sce<br />
tutte le entries della Session Table e cancella tutte le sessioni che non hanno<br />
prodotto traffico da più <strong>di</strong> X minuti (es. 5 min).<br />
Questo processo viene eseguito in background e pertanto non ha la necessità <strong>di</strong> essere<br />
particolarmente preciso come tempistiche. Pertanto, può permettersi <strong>di</strong> accedere alla<br />
Session Table solamente quando non ci sono pacchetti in ingresso, in modo da non<br />
ostacolare il processamento del traffico <strong>di</strong> rete (con l’ovvia avvertenza che nel caso in cui<br />
ci sia molto traffico è comunque necessario fermare il sistema per cancellare le entries<br />
vecchie nella Session Table in modo da evitare il riempimento della stessa).<br />
7
0.4. Definizione dell’architettura <strong>di</strong> un load-balancer <strong>di</strong> livello<br />
applic<strong>at</strong>ivo<br />
La soluzione può essere schem<strong>at</strong>izz<strong>at</strong>a come segue.<br />
Session<br />
cleanup<br />
daemon<br />
Header<br />
parser<br />
Session table<br />
SessionID,<br />
TS, ServerID<br />
Server ID<br />
Hit/<br />
Nohit<br />
DEMUX<br />
Payload<br />
selector<br />
Payload/no<br />
payload<br />
RegEx<br />
engine<br />
Server ID<br />
TCP<br />
termin<strong>at</strong>ion<br />
TCP handshake<br />
I pacchetti in ingresso vengono process<strong>at</strong>i con l’estrazione della 5-tupla (Session ID),<br />
che viene utilizz<strong>at</strong>a come chiave <strong>di</strong> ingresso nella Session Table. Questa tabella mantiene<br />
l’elenco delle sessioni già classific<strong>at</strong>e e per le quali è già st<strong>at</strong>o assegn<strong>at</strong>o un particolare<br />
server web nella lista <strong>di</strong> quelli <strong>di</strong>sponibili.<br />
Nel caso in cui la sessione sia già st<strong>at</strong>a classific<strong>at</strong>a, l’in<strong>di</strong>cazione del ServerID (il particolare<br />
server che dovrà ricevere quel pacchetto) viene utilizz<strong>at</strong>a da un de multipl<strong>at</strong>ore<br />
(DEMUX) per inoltrare il pacchetto al server corretto. Nel caso in cui la sessione non<br />
sia ancora st<strong>at</strong>a classific<strong>at</strong>a, il pacchetto viene f<strong>at</strong>to proseguire su un percorso interno al<br />
load balancer nel quale viene prima controll<strong>at</strong>o se il pacchetto contiene un payload.<br />
In caso neg<strong>at</strong>ivo, il pacchetto è probabilmente rel<strong>at</strong>ivo ad un handshake rel<strong>at</strong>ivo ad<br />
una nuova sessione e pertanto il pacchetto viene inoltr<strong>at</strong>o verso un modulo apposito in<br />
grado <strong>di</strong> gestire la terminazione delle sessioni in arrivo rispondendo con gli opportuni<br />
pacchetti TCP ai pacchetti in ingresso. Nel caso in cui il pacchetto contiene un payload,<br />
viene esamin<strong>at</strong>o dal motore <strong>di</strong> Regular Expression per determinare il server a cui dovrà<br />
8
essere f<strong>at</strong>to proseguire, e verrà inoltr<strong>at</strong>o verso il Demux che lo farà proseguire verso il<br />
server corretto.<br />
Un blocco <strong>di</strong> Session Cleanup incaric<strong>at</strong>o del controllo perio<strong>di</strong>co della vali<strong>di</strong>tà delle<br />
sessioni nella Session Table completa il <strong>di</strong>segno architetturale proposto.<br />
Questa soluzione <strong>di</strong> massima lascia tuttavia scoperti alcuni dettagli (non <strong>di</strong> poco<br />
conto):<br />
• la gestione dell’handshake delle connessioni TCP sui server web (se l’handshake è<br />
f<strong>at</strong>to inizialmente dal motore TCP Termin<strong>at</strong>ion, deve essere previsto un meccanismo<br />
appostito per poter inoltrare un pacchetto <strong>di</strong> una sessione già inizi<strong>at</strong>a ad un<br />
server reale)<br />
• la cancellazione delle sessioni <strong>at</strong>tive e <strong>di</strong> eventuali zombies che non sono riusciti a<br />
completare la fase <strong>di</strong> handshake dal blocco TCP Termin<strong>at</strong>ion<br />
• non vengono gestite sessioni nelle quali la sign<strong>at</strong>ure è spezz<strong>at</strong>a su più pacchetti<br />
(non è presente un blocco TCP Normaliz<strong>at</strong>ion)<br />
• non vengono gestite sessioni HTTP persistenti, ossia il caso per cui nella stessa<br />
sessione TCP vengano richiesti più oggetti http appartenenti a server <strong>di</strong>versi.<br />
Lo studente è invit<strong>at</strong>o a proporre delle soluzioni per questi casi.<br />
9