# Piattaforme e Software per la rete - lezione 13 #### Giacomo Verticale ###### 26 April 2016 ## IP Traceback Per un pacchetto osservato ad certo nodo, ci interessa sapere da dove il pacchetto è entrato nella rete e che nodi ha attraversato. Vediamo pacchetto P in V Vogliamo ricostruire il suo percorso nella rete. Possiamo mandare un altro pacchetto verso la stessa sorgente, ma essendo il routing asimmetrico, non è detto che un pacchetto nella direzione opposta seguirà lo stesso percorso. Altrimenti possiamo loggare tutti i pacchetti e chiedere ai vicini del nodo ricevente se hanno visto il pacchetto in questione. Un altro problema è che il pacchetto man mano che viaggia nella rete cambia alcuni dei suoi campi. Inoltre salvare su disco tutti i pacchetti è oneroso come capacità richiesta e velocità. Un terzo motivo è che i log stessi diventano un bersaglio interessante per gli intrusi. Serve una soluzione con costo computazionale costante, anche a costo di aumentare la probabilità di falsi positivi. Una soluzione adottata sono i __filtri di Bloom__ ## Filtro di Bloom Implementa in modo efficiente anche se non esatto il test di appartenenza ad un insieme. I browser ultimamente ci mettono tempo ad avviarsi perchè scaricano l'ultimo aggiornamento del filtro di bloom con la lista dei siti malicious. Le operazioni consentite sono: - Inizializzazione - Inserimento - Test Per implementarlo ci serve: - *h_i(x)* una famiglia di k funzioni hash indipendenti. - *A* array binario di m elementi inizialmente nullo è analogo alla tecnica di classificazione dei pacchetti. ``` INSERT(x) FOR i<-1,k A[h_i(x)]=1 ``` Do in pasto il mio input a tutte le funzioni di hash e setto a 1 le posizioni risultanti nell'array, se sono già a 1 le lascio così. All'aumentare delle funzioni di hash aumenta la probabilità di riempire l'array. ``` TEST(x) FOR i<-1,k IF A[h_i(x)]==0 THEN RETURN 0 END IF END FOR RETURN 1 ``` Se durante l test trovo 1 in tutte le posizioni, potrei avere un match che però potrebbe essere un falso positivo In pratica il sistema viene dimensionato in modo da rendere trascurabile la probabilità di falso positivo. ### Probabilità errore - Prob che elemento j di a sia pari a 0 dopo 1 inserimento. =(1-1/m)^h - Prob [A(j)=1 | n] =1-(1-1/m)kn - Probabilità di __falso positivo__ Equivale al caso in cui la probabilità precedente si verifica per k funzioni hash = [1-(1-1/n)^kn]^k=~[1-exp(kn/n)]^k ### Esempio Supponiamo di avere un bloom filter con m=5 e k=2 - h_1(x) = x*mod5 - h_2(x) = (2x+3)*mod5 Una funzione di hash pessima è h(x)=2xmod8 perchè l'ultimo bit rimane sempre a 1 Un'altra cattiva scelta di funzioni hash è quando le funzioni hash sono correlate e quidi non producono più output indipendenti. Richieste: - Inserire x=9 e x=11 - Testare x=15 e x=16 Filtro vuoto = 00000 Inserisco x=9: - h1(9)=4 h2(9)=1 Risultato = 01001 Inserisco x=11 - h1(11)=1 h2(11)=0 Risultato = 11001 Test - h2(15)=0 h2(15)=3 Consideriamo il sistema visto applicato ad un router x= identificativo del flusso lunghezza pacchetti = 512byte Su x sono calcolati n hash dalla famiglia hi(x) con 1<=i<=n tali hash sono usati come indici in n array di m elementi A1,A2,...,An. Ad ogni pacchetto si incrementa Ai[hi(x)] per ogni i Se Ai[hi(x)]>=S per ogni i, salvo x su disco. Tutti array azzerati ogni T=10s 1- Dire quali campi scegliere per X per avere nello stesso flusso i pacchetti verso lo stesso socket nello stesso host. x = IP dest || porta || porta dest Come scegliere S in modo da selezionare tutti i flussi da almeno 25Mbit/s S=(25*10^6bit/s*10s)/8*512 =61036 pacchetti ******* Un certo flusso g ha superato la soglia considerando m = 2^8 e n=3 oltre la prob che un nuovo flusso sia selezionato dire la probabilità che un *nuovo* flusso sia selezionato Pr(hi(x)=hi(y)) per un dat i = 1/m Probabilità di falso positivo = (1/m)^n =1/2^24=~6*10^-8