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
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:
Per implementarlo ci serve:
è 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.
Supponiamo di avere un bloom filter con m=5 e k=2
Filtro vuoto = 00000 Inserisco x=9:
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