• Non ci sono risultati.

Algoritmo per il calcolo dell’insieme di copertura incrociato

6.4 Supporto incrociato e copertura incrociata

6.4.2 Algoritmo per il calcolo dell’insieme di copertura incrociato

crociato

L’algoritmo 6.3 calcola gli insiemi di copertura incrociati dei pattern sequenziali di una Minaccia detta A rispetto alle sequenze di attacco sia di A che di un altra Minaccia detta B. Di seguito forniamo la descrizione dell’algoritmo.

Le istruzioni dalla riga 2 alla riga 4 inizializzano le variabili di output topK, CovA e CovB rispettivamente con una lista vuota e con due insiemi vuoti. In topK vengono memorizzati gli identificativi dei pattern trovati e in CovA e CovB vengono memorizzati i rispettivi identificativi delle sequenze della Minaccia A e della Minaccia B coperte dai pattern in topK.

Alla riga 5 inizia un ciclo che si fermerà al verificarsi di una delle condizioni seguenti: è stata raggiunta la copertura del numero di sequenze indicato dalla variabile MaxSeq, è stato raggiunto il numero massimo di pattern desiderati indicato dalla variabile K oppure non esistono più pattern che possono apportare nuove sequenze all’insieme di copertura CovA ovvero con una copertura residua

CAPITOLO 6. RANKING DI PATTERN SEQUENZIALI E INSIEMI DI COPERTURA massima in ListA maggiore di 0. Quest’ultima condizione è verificata dalla guardia del costrutto if-then-else che comincia alla riga 17 e termina alla riga 31.

Dalla riga 6 alla riga 30 si svolge il ciclo del costutto while di riga 5 che ad ogni iterazione inizializza le variabili idT uples e T uples con due liste vuote. In idT uples verranno memorizzati gli identificativi dei pattern corrispondenti alle tuple che verranno memorizzate in T uples. Le tuple di T uples sono coppie di cardinalità degli insiemi degli identificativi delle sequenze coperte da ciascun pattern. Il primo elemento della coppia rappresenta la copertura residua del pattern rispetto alle sequenze di Minaccia B. Il secondo elemento della coppia rappresenta la copertura residua del pattern rispetto alle sequenze di Minaccia A. Il primo elemento viene memorizzato con segno negativo in modo di poter operare la ricerca del massimo secondo un ordinamento lessicografico delle coppie. Una coppia di cardinalità in posizione i in T uples rappresenta le coperture residue, rispetto a ListB e ListA del pattern con identificativo uguale al valore di idT uples in posizione i.

Con il ciclo for, dalla riga 8 alla riga 16, vengono memorizzate le coppie di copertura residua dentro la variabile T uples ed i corrispondenti identificativi dei pattern in idT uples a condizione che il valore di copertura residua del pattern rispetto a Minaccia A sia diverso da 0. Con l’istruzione di riga 9 viene letta la cardinalità dell’insieme di copertura residua del pattern rispetto a Minaccia A e questo valore viene memorizzato in resA. La guardia del costrutto if di riga 10 verifica che resA sia diverso da 0. Se la condizione è verificata viene letta anche la corrispondente cardinalità dell’insieme di copertura residua del pattern rispetto a Minaccia B memorizzandone il valore in resB. L’istruzione di riga 12 inizializza la tupla t con la coppia di valori −resB e resA. La tupla t viene aggiunta a T uplescon l’istruzione di riga 13 e il corrispondente identificativo del pattern viene aggiunto a idT uples con l’istruzione di riga 14.

