• Non ci sono risultati.

5.3 Pre-processing dei dati

5.3.5 Filtraggio degli item

Dopo aver condotto diversi esperimenti di analisi ci siamo resi conto che la stessa poteva essere sia semplificata a livello di risorse necessarie per il suo svoglimento (il fattore tempo è molto critico in questi tipo di analisi) che migliorata anche dal punto di vista dei risultati prodotti (come ad esempio un numero inferiore di pattern).

A tal fine abbiamo deciso di sviluppare alcune strategie di filtraggio delle sequenze di attacco di seguito descritte:

CAPITOLO 5. SEQUENTIAL PATTERN MINING DELLE SEQUENZE DI ATTACCO • Filtro per frequenza relativa: questo filtro opera a livello di frequenza relativa

di un elemento rispetto a due parametri:

Numero totale di attacchi: vengono eliminati dalle tuple di attacco tutti gli elementi che compaiono in un numero percentuale di attacchi superiore al parametro impostato.

Numero totale di sequenze: vengono eliminati dalle tuple di attacco tutti gli elementi che compaiono almeno una volta in un numero percentuale di sequenze superiore al parametro impostato.

• Filtro individuale mirato: vengono eliminati dalle tuple di attacco elementi specificatamente indicati attraverso l’identificativo.

• Filtro globale sulla sequenza mirato: vengono eliminate l’intere sequenze che non contengono un determinato elemento specificato attraverso l’identificativo. A seconda della caratterizzazione dell’elemento specificato il filtro può essere interpretato in modo diverso. Se l’elemento specificato è un nodo, vengono eliminate le sequenze che non attraversano quel nodo. Se è un attacco vengono eliminate le sequenze che non utilizzano quell’attacco nella catena. Se è un gruppo vengono eliminate le sequenze che non sfruttano quella vulnerabilità negli attacchi.

I filtri sono impostati attraverso un file di configurazione filters.yml di cui di seguito forniamo un possibile esempio:

item_attacks_filter : 0.7 item_sequences_filter : 0.9 items_to_purge: 3 5 6

nodes_to_visit: 16

I filtri come abbiamo già detto sono 4 e ogni riga del file ne definisce uno. Per ogni analisi possono essere utilizzati tutti, nessuno o una qualsiasi combinazione di essi. Vediamo una breve descrizione della struttura del file sopra riportato:

• item_attacks_filter: questo attributo definisce il filtro per frequenza relativa di un item rispetto al numero totale di attacchi elementari conteggiati in tutte le sequenze prese in esame. Un parametro uguale a 0.7 significa che saranno eliminati dalle tuple tutti gli item con una frequenza relativa superiore o uguale al 70% del numero totale di attacchi.

• item_sequences_filter: questo attributo definisce il filtro per frequenza rela- tiva di un item rispetto al numero totale delle sequenze prese in esame. Un parametro uguale a 0.9 significa che saranno eliminati dalle tuple tutti gli

item che compaiono almeno una volta in un numero di sequenze superiore o uguale al 90% del totale.

• items_to_purge: questo attributo definisce il filtro individuale mirato su item specifici indicati dall’utente. Sono indicati più item separati da un carattere di spaziatura. Per il caso riportato in esempio saranno eliminati dalle tuple gli item 3, 5 e 6. Quelli indicati sono gli identificativi codificati con CSV2FIMI. Dalla tabella di codifica si desume quanto segue: item 3 corrisponde a idAttacco=2744, item 5 corrisponde a idAttacco=79 e item 6 corrisponde a idTipo=38. Con l’applicazione di questo filtro la sequenza di esempio precedentemente indicata diventa:

h(1, 11, 15), (2, 7, 12, 16), (8, 13, 17), (4, 9, 14, 18), (10, 13, 19)i

• nodes_to_visit: questo attributo definisce il filtro globale sulla sequenza. Ogni sequenza che non contiene gli item indicati non sarà presa in considerazione nell’analisi. Nel caso in esempio saranno scartate tutte le sequenze in cui non compare almeno una volta l’item 16. Gli identificativi di riferimento anche in questo caso sono quelli codificati con CSV2FIMI. Dalla tabella di codifica si desume che item 16 corrisponde a idNodo=6. Con l’applicazione di questo filtro la sequenza di esempio precedentemente indicata viene mantenuta in quanto esiste un attacco nella sequenza che contiene l’item indicato ovvero che passa dal nodo 6.

Il compito di questi filtri è quello di eliminare informazioni sovrabbondanti e ridondanti che potrebbero inficiare l’analisi. Purtroppo determinano una perdita informativa di rilievo per la tipologia di analisi che vogliamo svolgere e quindi dopo aver condotto alcuni test è stato deciso di non utilizzarli. Può essere comunque utile averli a disposizione per analisi specifiche mirate.

Come abbiamo visto i primi due filtri sono parametrizzati ad un valore percen- tuale della frequenza di un item. Per impostare questi filtri in maniera accorta ed oculata si rende quindi prima necessario esaminare la distribuzione di un item rispetto al numero totale di attacchi e al numero totale di sequenze. Per produrre le due distribuzioni si utilizza un tool, item_distribution.py, che produce in output due report. Il primo report mostra per tutti gli item processati in tutte le sequenze prese in esame il numero di occorrenze totale nelle tuple e la frequenza relativa degli item rispetto al numero totale di attacchi. La tabella 5.1 mostra un estratto di un report.

Il passo preliminare di esaminare i due report è necessario anche per conoscere l’identificativo (campo ID dei report) che CSV2FIMI assegnerà agli item durante la codifica.

CAPITOLO 5. SEQUENTIAL PATTERN MINING DELLE SEQUENZE DI ATTACCO ID ITEM OCCORRENZE VALORE %

... ... ... ... 52 idGruppo=3 402932 32,00 50 idGruppo=4 380701 30,24 49 idGruppo=2 376191 29,88 13 idAttacco=79 100000 7,94 53 idNodo=1 100000 7,94 ... ... ... ...

Tabella 5.1: Estratto della distribuzione degli item rispetto al numero di attacchi.

Il secondo report mostra per tutti gli item processati in tutte le sequenze prese in esame il numero di sequenze in cui tale item occorre almeno una volta e la frequenza relativa degli item rispetto al numero totale di sequenze. La tabella 5.2 mostra un estratto di un report.

ID ITEM OCCORRENZE VALORE %

... ... ... ... 49 idGruppo=2 99958 99,95 8 idAttacco=1066 99159 99,15 51 idGruppo=11 99159 99,15 18 idAttacco=73 59223 59,22 ... ... ... ...

Tabella 5.2: Estratto della distribuzione degli item rispetto al numero di sequenze.