l'esperimento

Machine learning: perché è difficile applicarlo all’offensive security

Il campo dell’offensive security ovvero lo sviluppo di strumenti automatici per attaccare un sistema, è uno di quelli in cui più difficilmente possono essere applicate le reti neurali e più in generale il machine learning. Vediamo perché, attraverso un lavoro basato su un sistema di emulazione automatica di attacco

Pubblicato il 20 Gen 2022

Fabrizio Baiardi

Professore Ordinario di Informatica, Responsabile gruppo ICT risk assessment and management, Università di Pisa

Daria Margherita Maggi

laureanda della laurea magistrale in Artificial Intelligence e Data Engineering del dipartimento di ingegneria informatica dell'Università di Pisa

Mauro Passacantando

Dipartimento di Informatica dell'Università di Pisa

Security Solutions

Negli ultimi anni stiamo assistendo ad una penetrazione sempre più pervasiva delle tecniche di machine learning, in particolare del deep learning, ai settori più diversi e lontani che vanno dal riconoscimento di immagini al controllo della produzione ed ai sistemi di riconoscimento di intrusioni. Possono perciò destare una qualche sorpresa alcuni risultati negativi che questo lavoro presenta sulla possibilità di apprendere in modo automatico il modo ottimo di attaccare un qualsiasi sistema. Il qualsiasi è molto importante perché è invece possibile scoprire ed apprendere il modo migliore di attaccare uno specifico sistema. In altre parole, una piattaforma software può imparare come si attacca un sistema ma non ancora come imparare ad attaccare un qualsiasi sistema. Di conseguenza, uno dei campi in cui le reti neurali e più in generale il machine learning possono attualmente essere applicate più difficilmente è quello della offensive security ovvero lo sviluppo di strumenti automatici per attaccare un sistema.

Infrastrutture informatiche critiche: come riconoscerle e garantirne la sicurezza

L’offensive security [3] è un settore importante della sicurezza informatica perché ci permette di capire se e come un sistema potrà essere attaccato. Questo è fondamentale per scoprire quali delle vulnerabilità del sistema permettono agli attaccanti di ottenere successo. Lo sviluppo di piattaforme per attaccare in modo automatico uno specifico sistema è ormai allo stato dell’arte come confermato dall’uso sempre più diffuso di queste piattaforme in attacchi reali. Applicare una qualche forma di learning alla offensive security vuol dire sviluppare una piattaforma in grado non solo di attaccare un sistema, ma anche di imparare il modo migliore di attaccare sistemi diversi.

Le potenzialità del learning per offensive security

Per analizzare le potenzialità del learning per offensive security partiamo dallo stato dell’arte della offensive security. Uno strumento attualmente molto utilizzato è il penetration test. In un penetration test si incarica un red team esterno, privo di informazioni, di attaccare una rete enterprise e si cerca di utilizzare le informazioni su vulnerabilità e difese inefficaci restituite dal test per migliorare il sistema. Visto il grande tasso di successo degli attaccanti su sistemi che hanno superato il penetration test è ovvio che questa soluzione anche se utilizzata da alcuni decenni presenta dei difetti strutturali, dovuti sia alla non ripetibilità degli esperimenti, sia alla difficoltà di trattare un sistema dinamico come perfettamente conoscibile. La non riproducibilità degli esperimenti dipende dal fatto che una volta che il team ha raccolto le informazioni sul sistema non può ripetere il test visto che conosce già il sistema target. Quindi ripetere il test per trovare altri difetti richiede un team diverso. La dinamicità dipende dal fatto che se si modifica il sistema, ad esempio eliminando delle vulnerabilità, il comportamento degli attaccanti cambia perché il sistema è cambiato e già può portare al paradossale effetto di peggiorare la robustezza di un sistema perché le modifiche hanno favorito nuovi, e più efficaci, comportamenti dell’attaccante [2].

Buona parte dei difetti del penetration test sparirebbero se il test fosse automatizzato cioè delegato ad una piattaforma e non ad esseri umani. In questo caso, ripetere il test cambiando alcune condizioni iniziali sarebbe estremamente semplice. Meccanismi di machine learning potrebbero semplificare la progettazione di una piattaforma in grado di attaccare un grande numero di sistemi. È quindi utile cercare di capire come in un contesto così diverso da quello dei tipici domini applicativi sia possibile utilizzare qualche forma di machine learning e se questa soluzione possa avere successo. Purtroppo, la soluzione attualmente più popolare di learning, il deep learning, ha delle deficienze strutturali nei confronti di una sfida del genere. Le ragioni di queste deficienze sono state analizzate da Marcus Gary [4].