Con la guardia del costrutto if di riga 17 si verifica che T uples non sia una lista vuota. Se la condizione è verificata da questa lista viene prelevato, con l’istruzione alla riga 18, la posizione del massimo tra tutte le coppie. Il massimo viene calcolato in funzione di un ordinamento lessicografico delle coppie di coperture residue. Con l’istruzione di riga 18 viene memorizzato l’identificativo del pattern corrispondente in idP attern e questo valore viene aggiunto a topK con l’istruzione di riga 20. Gli identificativi delle relative sequenze coperte vengono memorizzati nelle variabili SeqA e SeqB con l’istruzioni di riga 21 e 22. Con l’istruzioni dalla riga 23 alla riga 24 si aggiungono agli insiemi CovA e CovB gli identificativi di SeqA e SeqB. Con il seguente ciclo for, dalla riga 25 alla riga 28, si ricalcolano per ogni pattern i rispettivi insiemi delle sequenze di copertura residua con l’operazione di sottrazione insiemistica di SeqA da ciascun insieme in ListA e di SeqB da ciascun insieme in ListB.

passa al costrutto else alla riga 29 che interrompe il ciclo while di riga 5 con l’istruzione break alla riga 30.

Infine con l’istruzione della riga 33 vengono prodotte in output le variabili topK, CovAe CovB.

Implementazione e complessità computazionale

L’implementazione di questo algoritmo ha le stesse caratteristiche di quella dell’algoritmo 6.1 per i già sopracitati motivi. Le liste ListA e ListB sono imple- mentate utilizzando le liste built built-in. Ciascun elemento di queste due liste è un array di numpy. Le variabili di output, CovA e CovB, sono anch’esse array di numpy. Le variabili T uples e idT uples sono liste built-in. Le tuple di T uples sono implementate con le tuple built-in di Python. Le altre variabili K, topK e M axSeq seguono seguono la stessa logica già vista per l’algoritmo 6.1.

Per il calcolo della complessità computazionale dell’algoritmo bisogna prendere in considerazione i parametri:

• k: numero massimo di pattern cercati; • n: numero totale di pattern;

• m: numero massimo di sequenze che possono supportare un pattern;

L’algoritmo ha le stesse caratteristiche dell’Algoritmo 6.1 e pertanto la comples- sità computazionale risultante è la stessa: O(k · n · m).

CAPITOLO 6. RANKING DI PATTERN SEQUENZIALI E INSIEMI DI COPERTURA

Algoritmo 6.1: Algoritmo per il calcolo dell’insieme di copertura.

Input: S: lista degli insiemi degli identificativi delle sequenze coperte ciascun pattern.

K: numero massimo di pattern da cercare.

MaxSeq: numero massimo delle sequenze da coprire. Output: topK: lista degli identificativi dei top K pattern.

C: insieme degli identificativi delle sequenze coperte dai pattern in topK.

1 begin

2 topK ← []; 3 C ← ∅;

4 ResidualCoverage ← [];

5 while (len(C) < M axSeq and len(topK) < K) do 6 for (i ← 0; i < len(S); i ← i + 1) do

7 ResidualCoverage[i] ← len(S[i]); 8 end

9 idP attern ← argM ax(ResidualCoverage);

10 M axResidualCoverage ← ResidualCoverage[idP attern]; 11 if (M axResidualCoverage > 0) then

12 append(topK, idP attern); 13 Sequences ← S[idP attern]; 14 C ← C ∪ Sequences;

15 for (i ← 0; i < len(S); i ← i + 1) do 16 S[i] ← S[i] \ Sequences;

17 end 18 else 19 break; 20 end 21 end 22 return topK, C 23 end

Algoritmo 6.2: Algoritmo per il calcolo del supporto di un pattern. Input: SP: un pattern sequenziale di Minaccia A.

DB: lista delle sequenze di attacco di Minaccia B.

Output: SupportList: lista degli identificativi delle sequenze in DB che supportano il pattern SP.

1 begin

2 SupportList ← [];

3 for (idSeq ← 0; idSeq < len(DB); idSeq ← i + 1) do 4 S ← DB[idSeq];

5 checkSP ← 0;

6 if (len(SP ) > len(S)) then 7 continue;

8 end

9 itemsetSP ← 0; 10 itemsetSeq ← 0;

11 while (itemsetSP < len(SP ) and itemsetSeq < len(S)) do 12 if itemsetSP ⊆ itemsetSeq then

