Ma se la probabilità non la sappiamo, il rischio come lo trattiamo?

Fino a qualche tempo fa se ne parlava poco, ma adesso quasi ogni discorso che sento sul rischio inizia più o meno così: “Probabilità per impatto, prima di tutto valutiamo gli impatti. Per quanto riguarda le probabilità, dati reali utilizzabili nel contesto della sicurezza ICT ce ne sono pochi, perché…” (segue una serie di motivi). “Quindi, possiamo fare una valutazione qualitativa, o semi-quantitativa, usando…” (segue una serie di trucchi per dare credibilità alle valutazioni di probabilità). Al tempo. La gestione moderna della sicurezza ICT parte dalla gestione del rischio, cioè dal prodotto di due fattori, uno dei quali è in buona parte tarato. Se vogliamo, è una situazione che ho visto più volte: tutti dicono che un certo strumento non funziona, ma continuano ad usarlo perché non c’è di meglio, senza però cercare realmente un’alternativa. Formalmente è tutto corretto, ma nella pratica i dati di appoggio non ci sono, e sembra che ci sia una sorta di attesa che prima o poi da qualche parte questi dati, miracolosamente, saltino fuori.
Le riflessioni che seguono derivano dall’attività di ricerca che sto svolgendo in collaborazione con il Dipartimento di Informatica dell’Università di Pisa, attività che cerca anche di dare una risposta ad una richiesta che ci ha fatto un partner dell’industria.

Quello che cerchiamo di definire è una metodologia di prioritizzazione delle vulnerabilità, per capire quali sono le più urgenti da eliminare. Perché poi, alla fine, nella sicurezza ICT il problema si riduce a questo: individuare, implementare e gestire delle contromisure adeguate alle nostre vulnerabilità, reali o potenziali, in modo da ridurre il rischio ad un livello accettabile. E questo in un’ottica di priorità, dato che essendo la disponibilità di fondi limitata, è generalmente necessario scegliere di elimnare per prime le vulnerabilità più critiche.
Rivediamo allora il nostro problema iniziale. Il nostro scopo è, e rimane, proteggere i processi di business aziendali. Per fare questo, proviamo a partire dalle informazioni che abbiamo, invece di partire da una valutazione della probabilità. Conosciamo l’architettura del nostro sistema informativo, le risorse critiche del nostro sistema, gli impatti che la loro perdita o danneggiamento avrebbe sul business aziendale (il secondo fattore che compone il rischio). Conosciamo anche le minacce, o meglio gli agenti di minaccia: un semplice elenco di questi, con le risorse che hanno a disposizione per l’attacco, è un’informazione più facile da ottenere rispetto a una probabilità. In effetti, in mancanza di dati statistici, una valutazione degli agenti di minaccia è uno dei fattori sui quali spesso viene “costruita” la probabilità. Infine, conosciamo le vulnerabilità del nostro sistema, reali o potenziali.

Cosa si può fare con i dati che abbiamo, prima di metterne di “valutati”? La base del lavoro che stiamo facendo cerca di dare uno strumento rigoroso ma di ragionevole usabilità che permetta di stabilire se e come i diritti sul sistema che una minaccia acquisisce mediante attacchi che sfruttano le diverse vulnerabilità, le permettono alla fine di acquisire diritti sulle risorse critiche del sistema. Lo scopo è capire quali vulnerabilità sono più critiche sotto questo aspetto, in modo da dare una priorità alle vulnerabilità che possono portare a impatti maggiori, e da scegliere delle contromisure adeguate. Se interessa approfondire la cosa, ho fatto una presentazione a SMAU l’anno scorso.