Problemi di gerarchia

Il problema di come attaccare una rete è intrinsecamente gerarchico, con relazioni non banali tra le proprietà dei nodi e quelle topologiche della rete. Ad esempio, è ovvio che un attaccante razionale si concentrerà sui nodi più critici della rete ovvero quelli attraversati dai cammini che raggiungono molti altri nodi. Il controllo di questi nodi critici facilita quello dell’intera rete. La criticità di un nodo non è un attributo attribuibile analizzando il singolo nodo, e nemmeno i vicini di un nodo ma dipende dalla struttura complessiva della rete e dai cammini che vanno dalla superficie d’attacco ai nodi che custodiscono i gioielli della corona e che interessano ad un attaccante. La struttura non è immediatamente deducibile nemmeno se analizziamo i nodi ed i suoi vicini entro una certa distanza. Questo conferma che la logica necessaria per astrarre la scoperta e l’uso delle informazioni su una rete faccia si che l’emulazione del comportamento dell’attaccante e la scoperta della strategia di attacco migliore abbia maggiori radici nel senso comune, più che nelle logiche dell’apprendimento (semi-)supervisionato. Occorre quindi considerare altre forme di learning per individuare quella più adatta al nostro problema.

Per individuare la forma più adatta di learning è utile analizzare i comportamenti tipici degli attaccanti. Numerosi lavori che hanno analizzato questi comportamenti tipici hanno evidenziato come in genere un attaccante cerca di utilizzare un sottoinsieme minimo di vulnerabilità, precisamente quelle che permetteranno di raggiungere l’obiettivo col minimo dispiego di forze [1]. Inoltre, un attaccante privilegerà l’uso delle stesse vulnerabilità anche contro sistemi diversi se esse gli permettono di raggiungere il suo obiettivo. Questa ”resistenza al cambiamento” può essere dovuta al costo di sviluppare nuovi exploit per nuove vulnerabilità. Quindi un attaccante è interessato non solo a raggiungere un certo obiettivo ma anche ad utilizzare il metodo meno “faticoso” per farlo, allora è opportuno formulare il problema dell’emulazione dell’attaccante e della scelta del metodo di attacco come un problema di minimo ed esplorare lo spazio delle soluzioni possibili, ovvero dei possibili modi per attaccare un sistema.

Come funziona un sistema di emulazione automatica di attacco

Il primo passo del nostro lavoro ha sviluppato un sistema di emulazione automatica di attacco che permettesse di esplorare lo spazio delle soluzioni. Eravamo interessati ad un metodo che coniugasse le indubbie potenzialità dell’apprendimento automatico e che fosse contemporaneamente in grado di rappresentare in modo accurato sia il sistema che l’attaccante. La rappresentazione del sistema è ovviamente focalizzata sulle coppie vulnerabilità/attacco ovvero sulle vulnerabilità nei vari componenti e gli attacchi che esse abilitano.

La soluzione che abbiamo scelto è basata su due scelte fondamentali. La prima scelta è quella di modellare un attaccante come un sistema esperto guidato da un insieme di regole, ognuna delle quali rappresenta una possibile azione dell’attaccante sul sistema. Le regole hanno delle premesse ed una conseguenza che rappresenta una o più azioni. Le premesse vengono matchate rispetto ad un database di fatti per scoprire quali sono soddisfatte. Le azioni modificano questo database che descrive lo stato del sistema sotto attacco e quello dell’attaccante. Le regole utilizzate devono essere sufficientemente flessibili da considerare sia un caso generale che uno particolare. Le regole che considerano casi generali definiscono il comportamento dell’attaccante verso ogni entità del sistema target. Invece, le regole particolari definiscono il comportamento in situazioni che coinvolgono uno specifico componente. Oltre alle premesse e alle azioni ogni regola ha una priorità. Nel caso di più regole con premesse soddisfatte, la priorità determina quale verrà applicata visto che ad ogni iterazione viene attivata una sola regola. Nel caso di una regola che provochi un attacco, la priorità dipende anche dalla probabilità di successo dell’attacco. Durante l’esecuzione di un attacco, ovvero quando il sistema esperto è in esecuzione, lo stato dell’attaccante descrive le informazioni ed i diritti che possiede. L’esecuzione termina quando l’attaccante possiede tutti i diritti sui gioielli della corona compresi nel suo obiettivo. Ogni azione dell’attaccante può modificare sia lo stato dell’attaccante che quello del sistema attaccato. Un’altra informazione nello stato associato ad un attaccante sono gli insiemi di nodi promettenti ovvero i nodi che permettono all’attaccante di raggiungere più velocemente il suo obiettivo.