13 checkSP ← checkSP + 1; 14 itemsetSP ← itemsetSP + 1; 15 itemsetSeq ← itemsetSeq + 1; 16 else 17 itemsetSeq ← itemsetSeq + 1; 18 end 19 end

20 if (checkSP = len(SP )) then 21 append(SupportList, idSeq); 22 end

23 end

24 return SupportList 25 end

CAPITOLO 6. RANKING DI PATTERN SEQUENZIALI E INSIEMI DI COPERTURA Algoritmo 6.3: Algoritmo per il calcolo della copertura incrociata.

Input: listA: lista degli insiemi degli identificativi delle sequenze di A coperte da ciascun pattern.

listB: lista degli insiemi degli identificativi delle sequenze di B coperte da ciascun pattern.

K: numero massimo di pattern da cercare.

MaxSeq: numero massimo delle sequenze da coprire. Output: topK: lista dei top K pattern.

CovA: insieme degli identificativi delle sequenze di A coperte dai pattern in topK.

CovB: insieme degli identificativi delle sequenze di B coperte dai pattern in topK.

1 begin

2 topK ← []; 3 CovA ← ∅; 4 CovB ← ∅;

5 while (len(CovA) < M axSeq and len(topK) < K) do 6 idT uples ← []; 7 T uples ← []; 8 for (i ← 0; i < len(ListB); i ← i + 1) do 9 resA ← len(ListA[i]); 10 if (resA ! = 0) then 11 resB ← len(ListB[i]); 12 t ← (−resB, resA); 13 append(T uples, t); 14 append(idT uples, i); 15 end 16 end

17 if (len(T uples) ! = 0) then 18 index ← argM ax(T uples); 19 idP attern ← idT uples[index]; 20 append(topK, idP attern); 21 SeqA ← ListA[idP attern]; 22 SeqB ← ListB[idP attern]; 23 CovA ← CovA ∪ SeqA; 24 CovB ← CovB ∪ SeqB;

25 for (i ← 0; i < len(ListA); i ← i + 1) do 26 ListA[i] ← ListA[i] \ SeqA;

27 ListB[i] ← ListB[i] \ SeqB; 28 end 29 else 30 break; 31 end 32 end 90

ANALISI DEL DATASET DI

SIMULAZIONI

In questo capitolo vengono presentati i risultati delle analisi attraverso il sistema di reportistica. Le analisi sono state condotte definendo due diversi scenari con differente granularità.

7.1

Introduzione

Ogni analisi condotta con il sistema oggetto di questo progetto di ricerca è caratterizzata da diversi parametri e specifiche che sono stati discussi nei capitoli precedenti. Alcuni di questi parametri riguardano la fase di pre-processing e altri il mining vero e proprio. Di seguito forniamo un prospetto riassuntivo di questi parametri utile a descrivere e interpretare gli esperimenti di analisi che verranno presentati e discussi.

• Numero di sequenze di input per il mining: il numero di sequenze che sono elaborate dall’algoritmo di estrazione dei pattern sequenziali.

• Supporto minimo: il numero minimo di sequenze, specificato in misura percentuale, che ciascun pattern deve soddisfare.

• Tipo di pattern sequenziali: frequenti, chiusi o massimali.

• Tipo di tupla per gli attacchi elementari: tipo di tupla che descrive gli attacchi elementari all’interno delle sequenze. Il tipo di tupla può essere una qualsiasi delle combinazioni ottenibili dagli elementi idAttacco, idTipo, idGruppo, idNodo. Il numero di elementi della tupla va da un minimo di uno ad un massimo di quattro e ciascun elemento può comparire soltanto una volta. L’ordine degli elementi non ha importanza.

CAPITOLO 7. ANALISI DEL DATASET DI SIMULAZIONI • Filtri sugli elementi e/o sequenze: sono i filtri che sono stati descritti nel