Il punto che qui vorrei discutere è un altro. Supponiamo di essere riusciti a stabilire, con il nostro strumento o un altro, che una certa minaccia è in grado di sfruttare una o più vulnerabilità per acquisire i diritti necessari per operare (leggere, cancellare o altro) su una risorsa che le interessa e che per noi è critica. Ad esempio, studiando il nostro sistema informativo, vediamo che un nostro concorrente sarebbe certamente in grado, sfruttando un certo insieme di vulnerabilità del nostro sistema e con le risorse che puo mettere in campo, di attaccare da Internet il nostro sistema e arrivare a leggere le informazioni segrete su qualche nostro prodotto o brevetto. Si tratta di un’informazione che riusciamo ad avere senza bisogno di tirare in ballo le probabilità. Dove entrano allora in gioco le probabilità, che certamente fanno parte del concetto di rischio? Un primo punto riguarda le vulnerabilità: se noi non trattiamo solo le vulnerabilità effettive e note del nostro sistema, ma anche quelle ipotetiche, possiamo allora associare una probabilità che queste vulnerabilità ci siano effettivamente.

Il punto in cui la probabilità entra realmente è però un altro. Sappiamo che il nostro concorrente può, e già ieri poteva, attaccare i nostri sistemi per arrivare alla formula segreta, che certamente gli interessa. Perché non lo ha ancora fatto? Ovvero, perché la probabilità che lo faccia, in un certo intervallo di tempo, non è del 100%? Ci sono una serie di fattori che possono mitigare il rischio: non conosce i nostri sistemi (e non sa quanto gli sarebbe facile arrivare alla formula segreta 😉 ), ci vuole del tempo per preparare l’attacco, ritiene che il rischio di essere scoperto sia troppo alto, è onesto… se noi conoscessimo con certezza qualcuno di questi fattori, potremmo trattarlo direttamente ed eliminarlo. Ad esempio, se il concorrente è onesto, la probabilità (per quell’agente di minaccia) scende a 0, mentre se l’onestà per lui non è un vincolo, smette di essere un fattore di mitigazione. La probabilità si riduce quindi ai fattori sui quali non abbiamo informazioni certe, il che è coerente sia con l’uso che ne viene normalmente fatto nella gestione del rischio, sia con la difficoltà che abbiamo a trovare dati utilizzabili nel settore ICT. Questa logica dei fattori di mitigazione, anziché quella inversa della “probabilità che un attacco venga praticato”, secondo me permette di disaggregare meglio i fattori che compongono la probabilità, e quindi di valutare esplicitamente tutto il valutabile: non ci serve una statistica di attacchi alle banche USA per decidere se il nostro concorrente è abbastanza disonesto da attaccare i nostri sistemi, e non ci servono le statistiche degli attacchi su Internet per decidere se un nostro dipendente ha motivazioni e competenza per praticare un attacco. Possiamo usare invece le statistiche più semplici, ad esempio sui tempi fra la scoperta di una vulnerabilità, la pubblicazione di un exploit e il suo utilizzo massiccio, per decidere qual’è l’urgenza nell’applicare una patch.

Cosa cambia quindi nel nostro approccio? Che prima di tutto cerchiamo di lavorare tutta l’informazione che abbiamo, l’attenzione è focalizzata sul sistema e non sull’alea. Una volta stabilito che un insieme di vulnerabilità permette a un concorrente di arrivare alla formula segreta, i fattori di mitigazione, quando riusciamo a valutarli, ci diranno semplicemente quanto possiamo aspettare prima di risolvere il problema. Se non riusciamo a trovare un buon motivo per cui il concorrente non debba agire già domani, consideriamo la probabilità del 100% e ci muoviamo di conseguenza, basandoci solo su quello che abbiamo realmente in mano: una prioritizzazione delle vulnerabilità data dagli impatti che gli agenti di minaccia possono causare grazie a quelle vulnerabilità.

Gli articoli più formali relativi a questa (e altre) attività sono disponibili qui.

Posted in Sicurezza, Varie | Comments Off on Ma se la probabilità non la sappiamo, il rischio come lo trattiamo?

Usare la Sicurezza per incastrare gli utenti

Dal blog di Stefano Quintarelli. Ogni commento è superfluo. Domani terrò un seminario sul Trusted Computing a Infosecurity. Questi documenti capitano a fagiolo, con un tempismo quasi imbarazzante 😉

Posted in Sicurezza, Varie | Comments Off on Usare la Sicurezza per incastrare gli utenti

Il ritorno del ping of death