Il secondo fondamentale elemento della nostra soluzione è un algoritmo genetico che opera su una popolazione di attaccanti cioè sugli insiemi di regole che descrivono gli attaccanti nella popolazione. La fitness di un attaccante stima la bontà della soluzione che le regole gli permettono di scoprire ovvero del percorso che l’attaccante utilizza per raggiungere i gioielli della corona. Per calcolare la fitness, ogni insieme di regole deve essere valutato utilizzandolo per attaccare il sistema ed assegnando all’insieme un valore numerico, la fitness, che dipende dal tempo impiegato dall’attaccante per raggiungere l’obiettivo. Viene assegnata anche una fitness a quegli insiemi di regole che non permettono all’attaccante di raggiungere l’obiettivo. Data una popolazione di attaccanti ognuno con una fitness, l’algoritmo genetico produce una nuova popolazione. L’algoritmo genetico ha successo se migliora continuamente la fitness ovvero se in un certo numero di passi, o generazioni, la popolazione converge ad attaccanti che scoprono il percorso ottimo. L’algoritmo si muove nello spazio delle soluzioni, ovvero dei possibili insiemi di regole, applicando degli operatori che operano fondendo più insiemi di regole con fitness elevata in nuovi insiemi o modificando in modo casuale le premesse o la conseguenza di una regola. Ogni qualvolta l’algoritmo genetico genera un nuovo attaccante, cioè un nuovo insieme di regole, genera anche un insieme di nodi promettenti da associare alle regole.

Reti e attaccanti

Stabilita la rappresentazione degli attaccanti e come implementare la ricerca nello spazio delle soluzioni, possiamo rappresentare ciascuna delle entità che caratterizzano il dominio in esame. Una rete informatica viene descritta come un grafo, dove i nodi sono asset e gli archi potenziali attacchi, derivati dalla possibilità di attaccare il nodo B, sfruttando le vulnerabilità di B che ha scoperto avendo ottenuto diritti su un nodo diverso. Il comportamento di un attaccante è univocamente descritto dalle sue regole e dal suo action log che ne ricorda le azioni. Questo log permette di ricostruire l’insieme dei nodi cosiddetti promettenti, cioè un sottoinsieme dei nodi dei cammini per la soluzione cioè ad uno dei cammini dalla superficie d’attacco ai gioielli della corona.

Per verificare la fattibilità della soluzione proposta, abbiamo sviluppato un prototipo minimo, con solo due azioni possibili per un attaccante: attaccare o esplorare. Per quanto molto semplice, questo attaccante deve risolvere uno dei problemi fondamentali per un attaccante quello di decidere se sfruttare una delle vulnerabilità già scoperte ed attaccare un nodo oppure se raccogliere altre informazioni per scoprire un nodo e / o un attacco migliore da attaccare, cioè un nodo o un attacco che permettano di raggiungere più velocemente i gioielli della corona. In questo caso esplorare vuol dire eseguire degli scanning per trovare altri nodi o altre vulnerabilità. Anche se il problema è una semplificazione di quelli che un attaccante deve affrontare, la semplificazione evidenzia comunque la peculiarità del problema affrontato ovvero che l’attaccante non possiede a priori le informazioni per la risoluzione del problema. In altri termini, le informazioni per risolvere il problema devono essere raccolte durante la soluzione del problema e le azioni svolte influenzano quali informazioni possono essere raccolte. In parole povere l’attaccante deve muoversi ma costruisce la mappa che lo guida passo dopo passo in base a come si è mosso. E’ tutto molto diverso da un problema di classificazione di un’immagine completamente nota o al calcolo del cammino ottimo su un grafo noto a priori.

Gli esperimenti e le domande

Una volta costruito il sistema complessivo, abbiamo progettato un insieme di esperimenti con l’obiettivo di rispondere a due domande:

  1. è possibile addestrare in modo automatico un insieme di regole ad attaccare una rete, per scoprire un insieme ideale di azioni per raggiungere l’obiettivo?
  2. è possibile fare del transfer learning ovvero trasferire quanto una generazione di agenti ha appreso su una rete ad una rete diversa?

Gli esperimenti sono stati condotti su varie reti che comprendono al max 80 nodi dove ogni nodo ha 3 vulnerabilità che possono essere sfruttate. Il numero di individui in ogni generazione varia da alcune decine ad alcune centinaia. All’aumentare del numero di individui la convergenza accelera e comunque varia da 20 a 40 generazioni.

