03.06.2015 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!