capitolo 5. PARAMETRO M0 M1 M2 M3 M4 M5 Min 5,00 12,00 9,00 5,00 6,00 9,00 1st Qu. 25,00 12,00 13,00 25,00 26,00 29,00 Median 31,00 13,00 13,00 31,00 32,00 37,00 Mean 30,92 12,59 12,93 30,24 31,74 36,57 3st Qu. 37,00 13,00 13,00 36,00 38,00 44,00 Max 64,00 13,00 14,00 57,00 61,00 65,00

Tabella 7.1: Statistiche sul numero di attacchi per sequenza.

Figura 7.1: Boxplot delle lunghezze delle sequenze.

È stato deciso, per motivi di complessità computazionale, di effettuare ogni esperimento di analisi su tutte le minacce ma separatamente. Ogni esperimento di analisi consisterà quindi di 6 esecuzioni del nostro sistema, ciascuna delle quali riguarderà una particolare minaccia. In questo modo avremo dati specifici per ogni caratterizzazione delle minacce, limiteremo la complessità computazionale dell’analisi e saremo in grado di operare dei confronti dei dati ottenuti.

La tabella 7.1 mostra le statistiche sul numero di attacchi, eseguiti con successo, di cui si compongono le sequenze di ogni minaccia. In figura 7.1 è riportato il

grafico boxplot di tali statistiche. In particolare, si nota come le minacce M1 ed M2, che implementano la strategia MaxIncrement, eseguano sequenze di attacco molto più corte rispetto alle altre minacce.

Per gli esperimenti di analisi, sono stati definiti due diversi scenari , S1 ed S2. La Tabella 7.2 riporta le caratteristiche degli stessi:

PARAMETRO S1 S2

Numero di Sequenze 100.000 100.000

Supporto minimo 5% 15%

Tipo di pattern Sequenziali Massimali Massimali Tipo di tupla d’attacco (idAttacco) (idTipo, idNodo) Filtri applicati Nessuno Nessuno

Tabella 7.2: Parametri degli scenari di analisi.

7.2

Scenario S1

I parametri sono stati definiti in base ad alcune considerazioni. Per quanto riguarda il numero di sequenze abbiamo deciso di prendere in considerazione l’intero database di sequenze di attacco di ciascuna minaccia, in modo di avere una fonte informativa il più completa possibile in riferimento a ciascuna strategia adottata dalle minacce. Per ogni minaccia si dispone di uno storico di attacchi formato da 100.000 sequenze. Considerato che negli esperimenti di test per la taratura del sistema non si sono originati problemi di ordine computazionale che potessero orientare a scegliere un campione si è deciso di sottoporre a mining l’intero database.

Il supporto minimo è stato impostato ad un valore percentuale pari al 5%. Le motivazioni che stanno alla base di questa scelta sono da ricercarsi nel bisogno di intercettare più pattern possibili in modo da poter identificare anche sotto-sequenze che pur avendo un supporto basso presentino caratteristiche interessanti per gli esperti del dominio. Mutuando la strategia di mining in uso nel settore della market basket analysis, dove si applicano supporti bassi, abbiamo deciso di partire dal valore definito, incrementandolo eventualmente a step di 5 punti percentuali in caso di insorgenza di problemi computazionali. Dato che nei test non si sono riscontrati problemi questo valore è stato scelto come parametro finale per l’analisi.

La scelta del tipo di pattern sequenziali tra frequenti, chiusi e massimali è stata dettata dalla necessità di catturare pattern il più lunghi possibile (come numero di pattern elementari) che siano ciascuno diverso dagli altri. Queste caratteristiche non sono ottenibili dai pattern frequenti e chiusi dove vengono generati un numero di pattern più grande e molti di questi pattern sono sotto-pattern di altri. La

CAPITOLO 7. ANALISI DEL DATASET DI SIMULAZIONI motivazione che stà alla base della scelta dei pattern massimali è formalizzata in Appendice A.