La risposta alla prima domanda è sicuramente positiva: dall’evidenza sperimentale, possiamo affermare che l’algoritmo genetico è in grado di far convergere la popolazione, cioè l’insieme di regole che guidano gli attaccanti, verso una soluzione al problema. È infatti possibile che una popolazione di attaccanti inizialmente diversi apprenda ad attaccare una rete, sia essa di piccole o medie dimensioni, con tempi proporzionali alla dimensionalità della rete e alla sua densità, cioè dal numero di collegamenti di ogni nodo, da cui dipende strettamente il numero di cammini possibili. Al termine di ogni generazione, gli operatori genetici garantiscono da un lato che gli attaccanti privilegino quei nodi che appartengano ai cammini più promettenti, dall’altro che gli agenti esplorino comunque lo spazio delle soluzioni, in modo da convergere su minimi globali, e non locali.

Per quanto riguarda la seconda domanda a cui volevamo rispondere, ossia la possibilità di sfruttare il transfer learning, siamo partiti dall’analisi in [5] dove gli autori discutono il trasferimento di conoscenze necessario per riconoscere variazioni di attacchi già noti, evidenziando le difficoltà intrinseche di generalizzare in questo dominio. Infatti, anche nel nostro problema il ruolo di ogni nodo dipende non solo dalle sue vulnerabilità,ma anche dalle sue connessioni e dalla topologia complessiva del sistema. Non era dunque chiaro se sarebbe stato possibile ottenere un transfer learning accettabile trasferendo, ad esempio, informazioni sui nodi promettenti.

Gli esperimenti condotti non provano la capacità di trasferire quanto appreso in una rete trasferendo sia le regole imparate che le informazioni sui nodi promettenti. Come atteso, l’effetto del transfer learning è tanto meno rilevante tanto più sono diverse le reti e quindi tanto più è complesso il nuovo problema da risolvere. Ma il transfer è ugualmente difficile anche quando la rete è simile a quella già attaccata, perché anche l’aggiunta di pochi archi e/o di pochi nodi impedisce all’attaccante di comprendere di essere in un caso già visto. Esemplificativo a tal proposito è stato l’esperimento delle istanze multiple in cui dopo aver imparato ad attaccare una rete R gli attaccanti dovevano attaccare una rete M(R) creata componendo più istanze della rete R. In particolare, M(R) è formata collegando le istanze di R in modo che un punto di arrivo in una istanza di R sia collegato al punto di inizio di un’altra istanza R. In questo modo R diventa un building block stile Lego per costruire la rete più grande. In questo caso le prestazioni nell’attacco a M(R) degli attaccanti che hanno già imparato ad attaccare R sono migliori inizialmente ma successivamente la convergenza verso la soluzione ottima non accelera. Quindi il numero di generazioni necessarie per produrre un attaccante che sappia attaccare M(R) partendo da una popolazione che ha imparato ad attaccare R, non differisce significativamente dal numero di generazioni necessarie partendo da attaccanti guidati da insiemi di regole generate casualmente. Quindi il comportamento iniziale degli attaccanti già addestrati è migliore ma questo non riduce significativamente il numero di generazioni e non accelera la convergenza. Le prime generazioni sfruttano quanto già imparato ma poi non riescono a sfruttarlo pienamente per accelerare l’apprendimento.

All’aumentare della diversità tra la rete su cui si è imparato e quella da attaccare, quanto imparato può diventare un ostacolo per l’attaccante perché l’informazione già posseduta ostacola l’acquisizione di nuova informazione. La situazione non cambia anche quando si trasferiscono solo le regole e non le informazioni sui nodi promettenti.

Conclusioni

La conclusione è che il learning implementato mediante un algoritmo genetico non è ancora in grado di produrre un insieme di regole che permetta di attaccare in modo ottimo ogni sistema. L’insieme di regole ottimo per attaccare uno specifico sistema esiste e l’algoritmo genetico può produrlo ma attualmente non è ancora possibile trasferire ciò che si è appreso da un sistema ad un altro per produrre uin unico insieme di regole efficace contro tutti i sistemi.

