3.3 Struttura del database sorgente
3.3.1 La tabella Minacce
La tabella Minacce contiene le informazioni sulle caratteristiche delle minacce modellate utili a simularne le strategie d’attacco. La tabella contiene 6 istanze. Ogni istanza è descritta dai seguenti attributi:
• id: l’identificativo univoco della minaccia. È codificato con un numero intero. Il tipo di valore è INT(11).
• nome: il nome della minaccia. È codificato con una stringa di testo. Il tipo di valore è VARCHAR(4096).
• dirittiIniziali: l’insieme dei diritti iniziali della minaccia, sui nodi del sistema attaccato. È codificato con una lista di numeri interi, separati da un carattere “;”, in cui ogni numero identifica un particolare diritto. Il tipo di valore è LONGTEXT.
• dirittiInizialiS: l’insieme dei diritti iniziali della minaccia, sui nodi del sistema attaccato. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ogni stringa descrive un particolare diritto su un particolare nodo. Il tipo di valore è LONGTEXT.
• obiettivi: l’insieme degli obiettivi della minaccia. È codificato con una stringa di testo. Il tipo di valore è LONGTEXT.
• prioritaObiettivi: l’ordine di priorità degli obiettivi qualora questi fossero in numero maggiore di uno. È codificato con una lista di numeri interi, separati
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI da un carattere “;”, in cui ogni numero identifica un particolare obiettivo. Il tipo di valore è LONGTEXT.
• livelloRisorse: il livello delle risorse della minaccia. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45). • livelloRischio: il livello di pericolosità della minaccia per il sistema attaccato.
È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45).
• livelloInfoVuln: il livello di informazione della minaccia riguardo le vulnerabi- lità del sistema attaccato. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45).
• livelloInfoAttacchi: il livello di abilità della minaccia nell’eseguire gli attacchi. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45).
• rumoreTollerato: descrive il volume massimo del rumore prodotto dagli attacchi di una sequenza implementata dallaminaccia. È codificato con un numero intero. Il tipo di valore è INT(11).
• tempoReazioneDopoAtk: il tempo minimo che intercorre tra un attacco ed il successivo. È codificato con un numero intero. Il tipo di valore è INT(11). • probSuccesso: la probabilità di successo della minaccia di raggiungere l’obiet-
tivo prefissato. È codificato con un numero reale nell’intervallo [0, 1]. Il tipo di valore è DOUBLE.
• strategia: descrive la strategia adottata dalla minaccia per selezionare gli attacchi della sequenza. È codificato con una stringa di testo composta di due parti separate dal carattere “#”. La prima parte rappresenta la strategia mentre la seconda rappresenta il valore del parametro λ. Il tipo di valore è VARCHAR(100).
• numMaxFork: il numero massimo di attacchi in parallelo che una minaccia può eseguite. È codificato con un numero intero. Il tipo di valore è INT(11). • furbizia: la capacità della minaccia di selezionare gli attacchi da eseguire. È
codificato con un numero intero. Il tipo di valore è INT(11).
• tenacia: il numero massimo di ripetizioni, in una singola sequenza, di un attacco fallito. È codificato con un numero intero. Il tipo di valore è INT(11). La tabella 3.3 mostra una istanza esemplificativa della tabella Minacce.
ATTRIBUTO VALORE
id 3
nome minaccia4
dirittiIniziali 27;18;19;0;1;2;3;4;5;6;7;8;9;10;11;12;13 ... dirittiInizialiS admin 10.1.1.1;remote icmp:0 10.1.1.1 ... obiettivi (admin 10.9.1.1 OR dosDone 10.9.1.1)
prioritaObiettivi 1 livelloRisorse alto livelloRischio alto livelloInfoVuln alto livelloInfoAttacchi alto rumoreTollerato 1000000 tempoReazioneDopoAtk 2160 probSuccesso 1 strategia maxProbabilita#1 numMaxFork 1 furbizia 1 tenacia 4
Tabella 3.3: Istanza della tabella Minacce.
3.3.2
La tabella Attacchi
La tabella Attacchi contiene le informazioni relative agli attacchi modellati. La tabella contiene 2859 istanze. Ogni istanza rappresenta un attacco elementare che è descritto dai seguenti attributi:
• id: l’identificativo univoco dell’attacco. È codificato con un numero intero. Il tipo di valore è INT(11).
• nome: il nome dell’attacco. È codificato con una stringa di testo che de- scrive il tipo di vulnerabilità sfruttata e l’indirizzo IP del nodo target. Le due informazioni sono separate da un carattere “#”. Il tipo di valore è VARCHAR(4096).
• probSuccesso: la probabilità di successo dell’attacco. È codificato con un numero reale nell’intervallo [0, 1]. Il tipo di valore è DOUBLE.
• vulnerabilita: l’identificativo della vulnerabilità associata all’attacco. È codificato con numero intero. Il tipo di valore è INT(11).
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI • precondizioni: l’insieme dei diritti necessari per eseguire l’attacco. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ogni stringa descrive un particolare diritto. Il tipo di valore è VARCHAR(1000). • postcondizioni: l’insieme dei diritti acquisiti con il successo dell’attacco. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ogni stringa descrive un particolare diritto. Il tipo di valore è LONGTEXT. • livelloRisorse: il livello delle risorse necessario per l’esecuzione dell’attacco. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45).
• livelloRischio: il livello di pericolosità di un attacco. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45). • livelloInfo: il livello di informazione necessario per l’esecuzione dell’attacco. Quantifica la capacità necessaria, da parte di una minaccia, di sfruttare adeguatamente le informazioni sull’attacco per poterlo eseguire con successo. È codificato con uno dei tre possibili valori alto, medio e basso. Il tipo di valore è VARCHAR(45).
• durata: il tempo necessario all’esecuzione dell’attacco ed è espresso in secondi. È codificato con numero intero. Il tipo di valore è INT(11).
• rumore: descrive il rumore prodotto da un attacco. È codificato con numero intero. Il tipo di valore è INT(11).
• classe: la classe di appartenenza dell’attacco in relazione a determinate caratteristiche. È codificato con numero intero. Il tipo di valore è INT(11). La tabella 3.4 mostra una istanza esemplificativa della tabella Attacchi.
3.3.3
La tabella Gruppi
La tabella Gruppi contiene informazioni relative ai gruppi a cui sono associati gli attacchi modellati. Un gruppo identifica una macrocategoria di vulnerabilità secondo lo standard CWE. La tabella contiene 19 istanze. Ogni istanza è descritta dai seguenti attributi:
• id: l’identificativo univoco del gruppo. È codificato con un numero intero. Il tipo di valore è INT(11).
• descrizione: la descrizione del gruppo. È codificato con una stringa di testo. Il tipo di valore è LONGTEXT.
ATTRIBUTO VALORE
id 283
nome atk PHP < 4.4.8 Multiple Vulnerabilities#10.2.2.2
probSuccesso 0,9
vulnerabilita 283
precondizioni remote tcp:443 10.2.2.2 postcondizioni user 10.2.2.2;write 10.2.2.2;read 10.2.2.2 ...
livelloRisorse basso livelloRischio basso livelloInfo basso durata 1 rumore 1 classe 178
Tabella 3.4: Istanza della tabella Attacchi.
ATTRIBUTO VALORE
id 5
decrizione CWE-264
Tabella 3.5: Istanza della tabella Gruppi.
3.3.4
La tabella Mapping
La tabella Mapping contiene le associazioni degli attacchi con i relativi gruppi e nodi di riferimento. La tabella contiene lo stesso numero di istanze della tabella Attacchi ovvero 2859. Ogni istanza è descritta dai seguenti attributi:
• idAttacco: l’identificativo univoco dell’attacco. È codificato con un numero intero. È chiave esterna sulla tabella Attacchi. Il tipo di valore è INT(11). • idGruppo: l’identificativo del gruppo. È codificato con un numero intero. È
chiave esterna sulla tabella Gruppi. Il tipo di valore è INT(11).
• idNodo: l’identificativo del nodo. È codificato con un numero intero. È chiave esterna sulla tabella Host. Il tipo di valore è INT(11).
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI ATTRIBUTO VALORE
idAttacco 31
idGruppo 0
idNodo 32
Tabella 3.6: Istanza della tabella Mapping.
3.3.5
La tabella Host
La tabella Host contiene informazioni sui nodi del sistema. La tabella contiene 36istanze. Ogni istanza è descritta dai seguenti attributi:
• id: l’identificativo univoco del nodo. È codificato con un numero intero. Il tipo di valore è INT(11).
• nome: l’indirizzo IP del nodo. È codificato con una stringa di testo. Il tipo di valore è VACHAR(100).
• subnet: l’indirizzo IP della sottorete di appartenenza del nodo. È codificato con una stringa di testo. Il tipo di valore è VARCHAR(100).
La tabella 3.7 mostra una istanza esemplificativa della tabella Host. ATTRIBUTO VALORE
id 4
nome 10.2.2.1 subnet 10.2.2.0
Tabella 3.7: Istanza della tabella Host.
3.3.6
La tabella Run
La tabella Run contiene le informazioni relative alle simulazioni delle sequenze d’attacco. La tabella contiene 600.000 istanze. Il numero di istanze contenute nella tabella è il prodotto di tre fattori che sono:
• numero di run: il numero di simulazioni eseguite. Nel nostro caso di studio ne sono state eseguite 100.000;
• numero di esperimenti: il numero di esperimenti condotti per ogni simulazione. Nel nostro caso di studio è stato condotto solo un’esperimento per ogni simulazione.
• numero delle minacce: il numero delle minacce simulate per ogni esperimento. Nel nostro caso sono 6.
Dati i parametri di cui sopra, sia N il numero totale di istanze, N = 100000 × 1 × 6 = 600.000. Ogni istanza è descritta dai seguenti attributi:
• id: l’identificativo univoco della sequenza. È codificato con un numero intero. Il tipo di valore è INT(11).
• nomeProcesso: il nome del processo che genera la sequenza d’attacco. È codificato con una stringa di testo. Il tipo di valore è VARCHAR(100). • idRun: l’identificativo della simulazione. È codificato con un numero intero.
Il tipo di valore è INT(11).
• idEsperimento: l’identificativo dell’esperimento. È codificato con un numero intero. Il tipo di valore è INT(11).
• timelimit: il tempo limite massimo, espresso in secondi, di una simulazione. È codificato con un numero intero. Il tipo di valore è INT(11).
• idMinaccia: l’identificativo della minaccia che esegue la sequenza. È chiave esterna sulla tabella Minacce (attributo id). È codificato con un numero intero. Il tipo di valore è INT(11).
• strategia: la strategia adottata dalla minaccia. È codificato con una stringa di testo. Il tipo di valore è VARCHAR(200).
• scopertaVuln: l’insieme delle vulnerabilità scoperte. È codificato come stringa di testo. Il tipo di valore è TEXT.
• successo: l’esito della sequenza d’attacco. “1” in caso di di successo e “0” in caso di fallimento. È codificato con un numero intero. Il tipo di valore è INT(11).
• time: il tempo impiegato, espresso in secondi, per l’esecuzione dell’intera sequenza di attacco. È codificato con un numero intero. Il tipo di valore è INT(11).
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI • attacchiRiusciti: l’insieme degli attacchi eseguiti con successo. È codificato con una lista di numeri interi, separati da un carattere “-”, in cui ogni numero identifica un attacco ed è chiave esterna sulla tabella Attacchi (attributo id). Il tipo di valore è LONGTEXT.
• numAttacchiRiusciti: il numero di attacchi eseguiti con successo. È codificato con numero intero. Il tipo di valore è INT(11).
• eventiAtk: l’intera sequenza di attacco. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ogni stringa descrive un attacco. Ciascuna stringa è composta da una numero intero che identifica l’attacco ed è chiave esterna sulla tabella Attacchi (attributo id), una lettera “S” oppure “F” che ne descrive l’esito, rispettivamente successo o fallimento, ed un numero intero che rappresenta l’idTempo in cui è stato eseguito l’attacco. Il tipo di valore è LONGTEXT.
• numEventiAtk: il numero totale di attacchi di cui è composta la sequenza. È codificato con un numero intero. Il tipo di valore è INT(11).
• probEventiAtk: la probabilità degli eventi d’attacco della sequenza; è calcolata con la produttoria delle probabilità di successo di tutti gli attacchi di cui la sequenza è composta. È codificato con un numero reale nell’intervallo [0..1]. Il tipo di valore è DOUBLE.
• hostAtkConSuccesso: l’insieme dei nodi attaccati con successo. È codificato con una lista di numeri interi, separati da un carattere “-”, in cui ciascun numero identifica un nodo ed è chiave esterna sulla tabella Host (attributo id). Il tipo di valore è TEXT.
• numHostAtkConSuccesso: il numero totale di nodi attaccati con successo. È codificato con un numero intero. Il tipo di valore è INT(11).
• pingEseguiti: l’insieme dei Ping eseguiti nell’intera sequenza. È codificato con una lista di stringhe di testo separate da un carattere “;”. Ogni stringa idNodo:idTempo rappresenta un operazione di ping in cui idNodo è l’iden- tificativo del nodo sul quale viene effettuata ed idTempo è il tempo in cui viene eseguita a partire dall’inizio della sequenza d’attacco. Il tipo di valore è LONGTEXT.
• scanEseguiti: uno scan è una operazione con la quale si sonda un nodo della rete per scoprire quali sono le vulnerabilità che lo affliggono. Questo attributo rappresenta l’insieme delle operazioni di scan eseguite nell’intera sequenza. È codificato con una lista di stringhe di testo separate da un carattere “;”. Ogni
stringa idNodo:idTempo rappresenta un operazione di scan in cui idNodo è l’identificativo del nodo sul quale viene effettuata ed idTempo è il tempo in cui viene eseguita a partire dall’inizio della sequenza d’attacco. Il tipo di valore è LONGTEXT.
La tabella 3.8 mostra una istanza esemplificativa della tabella Run.
ATTRIBUTO VALORE id 600067 nomeProcesso locale idRun 40000 idEsperimento 1 timelimit 864000 idMinaccia 0
strategia random 1 deterministic
scopertaVuln 0:0..2858 successo 1 time 110147 attacchiRiusciti 1056-991-13-442-15-103 ... numAttacchiRiusciti 30 eventiAtk 1056S2235;991S5141;13S7303 ... numEventiAtk 50 probEventiAtk 0,0000000004791813 hostAtkConSuccesso 1;2;4;5;6;7;9;12;13;15;16;18 ... numHostAtkConSuccesso 21 pingEseguiti 1:1;8:2;9:3;2:2236;3:2237 ... scanEseguiti 1:35;8:43;9:74;2:2269 ...
Tabella 3.8: Istanza della tabella Run.
3.4
Fase di ETL
Si è reso necessario realizzare un piccolo script in linguaggio SQL (riportato in appendice) per la generazione di 3 tabelle aggiuntive. Queste tabelle contengono i dati, estratti dalle tabelle descritte nei sottocapitoli precedenti, che sono stati trattati per aderire alle nostre esigenze. Nello specifico è stato effettuato un raggruppamento degli attacchi in funzione dei nomi degli stessi. La parte finale del nome, che contiene l’indirizzo IP del nodo su cui è eseguito l’attacco, è stata rimossa. Questa nuova tabella, denominata Tipi, descrive tipologie di attacchi
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI con caratteristiche comuni. Chiaramente, dopo aver effettuato il raggruppamento e memorizzato i dati nella nuova tabella si è dovuto costruire una tabella che associasse l’attributo idAttacco della tabella Attacchi con l’attributo idT ipo della tabella Tipi. Questa nuova tabella prende il nome di Maptipi. Per finire, abbiamo costruito una tabella Data che associa i dati degli attacchi con idTipo, idGruppo, idNodo, precondizioni e postcondizioni. Quindi, in aggiunta alle tabelle elencate in tabella 3.2 il database si arricchisce con quelle elencate in tabella 3.9.
TABELLA DESCRIZIONE # RECORD
Tipi Descrizione dei tipi di attacco. 192 Maptipi Mappatura tra attacchi e tipi. 2859 Data Informazioni sugli attacchi. 2859
Tabella 3.9: Tabelle aggiunte con la fase di ETL.
Vediamo adesso nel dettaglio come sono strutturate queste tabelle.
3.4.1
La tabella Tipi
La tabella contiene le informazioni relative ai raggruppamenti degli attacchi operati sul campo nome della tabella Attacchi, dopo aver rimosso dallo stesso l’indirizzo IP del nodo associato all’attacco. La tabella contiene 192 istanze. Ogni istanza è descritta dai seguenti attributi:
• idTipo: l’identificativo univoco del tipo di attacco. È codificato con un numero intero. Il tipo di valore è INT(11).
• nome: descrive il tipo di attacco. È codificato con una stringa di testo. Il tipo di valore è LONGTEXT.
Le tabella 3.10 contiene una istanza esemplificativa della tabella Tipi.
ATTRIBUTO VALORE
idTipo 36
nome atk FileZilla Server < 0.9.31 Denial of Service
3.4.2
La tabella Maptipi
Questa tabella contiene informazioni sulle associazioni tra gli “idAttacco” della tabella Attacchi e gli “idTipo” della tabella Tipi. La tabella contiene 2859 istanze. Ogni istanza è descritta dai seguenti attributi:
• idAttacco: l’identificativo dell’attacco ed è chiave esterna sulla tabella Attacchi (attributo idAttacco). È codificato con un numero intero. Il tipo di valore è
INT(11).
• idTipo: l’identificativo del tipo di attacco ed è chiave esterna sulla tabella Tipi (attributo idT ipo). È codificato con un numero intero. Il tipo di valore è INT(11).
La tabella 3.11 contiene una istanza esemplificativa della tabella Maptipi. ATTRIBUTO VALORE
idAttacco 970
idTipo 19
Tabella 3.11: Istanza della tabella Maptipi.
3.4.3
La tabella Data
La tabella Data contiene tutte le informazioni sugli attacchi necessarie per la nostra analisi. La tabella contiene 2859 istanze. Ogni istanza è descritta dai seguenti attributi:
• idAttacco: l’identificativo dell’attacco ed è chiave esterna sulla tabella Attacchi (attributo idAttacco). È codificato con un numero intero. Il tipo di valore è
INT(11).
• idTipo: l’identificativo del tipo di attacco ed è chiave esterna sulla tabella Tipi (attributo idT ipo). È codificato con un numero intero. Il tipo di valore è INT(11).
• idGruppo: l’identificativo del gruppo di attacco ed è chiave esterna sulla tabella Gruppi (attributo idGruppo). È codificato con un numero intero. Il tipo di valore è INT(11).
• idNodo: l’identificativo del tipo di attacco ed è chiave esterna sulla tabella Host (attributo id). È codificato con un numero intero. Il tipo di valore è INT(11).
CAPITOLO 3. IL DATASET DI SIMULAZIONI DI ATTACCHI • pre: l’insieme dei diritti necessari per eseguire l’attacco. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ciascuna stringa descrive un particolare diritto. Il tipo di valore è VARCHAR(1000).
• post: l’insieme dei diritti acquisiti una volta eseguito l’attacco con successo. È codificato con una lista di stringhe di testo, separate da un carattere “;”, in cui ciascuna stringa descrive un particolare diritto. Il tipo di valore è LONGTEXT.
La tabella 3.12 contiene una istanza esemplificativa della tabella Data.
ATTRIBUTO VALORE idAttacco 4 idTipo 35 idGruppo 1 idNodo 0 pre remote tcp:0 10.1.1.1 post ... writeDone 10.1.1.1;...
Tabella 3.12: Istanza della tabella Data.