• Non ci sono risultati.

3.5 Descrizione dell'implementazione dello strumento

3.5.1 Interfaccia

Il package Interfaccia

è composto dalle classi che gestiscono l'interfaccia grafica dell'utente: • UtenteGui: interfaccia principale. Permette l'inserimento e la modifica degli attacchi, delle

minacce e dei componenti del sistema (sistema, componenti, vulnerabilità) e la produzione di simulazioni degli attacchi,

• TimeLine: consente una elementare visualizzazione dei tempi di una simulazione di attacco da parte della minaccia: gli eventi (scoperta vulnerabilità, esecuzione attacco,

raggiungimento obiettivo) vengono ordinati in ordine cronologico. I singoli eventi possono essere visualizzati tramite l'interfaccia EventGui.

• CheckBoxList: insieme a CheckBoxNodeEditor,

CheckBoxNodeRenderer e checkBoxNode permette la

creazione di una lista di checkBox selezionabili.

• NewAttaccoGui: finestra per inserire un nuovo attacco nel database.

• NewItemGui: finestra per inserire un nuovo componente o una vulnerabilità nel database.

• DynamicTree: struttura ad albero raffigurante il sistema analizzato

Illustrazione 15: esempio di CheckBoxNode

Illustrazione 14: Diagramma UML dei package del software

3.5.2 Model

Model

mantiene al suo interno le classi di utility utilizzate negli altri package e permette la comunicazione con il database:

Classi:

• StringUtil: ha metodi utility per la gestione dei vettori, degli array, delle stringhe

• Constants: contiene tutti i valori costanti, come i nomi delle tabelle e dei campi delle tabelle del database.

• DBProcedure: gestisce l'inserimento e la modifica degli item nel database.

• DBConnector: implementa le operazioni di query, insert e modify del database specificate nell'interfaccia DBConnectorInterface.

• Random: fornisce il software di numeri casuali. Usa il metodo Math.random() o la classe che implementa il generatore di numeri casuali Mersenne Twister.

3.5.3 Item

Item

comprende le classi che mantengono i metodi bean per le tabelle presenti nel database:

Classi:

• ItemMinaccia: descrive la minaccia. • ItemAttacco: descrive l'attacco elementare.

• ItemGroupSimulazioni: descrive un gruppo di simulazioni. • ItemSimulazione: descrive una simulazione.

• ItemSistema: descrive un sistema. Un sistema è un insieme di componenti. • ItemComponente: descrive un componente.

• ItemVulnerabilità: descriva una vulnerabilità.

3.5.4 Engine

Il package

Simulatore

permette la produzione di simulazioni di attacchi composti da parte di una minaccia.

• EngineVuln: motore della simulazione per la creazione degli eventi di scoperta della vulnerabilità (EventVulnerabilità).

• Engine: dato l'engineVuln calcola il tempo di creazione degli eventi di esecuzione degli attacchi (EventAttacco) e di conseguenza il raggiungimento degli obiettivi

(EventObiettivo).

• Event: superclasse dei tipi di evento (EventObiettivo, EventVulnerabilità, EventAttacco) • EngineAttackInterface: interfaccia per il motore di creazione degli eventi di attacco.

Le seguenti classi implementano l'interfaccia EngineAttackInterface e sono state sviluppate sia per la versione deterministica che per quella deterministica.

• EngineAttackSimpleS : la minaccia sceglie uno tra gli attacchi possibili.

• EngineAttackRandomS : la minaccia sceglie l'attacco in modo del tutto casuale.

• EngineAttackMinDifferenza : la minaccia cerca di minimizzare la differenza di diritti con il suo obiettivo.

• EngineAttackMaxProbabilità : la minaccia sceglie gli attacchi più probabili.

• EngineAttackMaxIncremento : la minaccia cerca di massimizzare il numero di diritti. • EngineAttackStandard : mantiene metodi utili a tutte le classi del package.

3.5.5 Simulazione

Simulazione mantiene le classi utili alla creazione dei thread che implementano le simulazione.

• GroupSimulazioniInterface: permette la produzione di simulazioni multiple che terminano in base ad un determinato criterio (numero di simulazioni, stabilità, confidenza).

• GroupSimulazioneNAttacchi: gruppo di simulazione che ha come criterio di interruzione il numero di attacchi per simulazione.

• GroupSimulazioneGiorni: gruppo di simulazione che ha come criterio di interruzione il periodo iniziale di partenza delle simulazioni.

• GroupSimulazioneTime: gruppo di simulazione che ha come criterio di interruzione il numero di intervalli delle simulazioni.

• GroupSimulazioneObiettivo: gruppo di simulazione che ha come criterio di interruzione il numero di obiettivi raggiunti.

• ThreadSimulazione: esegue una simulazione

• GroupEventVector: mantiene gli eventi successi in un determinato intervallo.