Note

  1. L.Allodi, F.Masacci, J.WIlliams, The Work-Averse Cyberattacker Model: Theory and Evidence from Two Million Attack Signatures, Risk Analysis, 2021, Wiley Online Library
  2. F. Baiardi, “Avoiding the weaknesses of a penetration test”, Computer Fraud & Security, vol. 4, no. 2019, pp. 11-15, 2019.
  3. F. Baiardi, E.Panti, Adversary emulation e MITRE ATT&CK matrix: definire le strategie di difesa di un sistema, https://www.cybersecurity360.it/nuove-minacce/adversary-emulation-e-mitre-attck-matrix-definire-le-strategie-di-difesa-di-un-sistema/
  4. M., Gary, Deep Learning: A Critical Appraisal, Gennaio 2018
  5. J. Zhao, S. Shetty, Sachin J. Pan, Feature-based transfer learning for network security, 10.1109/MILCOM.2017.8170749, Ott. 2017

Valuta la qualità di questo articolo

La tua opinione è importante per noi!

EU Stories - La coesione innova l'Italia

Tutti
Analisi
Video
Iniziative
Social
Programmazione europ
Fondi Europei: la spinta dietro ai Tecnopoli dell’Emilia-Romagna. L’esempio del Tecnopolo di Modena
Interventi
Riccardo Monaco e le politiche di coesione per il Sud
Iniziative
Implementare correttamente i costi standard, l'esperienza AdG
Finanziamenti
Decarbonizzazione, 4,8 miliardi di euro per progetti cleantech
Formazione
Le politiche di Coesione UE, un corso gratuito online per professionisti e giornalisti
Interviste
L’ecosistema della ricerca e dell’innovazione dell’Emilia-Romagna
Interviste
La ricerca e l'innovazione in Campania: l'ecosistema digitale
Iniziative
Settimana europea delle regioni e città: un passo avanti verso la coesione
Iniziative
Al via il progetto COINS
Eventi
Un nuovo sguardo sulla politica di coesione dell'UE
Iniziative
EuroPCom 2024: innovazione e strategia nella comunicazione pubblica europea
Iniziative
Parte la campagna di comunicazione COINS
Interviste
Marco De Giorgi (PCM): “Come comunicare le politiche di coesione”
Analisi
La politica di coesione europea: motore della transizione digitale in Italia
Politiche UE
Il dibattito sul futuro della Politica di Coesione
Mobilità Sostenibile
L’impatto dei fondi di coesione sul territorio: un’esperienza di monitoraggio civico
Iniziative
Digital transformation, l’Emilia-Romagna rilancia sulle comunità tematiche
Politiche ue
Fondi Coesione 2021-27: la “capacitazione amministrativa” aiuta a spenderli bene
Finanziamenti
Da BEI e Banca Sella 200 milioni di euro per sostenere l’innovazione di PMI e Mid-cap italiane
Analisi
Politiche di coesione Ue, il bilancio: cosa ci dice la relazione 2024
Politiche UE
Innovazione locale con i fondi di coesione: progetti di successo in Italia
Programmazione europ
Fondi Europei: la spinta dietro ai Tecnopoli dell’Emilia-Romagna. L’esempio del Tecnopolo di Modena
Interventi
Riccardo Monaco e le politiche di coesione per il Sud
Iniziative
Implementare correttamente i costi standard, l'esperienza AdG
Finanziamenti
Decarbonizzazione, 4,8 miliardi di euro per progetti cleantech
Formazione
Le politiche di Coesione UE, un corso gratuito online per professionisti e giornalisti
Interviste
L’ecosistema della ricerca e dell’innovazione dell’Emilia-Romagna
Interviste
La ricerca e l'innovazione in Campania: l'ecosistema digitale
Iniziative
Settimana europea delle regioni e città: un passo avanti verso la coesione
Iniziative
Al via il progetto COINS
Eventi
Un nuovo sguardo sulla politica di coesione dell'UE
Iniziative
EuroPCom 2024: innovazione e strategia nella comunicazione pubblica europea
Iniziative
Parte la campagna di comunicazione COINS
Interviste
Marco De Giorgi (PCM): “Come comunicare le politiche di coesione”
Analisi
La politica di coesione europea: motore della transizione digitale in Italia
Politiche UE
Il dibattito sul futuro della Politica di Coesione
Mobilità Sostenibile
L’impatto dei fondi di coesione sul territorio: un’esperienza di monitoraggio civico
Iniziative
Digital transformation, l’Emilia-Romagna rilancia sulle comunità tematiche
Politiche ue
Fondi Coesione 2021-27: la “capacitazione amministrativa” aiuta a spenderli bene
Finanziamenti
Da BEI e Banca Sella 200 milioni di euro per sostenere l’innovazione di PMI e Mid-cap italiane
Analisi
Politiche di coesione Ue, il bilancio: cosa ci dice la relazione 2024
Politiche UE
Innovazione locale con i fondi di coesione: progetti di successo in Italia

Articoli correlati