Per la scelta del tipo di tupla d’attacco, che descrive gli attacchi elementari delle sequenze che vengono elaborate dall’algoritmo di mining, abbiamo optato in questa tipologia di analisi per una tupla formata da un unico descrittore per facilitare l’analisi dal punto di vista computazionale. Avere sequenze formate da elementi molto sparsi velocizza l’estrazione dei pattern. La scelta è ricaduta sul descrittore idAttacco che incarna in sé il massimo grado della specificità di un attacco elementare, essendo ognuno di essi mappato su di un singolo nodo e su di una specifica CWE. Una maggiore specificità dei descrittori significa maggiore sparsità degli elementi delle sequenze.

Per quanto riguarda i filtri da applicare nella fase di pre-processing abbiamo deciso, insieme agli esperti della sicurezza, di non utilizzarne nessuno al fine di avere una fonte informativa il più completa possibile.

7.2.1

Mining

MINACCIA N. Pattern t (sec) Mem. (Mb)

M0 9464 457 18042 M1 480 38 2097 M2 719 27 2044 M3 9874 467 17884 M4 15374 629 19811 M5 60251 2700 33687

Tabella 7.3: Scenario S1 - Sintesi dei risultati di mining.

La Tabella 7.3 mostra il prospetto di sintesi dell’estrazione dei pattern. In ogni riga della tabella sono riportati, per la relativa minaccia, il numero di pattern estratti, il tempo impiegato e la memoria utilizzata dal processo di mining. Per le minacce M1 ed M2, che adottano rispettivamente strategie Max Increment λ1 e MaxIncrement λ2 il numero di pattern estratti è notevolmente inferiore rispetto alle minacce che impiegano altre strategie. Per le minacce M0 ed M3, che adottano rispettivamente le strategie Random λ0 e Max Probability λ1, sono stati estratti un numero simile pattern similare. Per la minaccia M4, che adotta la strategia Max Probability λ2, il numero di pattern estratti è circa 1, 5 volte quello di M3. Infine, per M5, che adottta la strategia Max Num. Attack λ2, si ha il maggior numero di pattern estratti. Le risorse impiegate, tempo e memoria, sono direttamente proporzionali al numero dei pattern estratti. I pattern estratti sono memorizzati

ATTRIBUTO VALORE

id 146

length 3

support 8244

score 32976

average attacks distance 1,59

std attacks distance 0,49

average rights distance 63,27

std rights distance 20,15

pattern idAttacco=1058 – idAttacco=73 – idAttacco=2587

Tabella 7.4: Scenario S1 - Istanza del report con i pattern estratti.

in un report di cui la Tabella 7.4 riporta una istanza d’esempio. Per ogni pattern estratto sono riportati:

• id: identificativo numerico del pattern sequenziale, assegnato progressivamen- te partendo da 1;

• length: lunghezza del pattern sequenziale, definita come numero di pattern elementari che lo compongono;

• support: numero di sequenze che soddisfano il pattern;

• score: punteggio calcolato come funzione della lunghezza e del supporto; • average attacks distance: media del numero di attacchi mancanti;

• std attacks distance: deviazione standard del numero di attacchi mancanti; • average rights distance: media del numero di diritti mancanti;

• std attacks distance: deviazione standard del numero di diritti mancanti; • pattern: il pattern sequenziale. Il carattere “−” separa i pattern elementari.

In ogni pattern elementare compaiono uno o più elementi della tupla d’attacco definita.

7.2.2

Copertura

Per il calcolo dell’insieme di copertura è stato fissato il parametro K = 30. Que- sto valore rappresenta il limite superiore al numero di pattern che saranno cercati. È possibile infatti che la ricerca dei pattern si fermi ad un numero inferiore rispetto

CAPITOLO 7. ANALISI DEL DATASET DI SIMULAZIONI a qualora si raggiunga la copertura totale delle sequenze prima di raggiungere K oppure non vi siano più pattern che coprano sequenze non ancora coperte. La Tabella 7.5 riproduce il prospetto di sintesi dell’analisi di post-processing. Per ogni minaccia sono riportati il numero di pattern individuati, il tempo impiegato, il numero di sequenze coperte dai pattern e il numero di sequenze non coperte che prendono il nome di Black Swan. Possiamo considerare queste sequenze come eventi di attacco rari non caratterizzati dai pattern individuati nell’insieme di massima copertura. L’insieme di queste sequenze è riportato in un report definito come quello in Tabella 7.7. Il tempo impiegato per il calcolo dell’insieme di copertura è direttamente proporzionale al numero di pattern sequenziali totale da analizzare.