Chi si ricorda il ping of death? Verso il 1992 Internet comincia ad uscire dalle università e dai centri di ricerca, per diffondersi prima fra le grandi aziende, e poi in modo più capillare. Allora le macchine Windows vivevano quasi esclusivamente sulle LAN, sfruttando il protocollo NetBEUI o, al più IPX (Novell). Internet era dominio Unix, o casomai Digital o IBM. Se con Windows 3.11 o 3.1 si voleva usare Internet da casa, la soluzione tipica era installare il Trumpet Winsock, che forniva uno stack TCP/IP e se non sbaglio anche SLIP e PPP. Con Windows 95, diventa normale usare lo stack TCP/IP integrato, che però ancora non veniva installato automaticamente (e pensare che c’è qualcuno che è convinto che Microsoft abbia inventato Internet 😉 ). Nello stesso periodo, più o meno, usciva Windows NT 3.51. In quel periodo, diciamo dal 1996, si discuteva molto delle prestazioni dei diversi stack TCP/IP (pensa tu…) e del fatto che gli stack Microsoft, nuovi, avessero prestazioni peggiori dei più “consolidati” sistemi unix/solaris/simili. Così in quel periodo è aumentata l’attenzione verso l’implementazione degli stack tcp/ip, e con l’attenzione sono saltati fuori i bug. Dato che lo stack è implementato nel kernel, un baco aveva ottime probabilità di piantare la macchina. I giovani stack delle macchine Windows ne sono usciti in generale peggio dei più solidi stack delle macchine *nix, ma in effetti molti dei diversi attacchi di quel periodo (bonk, boink, land, teardrop..) colpivano più architetture: neppure gli stack *nix erano mai stati testati così a fondo. Di quel periodo, durato direi tre o quattro anni, è rimasto famoso soprattutto il “ping of death“, così soprannominato perché bastava un solo pacchetto ping malformato per bloccare un sistema… per un gran numero di architetture. Per fortuna, allora i DoS erano ritenuti ancora poco interessanti, altrimenti temo che Internet avrebbe subito un duro colpo. Invece, la cosa è passata quasi inosservata, e questi attacchi sono stati usati principalmente per “fare scherzi”. Purtroppo, i tempi cambiano, adesso non dubito che l’effetto di una vulnerabilità simile sarebbe invece devastante.

Comunque sia, verso il 1998 direi, pian piano e a forza di bachi e patch, gli stack sono diventati più robusti, e di questi attacchi se ne sono scoperti sempre meno. Adesso, nel giro di pochi giorni sono saltate fuori una vulnerabilità di Cisco e una di Solaris… basate su pacchetti ICMP, e se l’istinto non mi inganna, con il ritorno di attenzione ne verranno fuori altre, magari per altre architetture. Cosa c’è da imparare? Soprattutto, che anche una cosa semplice come un pacchetto ping, utilizzato da più di vent’anni e la cui gestione sembrerebbe banale, può rivelare un baco.

La seconda è che “a volte ritornano”. Sarebbe interessante sapere se i nuovi bachi sono dovuti a vulnerabilità latenti da decenni, o se invece (più probabilmente), sono conseguenza di successivi cambiamenti al codice. Entrambi i casi sarebbero comunque interessanti.

La terza è che un singolo componente, nel momento in cui gestisce dati anche all’apparenza banali (e tutti gli apparati, le applicazioni e i sistemi in generale gestiscono dati) può essere vulnerabile. Mai basare le proprie difese su un unico componente.

Tuttavia, in questo caso c’è un ulteriore aspetto interessante: mentre la difesa in profondità è di grande aiuto contro le intrusioni, paradossalmente contro i DoS può essere un difetto: se ci sono più componenti in serie, basta che uno si blocchi perché il flusso venga bloccato. Contro i DoS, servirebbero sistemi diversi in parallelo. Non so esattamente cosa dedurne, ma mi sembra interessante ragionarci sopra.

Un link che rende l’idea della pletora di attacchi di DoS basati su pacchetti malfornati di quel periodo:

http://sokrates.mimuw.edu.pl/~sebek/pub/targa.c

Posted in Sicurezza, Varie | Comments Off on Il ritorno del ping of death