A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi Global Cyber Security Center (GSEC) UN’ANALISI MULTIDIMENSIONALE DI STATI CRITICI PER RILEVARE INTRUSIONI NEI SISTEMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) Sommario Una tendenza relativamente nuova nelle Infrastrutture Critiche (es., centrali elettriche, centrali nucleari, rete di distribuzione, ecc.) è la migrazione di massa dal classico modello di sistemi isolati, ad un modello di sistema-di-sistemi in cui le infrastrutture stanno intensificando le interconnessioni basate su tecnologie ICT. Il cuore ICT di questi impianti industriali è conosciuto come Supervisory Control And Data Acquisition Systems (SCADA). Le contromisure di sicurezza ICT tradizionali (es., firewall classici, anti-virus e IDS) non riescono a fornire una protezione completa per questi sistemi, in quanto le loro esigenze sono diverse da quelle dei sistemi ICT tradizionali. Questo articolo presenta un approccio innovativo per il rilevamento delle intrusioni di rete in sistemi SCADA basato sul concetto di analisi di stati critici e di prossimità da questi stati. Il framework teorico presentato è supportato da test effettuati con un prototipo di Intrusion Detection System (IDS) che implementa l’approccio proposto. 1. Introduzione Negli ultimi anni l’uso di Information and Communication Technology (di seguito ICT) nei sistemi industriali è aumentato enormemente, con un impatto drammatico sulla loro sicurezza. In questo lavoro l’attenzione è rivolta alla sicurezza dei sistemi SCADA (Supervisory Control and Data Acquisition). I sistemi SCADA sono ampiamente usati negli impianti industriali per il controllo e manutenzione dei sensori e degli attuatori. I componenti di base che caratterizzano un sistema SCADA sono: (a) Master Terminal Units (MTU) che presentano i dati agli operatori, raccolgono i dati dalla rete di campo e trasmettono i segnali di controllo; (b) Remote Terminal Unit (RTU), che inviano segnali di controllo ai dispositivi elettronici, acquisiscono dati da questi diSpeciale Sicurezza ICT A bstract Modern industrial systems (e.g., power plants, water plants, chemical installations, etc.) make increasing use of ICT technologies. In the last years, those systems started to use public networks (i.e., the Internet) for system-to-system interconnections. The core of these industrial installations is traditionally a SCADA (SystemControl And Data Acquisition) system. The characteristics of SCADA communication protocols and architectures are quite different from classical ICT devices, protocols and systems. For this reason, at the moment, traditional ICT security technologies are not able to effectively protect industrial systems in an adequate way against ad-hoc SCADA-tailored attacks. In this work we propose a novel approach to Intrusion Detection for SCADA systems based on the idea of Critical State Analysis. The presented theoretical framework is supported by tests made using an Intrusion Detection System (IDS) prototype implementing the proposed approach. spositivi, ricevono i comandi dagli MTU e trasmettono i dati alle MTU. La maggior parte delle vulnerabilità SCADA è legata ai protocolli di comunicazione utilizzate per lo scambio di comandi e dati tra i dispositivi master e slave. Le tecnologie di sicurezza ICT tradizionali non sono in grado (come dimostrato in [1]) di proteggere in modo efficace i sistemi industriali da attacchi ideati su misura dei sistemi SCADA. In questo lavoro viene presentato un nuovo approccio per rilevare attacchi ICT ai sistemi SCADA basato sul concetto di Analisi di Stati Critici. Le seguenti osservazioni sono alla base di questo approccio: 1) date le conseguenze di possibili incidenti, i sistemi industriali sono soggetti a processi di analisi della sicurezza, e quindi i possibili stati critici sono ben documentati. Inoltre, gli stati 13 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi critici possono essere considerati, per minimi sottosistemi, di numero finito e conosciuti a priori; 2) un attaccante che vuole danneggiare un sistema industriale deve interferire con lo stato dell’installazione, ad esempio forzando una transizione del sistema da uno stato sicuro ad uno stato critico; 3) monitorando l’evoluzione degli stati di una centrale, e tracciando se il processo industriale sta entrando in un sistema critico, è possibile rilevare tutte quelle tipologie di attacco (conosciuti o sconosciuti) che tentano di portare il sistema in uno stato critico usando una catena di comandi leciti; 4) nelle architetture SCADA, il principale vettore di attacchi informatici è il flusso di comandi di rete. Dal momento che il sistema IDS proposto tiene traccia della sequenza di pacchetti che porta il sistema in uno stato critico, salvando i dettagli dei pacchetti su un database remoto e usando la metrica di distanza per far partire il log della tale sequenza, è possibile discriminare tra gli stati critici dovuti ad attacchi informatici e quelli dovuti a malfunzionamenti o attacchi fisici. Questo approccio è stato introdotto per sopperire all’incapacità delle tecniche IDS tradizionali di rilevare le particolari tipologie di attacchi su SCADA basati su catene di comandi legittimi. 2. Lavori correlati Quello dell’Intrusion Detection è un campo di ricerca ben definito. Nel caso dei sistemi SCADA, tuttavia, solo di recente sono stati rilasciati una serie di regole ad hoc e di moduli di pre-processing [2] in grado di rilevare alcuni tipi di attacchi ai protocolli SCADA. Con queste regole un sistema di Network Intrusion Detection (NIDS) è in grado di identificare solo gli attacchi basati su un singolo pacchetto di rete; tuttavia gli attacchi SCADA raramente sfruttano un singolo pacchetto ([1], [7], [8], [9]); di conseguenza è necessario un meccanismo di correlazione dell’attacco. gross et al. [3] hanno proposto un meccanismo “collaborativo” di intrusion detection (“selecticast”) che utilizza un server centralizzato per l'invio di informazioni proveniente da sensori ID riguardanti attività provenienti da indirizzi IP sospetti. Questo approccio è utile per fornire un quadro più 14 ampio degli eventi sospetti che accadono nel sistema monitorato. Tuttavia, non fornisce alcun tipo di tecnica specifica per identificare azioni malevoli complesse e di alto livello. Ning et al. [6] hanno proposto un modello volto a individuare le relazioni di causa fra gli alert sulla base dei pre-requisiti e le conseguenze. L’approccio proposto da Cuppens e Miege in [5] adotta pre- e post-condizioni; purtroppo, questa tecnica può generare regole di correlazione spurie, aumentando il rumore del sistema IDS di alerting. Per quanto riguarda le soluzioni di sicurezza per ambienti industriali e sistemi SCADA, Nai et al. hanno presentato un primo IDS embrionale per protocolli SCADA [10] in cui è stato introdotto il concetto di state-based analysis. Il presente lavoro estende quest’ultimo concetto, presentando un framework teorico e applicativo completo, introducendo il concetto di previsione del livello di criticità degli stati del sistema. L’idea di individuare gli attacchi analizzando se il sistema sta entrando in uno stato critico ha alcune analogie con quanto è stato fatto nel campo di ricerca di Fault-Detection and Diagnosis. Più in dettaglio, l’approccio più simile è la model-based fault detection, che si avvale delle cosiddette limit-value based supervisory functions, per monitorare le variabili misurabili in cerca di valori non validi o, nel caso di funzioni di protezione automatica, per l’attivazione di opportune azioni di risposta per proteggere il processo (per i dettagli si veda [12], [13], [14]). Questi approcci non possono essere adottati per discriminare tra cyber-attacchi e guasti accidentali, e non forniscono una metrica di prossimità dagli stati critici che sia facilmente calcolabile, che è il principale contributo di questo lavoro. La situational awareness è un altro campo di ricerca che ha una certa somiglianza con il nostro approccio. La situational awareness è un componente chiave in ambienti critici ed è trattata da un gran numero di lavori accademici. Per una bibliografia su questo argomento si rimanda a [15]. generalmente l’inconveniente principale degli approcci di situational awareness risiede nella quantità enorme di dati da elaborare e nella mancanza di tecniche efficaci per la successiva valutazione di eventi che potrebbero essere fonte di minaccia. Un lavoro significativo in questo settore è [16]. 3. Analisi degli stati L’approccio proposto in questo lavoro si basa sul monitoraggio dell’evoluzione degli stati del sistema. Speciale Sicurezza ICT UN’ANALISI MULTIDIMeNSIoNALe DI STATI CRITICI PeR RILevARe INTRUSIoNI NeI SISTeMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) Da un punto di vista operativo, gli elementi seguenti sono necessari per monitorare e analizzare l’evoluzione di un sistema: • Un linguaggio di rappresentazione per descrivere in modo formale il sistema in esame. • Un linguaggio degli stati del sistema, per descrivere in modo formale gli stati critici associate al sistema in esame. • Un monitor dell’evoluzione degli stati, per seguire l'evoluzione del sistema. • Un rilevatore di stati critici, per verificare se lo stato del sistema evolve verso uno stato definito critico. • Una metrica di distanza da stati critici per calcolare quanto uno stato del sistema sia vicino agli stati critici. 3.1 Descrizione del sistema e rappresentazione degli stati critici Per la rappresentazione formale degli stati del sistema industriale abbiamo specificamente definito un nuovo linguaggio formale chiamato Industrial State Modeling Language (ISML). Questo linguaggio supporta i sistemi SCADA che utilizzano il protocollo MoDBUS, ma può essere facilmente esteso ad altri protocolli industriali. In ISML una regola ha la forma condition → action. Condition è una formula booleana composta dalla congiunzione di predicati che descrivono quali valori possono essere assunti dai diversi componenti critici connessi ai Programmable Logic Controllers (PLC). Più in dettaglio, ISML è definito in notazione standard BNf come segue: ⟨comp⟩ rappresenta un register; in MoDBUS: DI=Discrete Input (1-bit Ro register), Co=Coil(1bit RW register), IR=Input Register(16-bit Ro register) e HR=Holding Register (16-bit RW register). Lo stato del sistema viene definito dai valori dei Speciale Sicurezza ICT componenti del sistema. Il linguaggio ISML viene utilizzato (a) per fornire una descrizione dettagliata del sistema da monitorare, la quale verrà utilizzata per generare il sistema “virtuale” utilizzato dall’IDS, e (b) per descrivere una classe particolare di stati del sistema chiamato stati critici che corrispondono a situazioni pericolose o indesiderate. Per ogni stato critico è possibile specificare il livello di rischio. Il valore 1 corrisponde a uno stato basso rischio critico (ad esempio il sistema è in esecuzione ma non in modo ottimale). Il valore 5 corrisponde a un stato critico pericoloso per il sistema. Esempio 1: Si consideri un sistema composto da una turbina e da un sensore di temperatura, entrambi connessi a due PLC. I PLC sono identificati dal loro indirizzo IP e dalla porta. PLC[10.0.0.10:502] è connesso ad una turbina con un holding register che permette di regolare la velocità di rotazione, mentre PLC[10.0.0.22:502] è connesso ad un sensore di temperatura e il suo valore è memorizzato in un input register. Il sistema è in uno stato critico (con livello di rischio 4) se la temperatura è maggiore di 99˚C e la turbina gira a meno di 1000 giri al minuto. Questo stato critico può essere formalizzato in ISML come segue: L’IDS lancia un avvertimento se la formula critica è soddisfatta. 3.2 Monitoring dell’evoluzione del sistema Uno State Evolution Monitor (SeM) è un componente software che tiene traccia dell’evoluzione dello stato del sistema. Nell’approccio presentato, la descrizione formale del sistema, definita tramite il linguaggio ISML, viene usata per creare un’immagine software virtuale del sottosistema monitorato. ogni elemento è rappresentato in memoria. In questo modo viene creata una mappa in memoria dei PLC e dei Master. L’immagine virtuale contenuta in SeM è popolata ed aggiornata usando il traffico di controllo scambiato tra i dispositivi master e slave. In altre parole, assumendo che il traffico che va dal master allo slave contiene una compatta rappresentazione dell’evoluzione del sistema, usando lo sniffing del traffico è possibile mantenere nella memoria di SeM una riproduzione dello stato del sistema reale. Inoltre, per garantire una stretta sincronizzazione tra 15 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi il sistema virtuale e quello reale, SeM contiene un emulatore di master per eseguire direttamente query sui PLC del sistema; per limitare la sua interferenza con il sistema, è possibile definire un “tempo di invecchiamento” per ogni register e coil presenti nel sistema virtuale, oltre il quale l’emulatore master può eseguire una query diretta al PLC. L’accesso alla memoria per aggiornare il sistema virtuale potrebbe essere potenzialmente costoso. Nel prototipo realizzato tutti i componenti virtuali sono indicizzati utilizzando una tabella di hash per fornire accesso diretto a ogni elemento. importante notare che gli allarmi sono sollevati dall’occorrenza di uno stato critico, e non da un particolare schema di attacco. La descrizione di uno stato critico agisce come un “aggregatore di schemi di attacchi”, raggruppando nella descrizione di un singolo stato critico tutti quei tipi di attacchi (conosciuti o sconosciuti) che possono condurre il sistema in quel particolare stato critico. Usando questo approccio è possibile rilevare gli attacchi cosiddetti zero-day (cioè non ancora scoperti) che portano il sistema in stati critici conosciuti. ogni possibile stato del sistema è descritto dai valori che i componenti del sistema possono assumere. Un certo stato di un sistema di n componenti può essere rappresentato da un vettore s ∈ ℝn. L’esempio 1 può essere rappresentato con uno stato s ∈ ℝ2, dove il valore della velocità della turbina è mappato su s1, mentre il valore del sensore di temperatura su s2. L’insieme di stati critici CS ⊆ ℝn è l’insieme degli stati che soddisfano le condizioni critiche descritte nella Sezione 3.1. Sia s(t) lo stato del sistema al tempo t. Possiamo dire che il sistema in esame è in uno stato critico se s(t) ∈ CS. Stabilire se un certo stato s è critico significa verificare se s verifica una qualche formula critica in CS. Dato uno stato s e una formula critica φ, verificare se s soddisfa φ corrisponde a valutare la formula φ usando i valori rappresentati da s. La complessità computazionale per valutare φ è lineare rispetto al numero dei predicati che compaiono nella formula. Anche se la valutazione di una formula può essere effettuata facilmente con una semplice visita del suo albero di sintassi, abbiamo usato una rappresentazione in memoria della formula basata su vincoli di intervallo, come descritto nella Sezione 4. La valutazione delle formule critiche usando questa rappresentazione ha la stessa complessità della visita dell’albero di sintassi, ma tale rappresentazione presenta dei vantaggi per calcolare la misura di prossimità dagli stati critici. Dal punto di vista operazionale, il Critical State Analyzer controlla se lo stato contenuto in SeM corrisponde ad almeno uno degli stati critici specificati. In tal caso solleva un allarme, memorizzando i dettagli sui pacchetti che hanno causato il sistema critico. In questo modo è possibile discriminare tra gli attacchi informatici e i fallimenti o attacchi fisici. È In questa sezione presentiamo un modo di predire se il sistema sta andando verso uno stato critico. Il metodo si basa sulla nozione di distanza dagli stati critici. Tracciando i cambiamenti della distanza del sistema corrente dagli stati critici è possibile predirne la criticalità. Il sistema virtuale descritto nella sezione precedente è usato per tracciare lo stato corrente del sistema, e la distanza dagli stati critici è calcolata usando i valori del sistema virtuale. 3.3 Rilevamento degli stati critici 16 4. Metrica multidimensionale per Stati Critici 4.1 Distanza stato-stato La nozione di distanza è parametrica rispetto alla metrica sullo spazio degli stati di sistema. Sia d: ℝn × ℝn → ℝ+ una qualunque metrica su ℝn. In altre parole, sia d una qualunque nozione di distanza tra due stati del sistema. In questo lavoro due distanze sono particolarmente interessanti: La distanza d1 è anche detta in letteratura distanza di Manhattan. La distanza dv conta il numero dei componenti di sistema che hanno valore diverso nei due stati. Nell’esempio 1, d1 calcola quanto l’attuale velocità della turbina e temperatura sono vicine ai valori critici. Sia s = (999, 100) uno stato critico (cioè lo stato in cui la velocità della turbina è di 999 giri al minuto e la temperatura è 100˚C). Siano u = (999, 30) e v = (999, 50) due stati. I valori della distanza d1(u, s) = 70 e d1(v, s) = 50 indicano che lo stato v è più vicino allo stato critico s di quanto lo sia lo stato u, cioè secondo la distanza d1 lo stato u è più sicuro di v. D’altra parte, i valori dv(u, s) = 1 e dv(v, s) = 1 indicaSpeciale Sicurezza ICT UN’ANALISI MULTIDIMeNSIoNALe DI STATI CRITICI PeR RILevARe INTRUSIoNI NeI SISTeMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) no che u e v distano dallo stato critico s allo stesso modo. Infatti, sia nello stato u che in v solo un componente di sistema (il sensore di temperatura) ha un valore differente dallo stato s. La scelta effettiva della distanza d1 o dv dipende dalla nozione di criticalità che si vuole catturare. Quando si è interessati soltanto al numero di componenti che si avvicinano ai valori critici, allora la distanza dv è più appropriata. Quando invece si è interessati proprio ai valori che si avvicinano a quelli critici, allora la distanza d1 è più appropriata. 4.2 Distanza stato-stati critici Data una qualsiasi distanza su ℝn (ad esempio le distanze d1 e dv definite in precedenza), la nozione di distanza tra uno stato e un insieme di stati può essere definita come: Come definito in letteratura standard, dato un insieme di numeri reali A ⊆ ℝ, l’espressione inf A denota il massimo dei minoranti (greatest lower bound) di A, cioè inf A = max{x ∈ ℝ ∣ ∀y ∈ A. x ≤ y}. Inoltre, inft ∈ S d(s, t) = inf {d(s, t) ∣ t ∈ s} per ogni s. La definizione di d(s, S) ricalca il senso comune di distanza tra un punto ed un insieme di punti. La nozione di distanza tra uno stato del sistema e l’insieme degli stati critici sarà indicata con d(s, CS). È fondamentale sottolineare che questa distanza è completamente parametrica rispetto alla metrica scelta su ℝn. 4.3 Valutazione della distanza Il calcolo della distanza d(s, CS) definita in precedenza non segue direttamente dalla sua definizione. Per un’implementazione efficiente è necessario usare la forma matematica dell’insieme di stati critici. Il linguaggio delle condizioni critiche implica che, per ogni formula delle regole, i valori critici di ogni componente appartengono ad intervalli (limitati o illimitati) di numeri reali. Questa informazione è usata per calcolare la distanza in modo efficiente. Un vincolo C = I1, …, In è una sequenza di n intervalli su ℝ, dove n è il numero di componenti del sistema. Un vincolo indica gli intervalli di valori critici per ogni componente di sistema. Uno stato s è critico rispetto ad un vincolo C se Speciale Sicurezza ICT per ogni i = 1, …, n, il valore dell’i-esimo componente si ∈ Ii. ogni formula critica φ può essere rappresentata da uno o più vincoli. Un insieme di vincoli {C1, …, Ck} è equivalente ad una formula φ se per ogni stato s che soddisfa φ esiste almeno un vincolo Cj tale che s è critico rispetto a Cj. Considerando l’esempio 1, sia φ = PLC[10. 0. 0. 10: 502]. HR[1] ≠ 50 una formula critica. Non è possibile trovare un vincolo equivalente a φ. Tuttavia, siano C1 = [-∞, 49], [-∞, +∞] e C2 = [51, +∞], [-∞, +∞] due vincoli. L’insieme di vincoli {C1, C2} è equivalente a φ, infatti ogni stato che soddisfa φ soddisfa anche {C1, C2}, e viceversa. La nozione di insieme di vincoli equivalenti è la base per implementare un’opportuna rappresentazione di memoria delle formule critiche. Nella fase di inizializzazione dell’IDS ogni formula viene convertita nel suo insieme di vincoli equivalenti. Considerando l’esempio 1, sia: una formula critica. Tramite il parsing della formula φ è possibile creare gli intervalli critici di ogni componente di sistema che compare nella formula. In questo caso, l’insieme di vincoli equivalenti a φ è costituito da un solo vincolo C = [3, 50], [30, +∞]. Sia {C1, …, Ck} l’insieme di vincoli equivalenti ad una formula φ. valgono le seguenti uguaglianze: La distanza d(s, CS) = minφ d(s, φ) può essere calcolata usando le equazioni (1) e (2), implementate con due cicli annidati, uno sui vincoli creati nella fase di inizializzazione, l’altro sugli intervalli che compaiono in ogni vincolo. La complessità è lineare nel numero di predicati che compaiono nelle formule critiche. L’equazione (2) è parametrica rispetto all’effettiva distanza usata. Precisamente, la funzione d(si, Ii) nella parte destra dell’equazione può essere sostituita sia con di che con dv. Le definizioni seguenti permettono di implementare facilmente l’algoritmo di calcolo delle distanze: 17 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi lo Modbus su TCP e PLC della famiglia ABB AC800. La figura 1 mostra uno schema del dispositivo elettromeccanico fisico utilizzato per le simulazioni, mentre una descrizione dettagliata dell’ambiente sperimentale può essere trovata in [8]. dove inf I e sup I sono rispettivamente l’estremo inferiore e superiore dell’intervallo I. Riassumendo, per calcolare la distanza d(s, CS) tra uno stato del sistema e l’insieme di stati critici, usando la distanza di Manhattan d1 e la distanza discreta dv, è sufficiente calcolare l’insieme di vincoli equivalenti di ciascuna formula durante la fase di inizializzazione. Durante l’evoluzione del sistema, la criticalità dello stato corrente e la prossimità dagli stati critici possono essere calcolati implementando le equazioni (1) e (2). La scelta effettiva delle due metriche d1 e dv dipende dalla nozione di distanza scelta. 5. Esperimenti e risultati In questa sezione sono descritti alcuni test su un nostro prototipo che implementa l’approccio che abbiamo descritto. I test sono stati effettuati nel laboratorio Testbed for Industrial Networking Security del Joint Research Centre. Questo laboratorio è stato creato grazie ad una attività di ricerca di collaborazione tra il Dipartimento di Ricerca di enel SpA e il Joint Research Centre della Commissione europea. Il laboratorio contiene un ambiente protetto in cui un complesso dispositivo elettromeccanico costituito da tubi, valvole, sensori, pompe, ecc. viene utilizzato per emulare fisicamente i diversi stati di una centrale elettrica reale. Nei nostri test abbiamo usato il protocol- Figura 1: Schema dell'ambiente di simulazione nel nostro laboratorio. 18 5.1 Scenario Boiling Water Reactor Lo scenario del Boiling Water Reactor (BWR) in figura 2 mostra un reattore nucleare usato per generare energia elettrica. Il BWR in figura è volutamente semplificato. Il serbatoio a pressione del reattore contiene gli elementi di combustibile e le barre di controllo assorbiti in acqua leggera. gli elementi di combustibile riscaldano l’acqua per produrre vapore. Il vapore raggiunge la turbina principale attraverso la linea di vapore e lo fa ruotare. Il vapore utilizzato è pilotato verso il condensatore dove viene condensato in acqua. L’acqua risultante viene pompata nuovamente nel serbatoio del reattore. I PLC sono programmati con la seguente logica: PLC1: controlla il sensore di temperatura dell’acqua nel serbatoio e la velocità di Pump 2. Questi valori vengono memorizzati nei registri IR1 e HR1. PLC1 aumenta la velocità della Pump 2, se la temperatura è troppo elevata, al fine di aumentare il flusso di acqua fredda e per ridurre la temperatura del serbatoio. PLC2: controlla il sensore di pressione collegato alla IR2 e la valvola di controllo VOUT collegata a HR2, che contiene un valore che rappresenta l’apertura della valvola (0 chiusa - 100 aperto). Quando la pressione è troppo elevata, PLC2 apre la valvola VOUT per espellere il vapore e per ridurre la pressio- Figura 2: Schema del Boiling Water Reactor. Speciale Sicurezza ICT UN’ANALISI MULTIDIMeNSIoNALe DI STATI CRITICI PeR RILevARe INTRUSIoNI NeI SISTeMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) ne interna. PLC3: controlla il sensore di temperatura del condensatore collegato al IR3 e la velocità di Pump 1 collegata a HR3. Come PLC1, quando la temperatura del condensatore è troppo alta, PLC3 aumenta la velocità della pompa in modo da aumentare il flusso di acqua fredda e per condensare il vapore. La descrizione formale del sistema tramite ISML è un insieme di predicati che specificano lo stato del sistema, ad esempio: dove i valori nella parte destra degli assegnamenti sono i valori iniziali del sistema, e che sono automaticamente sincronizzati con il sistema reale grazie all’emulatore master. Di seguito è mostrato un insieme di regole critiche di esempio che rappresentato possibili stati critici per lo scenario BWR. Il significato delle regole è il seguente: (R1) Se la temperatura è maggiore di 120˚C e la velocità di Pump 2 è minore di 40 rpm, allora il sistema è in uno stato critico perché la temperatura dell’acqua è alta ma la velocità della pompa non è sufficiente a ridurre la temperatura del serbatoio. (R2) Se la pressione è maggiore di 80 bar e la valvolare è aperta meno del 50%, allora il sistema è in uno stato critico perché la pressione è alta, ma la valvola non è sufficientemente aperta per espellere il vapore e ridurre la pressione interna. (R3) Se la temperatura è maggiore di 100˚C e Pump 1 è minore di 60 rpm, allora il sistema è in uno stato critico perché la temperatura del vapore è alta, ma la velocità della pompa non è sufficiente a ridurre la temperatura del condensatore. esempio di distanza: Si consideri la regola (R1) e si assuma che PLC[1].IR[1] sia mappato su s1 e PLC[1].HR[1] su s2. L’insieme di vincoli equivalenti alla formula critica contenuta nella regola (R1) è l’insieme {C1 =[120,+∞],[-∞,40]}. Sia s1 =(100,45) lo stato corrente. La distanza tra s e la formula (R1) è calcolata nel modo seguente: Speciale Sicurezza ICT In questo esempio l’insieme di vincoli equivalenti a (R1) contiene un solo vincolo. Se l’insieme è più di un vincolo, lo stesso calcolo deve essere ripetuto per ciascun vincolo e il valore finale della distanza è il minimo tra i valori calcolati. 5.2 Analisi dell’accuratezza Uno dei parametri più importanti da prendere in considerazione quando si valuta un IDS è l’accuratezza, cioè in quale misura sia in grado di identificare correttamente una condizione (nel nostro caso la presenza di uno stato critico). Nella letteratura scientifica di Intrusion Detection, l’accuratezza viene comunemente misurata in termini di falsi positivi e falsi negativi, cioè si considera rispettivamente il numero di falsi allarmi sollevati e il numero di attacchi che non vengono identificati. Per misurare l’accuratezza degli IDS, abbiamo messo a punto il seguente esperimento: un data set è stato creato attraverso la raccolta di traffico di rete nel nostro laboratorio ICS per quindici giorni. Il data set è costituito da traffico SCADA standard che riflette le tipiche attività industriali, più del traffico random generato simulando attacchi che mirano a stati critici. L’approccio proposto è inteso come una funzione aggiuntiva da aggiungere a IDS esistenti, per fare in modo di individuare una particolare classe di attacchi contro i sistemi SCADA. Per questo motivo, abbiamo valutato la sua accuratezza rispetto alla tipologia di attacchi composti da sequenze di comandi SCADA leciti. vale la pena notare che la congestione del traffico di rete influisce sulla precisione delle IDS. Come sottolineato in precedenza, in caso di un’alta congestione della rete l’immagine del sistema virtuale potrebbe essere leggermente diversa dal sistema attuale, a causa della perdita di pacchetti. Quando ciò accade, le regole di stati critici vengono valutate usando valori di stato che non sono pienamente coerenti con quelli dello stato reale, con conseguenti falsi positivi o falsi negativi. Per catturare questo aspetto abbiamo immesso nel traffico di rete, 19 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi Figura 3: Risultati falsi positivi e negativi. Tabella 1: Risultati di accuratezza per falsi positivi e negativi. in modo casuale, dei pacchetti con alti tassi di banda. La Tabella 1 fornisce un quadro del numero di allarmi, veri e falsi, generati al giorno. L’esempio mostra chiaramente che il numero di allarmi veri è molto superiore a quello di falsi allarmi. Approssimativamente il 99% degli allarmi generati sono “true positive”, mentre meno dell’1% del totale sono “false positive”. facciamo notare che l’accuratezza in questo contesto si riferisce alla specifica classe di attacchi per i quali il nostro approccio è stato studiato, e cioè quegli attacchi costituiti da sequenze di comandi SCADA legittimi ma che portano il sistema in uno stato critico. Monitorando il sistema con l’approccio proposto, un falso positivo o un falso negativo potrebbero occorrere nel caso di de-sincronizzazione del sistema virtuale da quello reale. Un ruolo importante è svolto dall’emulatore Master che si trova all’interno dell’IDS: più il tempo di richieste di sincronizzazioni è veloce, minore è il rischio di de-sincronizzazione del sistema virtuale. Da questo punto di vista i test precedenti possono essere anche considerati come 20 misura della robustezza contro falsi positivi e negativi causati da de-sincronizzazione. D’altra parte, una sincronizzazione eccessivamente veloce e ripetuta potrebbe interferire molto con il sistema monitorato. Il compromesso tra la frequenza di richieste di sincronizzazione e l’interferenza con il sistema dipende fortemente dal sistema. I parametri che devono essere considerati per definire la frequenza di query appropriata sono: (a) l’architettura di sistema (ad es., se il sistema è composto da connessioni di rete ridondanti, allora le connessioni di backup potrebbero essere usate per le query di sincronizzazione); (b) l’hardware del sistema (ed es., la potenza computazionale e di rete dei PLC); (c) i requisiti di real-time del sistema. La stima della corretta frequenza di query può essere considerata parte dell’usuale fase di messa a punto, tipica di ogni IDS. Il giusto compromesso tra il tempo di sincronizzazione e l’interferenza con il sistema può essere determinato sulla base di test ed esperimenti ad-hoc. 5.3 Test di performance Questa sezione descrive i test effettuati con una configurazione che abbiamo chiamato “four subsystem scenario” (fSS). Questo scenario è stato implementato per misurare i tempi di latenza e di ritardo dell’IDS. L’fSS è composto da quattro master connessi a 16 PLC configurati con almeno 100 porte di input analogiche e digitali. 5.3.1 Test sull’uso della memoria L’evoluzione delle performance di uso di memoria è mostrato nel seguito. Ci sono due strutture dati che di dimensione considerevole nel nostro IDS: l’immagine virtuale del sistema e la rappresentazione in memoria delle regole. La struttura per il sistema virtuale consiste in una hash table che identifica ogni PLC con una chiave unica. La quantità di memoria richiesta per Speciale Sicurezza ICT UN’ANALISI MULTIDIMeNSIoNALe DI STATI CRITICI PeR RILevARe INTRUSIoNI NeI SISTeMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) Tabella 2: Memoria per PLC. Tabella 4: Memoria per regola singola. Tabella 3: Memoria per VS. Tabella 5: Memoria per insieme di regole. ogni oggetto PLC cresce in modo lineare con il numero di registri del PLC. La memoria richiesta per l’intero sistema virtuale cresce linearmente con il numero di PLC del sistema da monitorare. La Tabella 2 mostra l’uso di memoria per ogni PLC, e la Tabella 3 mostra l’uso di memoria per il sistema virtuale contenente PLC di 65535 registri (che è il massimo numero permesso dalle specifiche Modbus [4]). L’altra importante struttura dati è usata per rappresentare le regole di stati critici. Questa struttura dati è una lista di liste, dove ogni sotto-lista rappresenta una regola. La memoria richiesta per ogni regola cresce in modo lineare con il numero di condizioni presente nella regola, e la memoria necessaria per l’intero insieme di regole cresce linearmente con il numero di regole. La Tabella 4 mostra l’uso di memoria per ogni regola e la Tabella 5 mostra l’uso di memoria per ogni intero insieme di regole (da 1 a 2000 regole, ciascuna composta da 4 condizioni). 5.3.2 Test per Packet Capturing Le performance di cattura dei pacchetti del nostro prototipo è stata testata mandando un alto numero di pacchetti con un bit rate molto alto. I Tabella 6: Test per cattura di pacchetti e allarmi sollevati. Speciale Sicurezza ICT risultati sono mostrati in Tabella 6. In questo scenario l’IDS è sottoposto a burst di 400000 pacchetti consecutivi (con bit rate crescente). Nei nostri test, il comportamento dell’IDS risulta affidabile, dal momento che nel caso peggiore (traffico di 2,77 Mbit/sec) solo lo 0.0079% dei pacchetti e lo 0.0158% degli alert sono andati persi (in Tabella 6 sono mostrati solo gli alert che sono stati persi a causa della perdita di pacchetti). Come prevedibile, il numero di pacchetti persi e di alert persi cresce all’aumentare del traffico, come mostrato in figura 4. Quando il rate di traffico è al di sotto di 1,215 Mbit/sec non c’è alcun pacchetto perso, e anche quando il traffico diventa alto (oltre 2 Mbit/sec) la percentuale di pacchetti persi rimane sotto lo 0,008%. 5.3.3 Test dell’aggiornamento del sistema virtuale L’IDS, ogni volta che cattura un pacchetto di rete che rappresenta un comando o un messaggio SCADA, aggiorna l’immagine del sistema virtuale (System Virtual Image, SvI) in due passi: trova il PLC relativo al comando, e aggiorna i valori dell’oggetto che rappresenta quel PLC. Il primo passo non è rilevante per quanto riguarda le performance dell’IDS in quanto la lista di PLC è implementata da una hash table, quindi il tempo impiegato per trovare un PLC (circa 0,0042 ms secondo le nostre misure) è praticamente identico per tutte le tabelle che contengono da 1 a 1000 PLC. Per misurare il tempo impiegato per aggiornare le informazioni dei 21 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi Tabella 7: Performance dell'analizzatore di regole di stati critici (Tempo in ms). 5.3.4 Test dell’analizzatore delle regole di stati critici Figura 4: Test sulla cattura di pacchetti e allarmi sollevati. Figura 5: Performance degli aggiornamenti del sistema virtuale. PLC è stato impiegato il test seguente: la Master Station manda 1000 richieste con il comando “Read n coils”, e la Slave Station risponde con dei messaggi che contengono gli n valori richiesti. L’IDS cattura le transazioni richiesta/risposta e aggiorna gli n valori nell’immagine virtuale del PLC. I risultati dimostrano la validità dell’approccio. Infatti, anche nel peggior caso, cioè 2000 coil da aggiornare (che è il valore massimo consentito dalle specifiche Modbus [4]), la performance dell’IDS rimane sotto 1 ms. Inoltre, il tempo impiegato cresce con il numero di coil da aggiornare in modo lineare, come mostrato nel grafico di figura 5. 22 La performance dell’analizzatore delle regole di stati critici dipende da due fattori: la dimensione di ogni regola e la quantità di regole. L’impatto della dimensione delle regole è stata misurata come segue: la Master Station manda 1000 richieste generiche e la Slave Station risponde con il messaggio appropriato, l’IDS cattura le transazioni richiesta/risposta e controlla se il sistema virtuale sta entrando in uno degli stati critici definiti da un file di regole che contiene solo una regola con n condizioni (in questo caso, 2 condizioni). L’impatto del numero di regole sulla performance dell’IDS è stato testato aumentando il numero di regole e tenendo fissa la dimensione di ogni regola. I risultati sono mostrati in Tabella 7. È importante notare che il tempo impiegato per un numero di condizioni fino a 2048 rimane inferiore ad 1 ms. Questo risultato è soddisfacente, dal momento che è altamente improbabile avere delle regole con 2048 condizioni. Inoltre, questi test mostrano che il collo di bottiglia per le performance IDS è l’analizzatore delle regole di stati critici, specialmente quando il numero di regole è alto. In ogni caso, il tempo impiegato è inferiore 1 ms con un numero di regole che arriva fino a 2000. 5.4 Test di performance della distanza Alla luce dell’implementazione descritta, abbiamo effettuato i test seguenti: 1. Test sui predicati: l’insieme di regole è composto da soltanto una formula critica che ha un numero variabile di predicati (fino a 2000) Speciale Sicurezza ICT UN’ANALISI MULTIDIMeNSIoNALe DI STATI CRITICI PeR RILevARe INTRUSIoNI NeI SISTeMI SCADA (STATe evoLUTIoN ANALySIS foR DeTeCTINg ATTACkS IN SCADA SySTeMS) 8.A 8.B Tabella 8: Test sulla performance del calcolo della distanza relativi allo stesso componente di sistema. 2. Test sui componenti di sistema: l’insieme di regole è composto da soltanto una formula critica che ha un numero variabile di predicati (fino a 2000) relativi a differenti componenti di sistema. 3. Test sulle regole: l’insieme di regole è composto da un numero variabile di regole (fino a 2000). I risultati dei test sono mostrati nella Tabella 8. Ciascun test conferma che il tempo richiesto per calcolare la distanza è lineare con il numero dei predicati. Nel test 1, il tempo impiegato per calcolare la distanza (Tabella 8.A) è trascurabile, soprattutto considerando che una lista di 2000 predicati per un singolo componente è improbabile. Nel test 2, il tempo speso per calcolare la distanza (Tabella 8.B) è inferiore a 6 ms, che è un buon risultato. Nel test 3, il tempo speso per calcolare la distanza (Tabella 8.C) è considerevolmente più alto, ma comunque la crescita è lineare e il tempo massimo è inferiore a 60 ms fino a 2000 regole che è un tempo più che accettabile per sollevare degli alert. 6 Conclusioni Questo articolo presenta un nuovo approccio per il rilevamento di una particolare classe di attacchi informatici nei confronti delle installazioni indu- 8.C striali. gli aspetti chiave di questa tecnica solo il concetto di stato critico e l’assunzione che un attaccante che vuole danneggiare un’installazione industriale (come una centrale elettrica) dovrà modificare, per raggiungere il suo risultato, lo stato del sistema e portarlo da uno stato sicuro ad uno stato critico. L’identificazione degli stati critici, che è difficilmente applicabile ai sistemi ICT tradizionali, trova invece la sua naturale applicazione nel campo dei controlli industriali, dove gli stati critici sono in generale ben conosciuti e di numero limitato. Dal momento che il rilevamento è basato sull’analisi dell’evoluzione del sistema e non sull’analisi dell’evoluzione dell’attacco, l’IDS è anche in grado di rilevare, per gli stati critici conosciuti, i cosiddetti attacchi “zero-day” (cioè sconosciuti). L’articolo introduce una metrica multidimensionale che fornisce una misura della distanza tra un certo stato e l’insieme di stati critici. La metrica è parametrica rispetto a due possibili concetti di distanza tra stati, a seconda se è più importante il numero dei componenti di sistema che si stanno avvicinando a valori critici, oppure sono i valori stessi di tali componenti ad essere importanti. Questa metrica può essere usata per tracciare l’evoluzione del sistema, indicando la sua prossimità dall’insieme di stati critici predefiniti. I risultati dei test condotti su un nostro prototipo che implementa l’approccio descritto dimostrano l’effettiva fattibilità e validità del metodo proposto. BIBLIOGRAFIA [1] [2] [3] [4] I. Nai fovino, A. Carcano, M. Masera, A. Trombetta, “An experimental investigation of malware attacks on SCADA systems”, International Journal of Critical Infrastructure Protection, 2(4): 2009. http://www.digitalbond.com/index.php/research/ids-signatures/modbus-tcp-ids-signatures/, last access 30/04/2010. P. gross, J. Parekh and g. kaiser, “Secure Selecticast for collaborative Intrusion Detection systems”, in Proc. of the Int. Workshop on DeBS, 2004. Modbus-IDA, Modbus Application Protocol Specification v1.1b, http://www.modbus.org, December 28, 2006. Speciale Sicurezza ICT 23 A. Coletta, I. Nai Fovino, A. Carcano, M. Guglielmi [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] 24 f. Cuppens and A. Miège, “Alert correlation in a cooperative intrusion detection framework”, In SP ’02: Proceedings of the 2002 Ieee Symposium on Security and Privacy, page 202, Washington, DC, USA, 2002. Ieee Computer Society. P. Ning, y. Cui, and D.S. Reeves, “Constructing Attack Scenarios through Correlation of Intrusion Alerts”, in Proc. of the ACM Conf. on Computer and Communications Security, pages 245-254, Washington, D.C., November 2002. J. Slay and M. Miller, ”Lessons Learned from the Maroochy Water Breach”, IfIP International federation for Information Processing, volume 253, Critical Infrastructure Protection, eds. e. goetz and S. Shenoi; (Boston: Springer), pp. 73-82, 2008. I. Nai fovino, M. Masera, L. guidi and g. Carpi, “An experimental Platform for Assessing SCADA vulnerabilities and Countermeasures in Power Plants”, in Proceedings of the Ieee 3rd International Conference on Human System Interaction, May 13-15, 2010, Rzeszow, Poland. S. east, J. Butts, M. Papa and S. Shenoi, “A Taxonomy of Attacks on the DNP3 Protocol”, IfIP Advances in Information and Communication Technology, Springer Boston ISSN 1868-4238, v. 311/2009, Pages 67- 81. I. Nai fovino, A. Carcano, M. Masera, A. Trombetta, T. Delacheze-Murel, “Modbus/DNP3 State-based Intrusion Detection System”, in Proceedings of the 24th International Conference on Advanced Information Networking and Applications, Perth, Australia, 20-23 April 2010. g. Clarke, D. Reynders, “Modern SCADA Protocols”, elsevier, 2004, ISBN 0750657995. R. Isermann, “Supervision, fault-detection and fault-diagnosis methods. An Introduction”, Control engineering Practice, vol.5, n.5, pp.639-652, 1997. R. Isermann, “Process fault detection based on modelling and estimation methods - a survey”, Automatica, vol. 20, n. 4, pp. 1287-1298, 1984. P. M. frank, “Advanced fault detection and isolation schemes using non linear and robust observers”, 10th IfAC Congress, Munich, vol. 3, pp. 63-68, 1987. C. Dominguez, M. vidulich, e. vogel, g. McMillan, “Situation awareness: Papers and annotated bibliography”, Armstrong Laboratory, Human System Center, ref. AL/Cf-TR-1994-0085, 1994. R. Roman, C. Alcaraz and J. Lopez, “The role of Wireless Sensor Networks in the area of Critical Information Infrastructure Protection”, in Inf. Secur. Tech. Rep., vol. 12, No. 1, pp. 24-31, 2007. Speciale Sicurezza ICT