MINACCIA N. Top Pattern t (sec) Coverage Black Swan

M0 30 140 96057 3943 M1 30 7 99460 540 M2 30 11 99940 60 M3 30 145 97050 2950 M4 30 232 95480 4520 M5 30 1155 95487 4513

Tabella 7.5: Scenario S1 - Sintesi del calcolo dell’insieme di copertura.

rank id Res. Coverage Tot. Coverage pattern 1 5870 12743 12743 (omissis) 2 4456 10793 23536 (omissis) 3 4457 10668 34204 (omissis) 4 108 9019 43223 (omissis) 5 337 8946 52169 (omissis) 6 797 8924 61093 (omissis) 7 408 5069 66162 (omissis) 8 7916 3528 69690 (omissis) 9 69 2846 72536 (omissis) 10 116 2825 75361 (omissis) . . . (. . . )

Tabella 7.6: Scenario S1 - Primi 10 pattern dell’insieme di copertura per M0.

Il calcolo dell’insieme di copertura produce in output, per ogni minaccia, un report come quello in Tabella 7.6 di cui di seguito si fornisce una breve descrizione:

id Sequenza Sequenza

1151 idAttacco=1058 - idAttacco=13 - idAttacco=997 - . . . 2516 idAttacco=16 - idAttacco=34 - idAttacco=997 - . . . 4539 idAttacco=123 - idAttacco=13 - idAttacco=15 - . . .

. . . .

Tabella 7.7: Estratto del report delle equenze Black Swan per la minaccia M0.

• id: l’identificativo del pattern sequenziale;

• Res. Coverage: il numero di sequenze, non ancora coperte dall’insieme di copertura, del pattern;

• Tot. Coverage: il numero totale di sequenze coperte, dall’insieme di copertura, con l’aggiunta del pattern;

• pattern: il pattern sequenziale, definito come quello della Tabella 7.4, omesso per questioni di spazio.

Copertura di M0

Di seguito proponiamo un’analisi dettagliata della copertura della minaccia M0. Verranno presi in considerazione i primi 10 pattern dell’insieme di copertura anziché i 30 calcolati. I pattern di seguito elencati coprono un numero di sequenze pari a 75.361 ovvero il 75, 36 % del totale preso in esame. Trattandosi di pattern sequenziali formati da tuple che contengono il solo idAttacco viene omesso il descrittore e riportato solo l’identificativo numerico.

1) 123 - 159 - 1088 - 79 2) 1056 - 997 - 15 - 79 3) 1056 - 15 - 997 - 79 4) 1058 - 159 - 79 5) 1060 - 159 - 79 6) 16 - 159 - 79 7) 17 - 1056 - 79 8) 123 - 14 - 1066 - 73 - 79 9) 97 - 1022 - 79 10) 97 - 1027 - 79

L’attacco 79 compare in tutti i 10 pattern come ultimo attacco. Esso è infatti infatti uno dei pochi possibili attacchi finali sul nodo obiettivo (34) e compare

CAPITOLO 7. ANALISI DEL DATASET DI SIMULAZIONI in tutte le sequenze soddisfatte dai pattern presi in esame. Il nostro obiettivo è bloccare le sequenze di attacco, impedendo il raggiungimento dell’obiettivo da parte della minaccia, il prima possibile. Per perseguire questo scopo escludiamo l’attacco 79 dalla nostra analisi e prendiamo in considerazione solo gli attacchi visibili in Tabella 7.8. Inoltre, l’attacco 79, essendo l’ultimo, non si presta all’applicazione di eventuali contromisure dinamiche da parte di un analista che segue in tempo reale il susseguirsi degli attacchi di una sequenza. Quando l’analista vede questo attacco è ormai troppo tardi per bloccare la sequenza.