3.5.6 Grafo

Grafo

fornisce classi per la produzione dell'attack graph e per la sua visita : • Arco: attacco elementare.

• Nodo: mantiene lo stato dei diritti raggiunti dalla minaccia grazie all'attacco. Un nodo si definisce finale se non è possibile aggiungere nessun altro attacco.

• Percorso: insieme di nodi e archi a partire da un nodo radice sino ad un nodo finale. • GrafoAttacco: implementazione di attackGraph

• LivelloGrafo: restituisce i nodi distanti un certo numero di passaggi dal nodo radice root • NodoVisita: mantiene le informazioni in ogni nodo sulla visita dell'attack graph

4 Descrizione del database

Il database contiene sia l'input dello strumento che descrive il sistema sia le informazioni sulle simulazioni prodotte.

Il sottoinsieme del database che descrive il sistema contiene le seguenti tabelle: • attacco: contiene tutti i possibili attacchi

• componente: elenco dei componenti del sistema

• diritto: elenco di tutte le possibili precondizioni e postcondizioni degli attacchi • minaccia: elenco delle minacce

• obiettivo: obiettivo delle minacce

• sistema: elenco di tutti i sistemi presenti

• vulnAttacco: collega gli attacchi alle vulnerabilità • vulnerabilità: elenco delle vulnerabilità dei componenti Le tabelle che descrivono il risultato delle simulazioni sono:

• eventoAttacco: memorizza gli eventi di attacco delle simulazioni

• eventoObiettivo: memorizza gli eventi di raggiungimento dell'obiettivo da parte della minaccia

• eventoVulnerabilità: memorizza gli eventi di scoperta delle vulnerabilità

• simulazione: contiene tutte le informazioni che sintetizzano i risultati della simulazione (tempo, successo, tipo visita, lookahead minaccia, timelimit)

• groupSimulazione: memorizza la sintesi di un gruppo di simulazioni (numero delle simulazioni con successo, numero simulazioni totali, tipo visita)

I campi che prevedono l'inserimento di diritti (attacco.precondizione, attacco.postcondizione, minaccia.dirittiIniziali, obiettivo.diritti) richiedono la seguente formattazione:

<diritto1>- <diritto2>- ..<diritto n>-

Esempio di postcondizioni di un attacco :

Per semplificare l'analisi degli output del simulatore sono stati creati degli script nel linguaggio R (http://cran.r-project.org/) . Oltre a restituire le statistiche di interesse, questi script permettono anche di ricavare grafici, principalmente istogrammi e diagrammi a torta.

Gli script permettono di rispondere a queste domande: • qual'è l'attacco più usato?

• quali sono gli attacchi usati da una minaccia? • quali attacchi hanno successo?

• quali sono le vulnerabilità più sfruttate?

• quali sono le vulnerabilità usate da una minaccia? • qual'è la percentuale di successi di una minaccia? • qual'è la percentuale di successi?

• qual'è la percentuale di successi di tutte le minacce? • qual'è la simulazione più veloce?

• qual'è la durata media delle simulazioni?

• qual'è la durata delle simulazioni di una minaccia? • qual'è la simulazione con il minimo numero di attacchi? • qual'è la media del numero di attacchi delle simulazioni? • qual'è la vulnerabilità la cui scoperta è più probabile? • qual'è la minaccia con più tentativi di attacco falliti?

• qual'è la simulazione con il numero massimo di attacchi falliti? • qual'è l'obiettivo raggiunto con probabilità massima da una minaccia?

Per un analista è essenziale capire quali siano le vulnerabilità e gli attacchi più pericolosi che possono colpire il sistema.

Le simulazioni forniscono non solo la frequenza, ma anche il “tempo” degli eventi calcolati.

Questo concetto di “tempo”, di “durata” è importante almeno quanto la frequenza di scoperta degli eventi: esso fornisce un indicazione su quanto è necessario attendere prima che si verifichi un determinato evento.

In questo modo è possibile valutare la pericolosità degli eventi di interesse avendo una doppia scala di valutazione: per esempio un analista che vuole applicare delle patch ad un sistema informatico dovrà agire considerando maggiormente pericolosi quegli attacchi che a parità di frequenza sono stati eseguiti mediamente in meno tempo.

Stesso significato per la durata media delle simulazioni. Nell'analisi di una caso reale verrà valutata l'efficacia di alcune contromisure proprio osservando l'aumento del tempo medio di simulazione, cioè il tempo, espresso in quel caso in settimane, necessario ad una minaccia per poter eseguire gli attacchi necessari al conseguimento del proprio obiettivo.

5 Analisi di un caso reale

Si è scelto di applicare lo strumento sviluppato ad un un sistema reale per avere una valutazione più precisa delle potenzialità e della facilità d'uso dello stesso.

Documenti correlati