Dalla Tabella 7.8 si deduce che applicando solo le 4 contromisure per gli attacchi indicati si bloccano tutti i pattern, bloccando di conseguenza tutte le sequenze coperte dai pattern ovvero il 75, 36 % del totale. Il numero di sequenze coperte dai pattern sequenziali di cui sopra costituisce il limite inferiore del numero totale di sequenze bloccate, applicando le citate contromisure, in quanto è possibile che alcuni degli attacchi indicati sia incluso anche nelle sequenze non coperte dai pattern. In particolare, l’attacco 159 è incluso in 152 sequenze black swan che, per la minaccia M0, sono pari a 3943 come visibile dalla tabella 7.5.

idAttacco N. Occorrenze Pattern

123 2 1,8

159 4 1,4,5,6

1056 3 2,3,7

97 2 9,10

Tabella 7.8: Estratto delle occorrenze di idAttacco nei top 10 pattern di M0.

Copertura di M1

Di seguito proponiamo un’analisi dettagliata della copertura della minaccia M1. Verranno presi in considerazione i primi 10 pattern sequenziali dell’insieme di copertura. Il numero di sequenze coperte da tali pattern è pari a 82.721.

1) 16 - 14 - 18 - 15 - 1066 - 1342 - 79 2) 1060 - 14 - 18 - 1061 - 1066 - 79 3) 1058 - 14 - 18 - 2402 - 1066 - 79 4) 1058 - 14 - 18 - 19 - 1066 - 79 5) 1058 - 14 - 18 - 1061 - 1066 - 79 6) 1060 - 14 - 18 - 19 - 1066 - 79 7) 16 - 15 - 14 - 18 - 1066 - 1342 - 79 8) 16 - 15 - 14 - 18 - 1066 - 1893 - 79 9) 16 - 14 - 18 - 15 - 1066 - 1893 - 79

10) 1060 - 14 - 18 - 1059 - 1066 - 79

L’attacco 79 non viene preso in considerazione in quanto attacco finale sul nodo obiettivo. L’attacco 14 occorre in tutti i pattern e pertanto applicando la relativa contromisura si bloccano tutte le sequenze soddisfatte dai pattern. In particolare, l’attacco 14 è incluso in tutte le sequenze black swan che, per la minaccia M1, sono pari a 540 come visibile dalla tabella 7.5.

Copertura di M2

Di seguito proponiamo un’analisi dettagliata della copertura della minaccia M2 analizzando i primi 10 pattern dell’insieme di copertura che coprono un numero di sequenze pari a 77.389 ovvero il 77, 38 % del totale preso in esame.

1) 14 - 2744 - 78 - 1088 - 1022 2) 997 - 14 - 2744 - 883 - 1027 - 109 3) 15 - 14 - 2744 - 883 - 1027 - 102 4) 15 - 14 - 2744 - 883 - 1027 - 109 5) 997 - 14 - 2744 - 883 - 1027 - 102 6) 14 - 1088 - 2744 - 2719 - 883 - 1022 7) 997 - 14 - 2744 - 75 - 1027 8) 15 - 14 - 2744 - 75 - 1027 9) 14 - 2744 - 2719 - 1088 - 1022 10) 14 - 1088 - 2744 - 78 - 883 - 1022 - 102

In questo caso gli attacchi da non considerare in quanto attacchi finali sul nodo obiettivo sono il 102 ed il 109. È immediatamente visibile che l’attacco 14, compare in tutti i pattern. Applicando la contromisura per questo unico attacco si bloccano tutte le sequenze coperte dai pattern. Anche l’attacco 2744 occorre in tutti i pattern ma dopo il 14. Volendo fermare un attaccante il prima possibile, per limitare i danni, è meglio applicare la patch all’attacco 14 piuttosto che al 2744. Inoltre, l’attacco 14 è incluso in 56 sequenze black swan che, per la minaccia M2, sono un totale di 60 come visibile dalla tabella 7.5.

Copertura di M3

Di seguito proponiamo un’analisi dettagliata della copertura della minaccia M3.