Hackerare una rete neurale

L’intelligenza artificiale ha un futuro brillante nell’ambito della security, una rete neurale in grado di analizzare e discriminare in autonomia falle nel sistema ed eventuali minacce è una risorsa inestimabile. Inoltre un sistema software che basa le sua analisi su funzioni autodeterminate non soggette ai bug come lo sono gli algoritmi tradizionali ha un apparenza inviolabile. Ma è davvero così? No, scopriamo insieme i punti deboli delle RN, le tecniche per sciarpe sviarle e alcune (insufficienti) precauzioni applicabili.

 

Le debolezze di una rete neurale.

Non conosciamo (e non ci interessa conoscere) la logica che sta dietro la distribuzione dei pesi in una rete neurale. Una cosa ben più interessante per un hacker sarebbe capire la tipologia/topologia della rete e avere accesso ai training set utilizzati. E questa è una cosa fattibile, un pool di ricercatori guidato dall’università della North Carolina hanno dimostrato in un paper (https://regmedia.co.uk/2016/09/30/sec16_paper_tramer.pdf) che è possibile estrapolare con semplicità i modelli di apprendimento automatico più comuni.

 

Ma non è solo il modello ad essere a rischio, il reverse engineering quando applicato correttamente va oltre permettendo l’accesso ai dati orignali utilizzati per il ttrainng del modello. Un rischio enorme per la privacy se consideriamo che i big player del machine learnng utilizzano i nostri dati, le nostre immagini, le nostre voci, per allenare i loro sistemi di apprendimento automatico.

 

Un’altra debolezza del machne learnng è di tipo concettuale. Si parte dall’assunto che i dati di training e i dati che il sistema dovrà analizzare siano generati allo stesso modo, che i dati siano campionati dalla stessa distribuzione. Nelle applicazioni reali però non è sempre così e questo gap fa si che il risultato dell’elaborazione diventi soggetto ad influenze esterne in grado di sviarlo.

 

 

Hackeriamo una rete neurale.

Queste debolezze non sono soltanto teoriche; concentriamoci su uno degli ambiti applicativi piú comuni delle reti neurali profonde, ovvero il riconoscimento delle immagini, e cerchiamo di individuarne le implicazioni di sicurezza.

 

Supponiamo di avere una rete neurale addestrata per riconoscere immagini in cui siano presenti delle auto. Forse potrebbe essere un sistema di controllo delle immagini caricate su un marketplace. Come fare a caricare l’immagine di una moto facendola passare per un’auto?

 

Questa è la procedura:

  1. Dai l’immagine in pasto alla rete neurale
  2. Controlla la previsione ottenuta dall’elaborazione della rete neurale
  3. Correggi qualche pixel per modificare il risultato (back propagation) rendendolo più vicino alla previsione desiderata
  4. Assicurati che non ci siano pixel troppo distanti dall’immagine originale, imposta un margine di variazione ridotto per evitare che l’immagine appaia compromessa all’occhio umano
  5. Ripeti dal passo 1

 

Dopo aver ripetuto questi passi qualche migliaio di volte il gioco è fatto, avrai un’immagine in grado di ingannare la rete neurale che crederà che la tua moto sia un’auto. Un simile inganno potrebbe diventare pericoloso se si va oltre le applicazioni comuni; se l’algoritmo gira su un’automobile a pilotaggio autonomo e sia assegnato al riconoscimento dei cartelli stradali, una cattiva interpretazione metterebbe a repentaglio la vita dei passeggeri. E questo è già successo, è stato dimostrato che basta un PostIt per far interpretare un segnale di “STOP” come un semplice limite di velocità. Sconvolgente vero?

Image_Hack_Inline

 

Quindi è evidente che le reti neurali possono essere hackerate, e questo per certi ambiti applicativi è davvero pericoloso. Adesso la domanda sorge spontanea: che si fa?

 

Precauzioni per la sicurezza delle reti neurali.

Non ci sono ancora delle linee guida definitive al riguardo, la sicurezza dele reti neurali è perlopiù un campo inesplorato dove si sta iniziando ora a fare ricerca e sviluppo. Restano comunque valide alcune linee guida che seppur non blindando del tutto il sistema, contribuiscono a renderlo più sicuro.

 

  • Aggiungi sorgenti dati “hackerate” ai training set per rendere l’autoapprendimento più robusto. Funziona? Ni . . . le reti risultano più robuste ma non inviolabili.
  • La tecnica della Defensive Distillation prevede due reti neurali avversarie che provano ad ingannarsi a vicenda. Funziona? Ni . . . La rete diventa più resistente ad attacchi esterni ma è stato dimostrato che resti violabile.
  • Scegli training set quanto più variegati possibile, la sorgente dei campioni deve rispecchiare in modo completo i dati che saranno analizzati in produzione. Funziona? Ni . . . è utile per evitare cattive interpretazioni involontarie ma non per riconoscere attacchi mirati.
  • Non usare i risultati dell’apprendimento automatico come unico sistema di controllo in sistemi critici. Funziona? Si, i controlli ridondanti rendono i sistemi critici robusti.
  • Quando possibile prevedi un analisi comparativa con dati da altre sorgenti per validare i risultati dell’apprendimento automatico. Funziona? Si, se la comparazione è positiva il rischio che si tratti di un falso positivo diminuisce drasticamente.

 

L’universo dell’apprendimento automatico è esplorato da decenni ma molto resta ancora da capire e molto resta ancora da fare in ambito sicurezza. I processori quantistici aggiungeranno ulteriori capacità ma anche ulteriore complessità alle reti neurali, strumenti che saranno capaci di cose sempre più straordinarie. Strumenti che andranno protetti al meglio, chi sarà in grado di farlo?

Deep learning: come salvare una rete neurale con Keras

Cattura

Quando hai allenato una rete che funziona avrai bisogno di un metodo per salvarla e utilizzarla all’occorrenza. Con keras questa operazione diventa semplice, questione di poche righe di codice. Prima di passare ai fatti parliamo un po di cosa può significare salvare un modello e dei formati di salvataggio più utilizzati.

Il salvataggio di una rete si può dividere in due componenti principali: i pesi calcolati e la struttura del modello. Nella maggior parte dei casi la scelta migliore è quella di salvare in un’unica operazione struttura, pesi e altri dati associati in un’unica operazione per semplificare le operazioni di restore.

Il salvataggio dei pesi di una rete o di un’intera struttura avviene in un file HDF5, un sistema di storage efficiente e flessibile che supporta dataset multidimensionali complessi. Quando invece basta rendere persistente soltanto la struttura del modello basta un semplice file json. Per gestire i file HDF5 in python ti consiglio di installare il modulo open h5py mentre la lettura dei file json è agevole da qualsiasi editor di testi (VIM e il massimo ma se preferisci le GUI Visual Studio Code è un’ottima soluzione).

Il codice per salvare la struttura di un modello Keras è il seguente:

Per recuperare il modello invece basta questo:

 

Se occorre invece salvare l’intero modello lo sforzo, quantificato in linee di codice, è anche minore:

 

Infine è possibile salvare soltanto i pesi relativi ad un modello. Questo può essere utile quando alla stessa struttura (magari già persistente grazie ad un file json) associamo pesi diversi per utilizzi diversi.

 

Con keras salvare una rete neurale è semplice, questo significa che dopo ore di training e test avrai un sistema di Deep Learning pronto all’uso. Un passo verso l’applicazione pratica della teoria al servizio della soluzione di problemi reali.

Machine Learning e riproducibilità

Code_data

La stessa sequenza di azioni in condizioni variabili devono portare a risultati concordanti. Questa è la chiave del concetto di riproducibilità, un caposaldo per la valutazione dei risultati scientifici. Quando si parla di ricerca e machine learning qualsiasi risultato dichiarato deve risultare riproducibile.

Riproducibilità vs Replicabilità. Prima di correlare questo concetto al machine learning bisogna chiarire che la riproducibilità non coincide con la replicabilità. In questo caso i risultati devono essere coerenti nel caso in cui la computazione viene ripetuta in condizioni simili e nel breve periodo, la riproducibilità invece è cosa molto più articolata.

Cosa Comporta. Per essere riproducibile un risultato ottenuto da una  computazione deve corrispondere a quello elaborato da un’altra macchine con hardware differente dallo stesso algoritmo e con lo stesso training set. Sembra ovvio e semplice ma lo è solo a patto di seguire una serie di linee guida che evitano di perdere tempo alla ricerca dei problemi.

Come ottenerla. Seguendo una serie di linee guida in fase di sviluppo ottenere dei risultati riproducibili è semplica.

  • Il preprocessing dei dati dev’essere in ogni caso un processo automatizzato.
  • Registra anche i risultati intermedi dell’elaborazione. I log sono in grado di svelare molti misteri.
  • Per ogni test conserva non solo i risultati ma anche dati in input e training set.
  • Se qualcuno ha già scritto qualcosa che funziona bene non reinventare la ruota. Esistono centinaia di librerie Open Source già mature e ampiamente testate che oltre a farti risparmiare tempo renderanno più stabili i tuoi test
  • Comunque c’è anche il risvolto della medaglia per il punto precedente. E’ importante tenere d’occhio aggiornamenti e versioni delle librerie in uso, le novità nel codice possono comportare cambiamenti nei risultati.
  • Documenta accuratamente test e risultati con una procedura batch, avrai a disposizione uno storico completo di tutte le fasi dello sviluppo e della ricerca.
  • Un server per l’integrazione continua semplifica le cose perchè i developers si dovranno occupare solo di trasformare le idee in codice, il resto delle operazioni saranno automatizzate.

Per approfondire la questione riproducibilità/replicabilità consiglio questo breve ma “intenso” paper che può risultare illuminante. Inoltre qualche altro spunto interessante sull’argomento puoi trovarlo in questa presentazione.

AI e sicurezza per gli Hotel sul Web.

Un CMS sicuro, un Booking Engine intelligente, un sistema di fidelizzazione unico nel suo genere e una strategia ADV che funziona. Tutto questo perché l’Hotel Web Marketing da solo non basta.

Hotel Easy Reservation

A questo punti potresti anche smettere di leggere perché ti ho già rivelato i punti chiave di questo articolo ma sono sicuro che se sei finito qui ti interesserà saperne di più. EasyConsulting ha in catalogo una soluzione integrata che comprende un AI per il booking e avanzate misure di sicurezza per gli hotel che vogliono una presenza consistente sul web.

HOTELCOMPOSER é il punto di partenza, un CMS sicuro e robusto che rende semplice la creazione di un sito web moderno, mobile-friendly e ottimizzato per i motori di ricerca (SEO).

HOTELEASYRESERVATIONS invece é un Hotel Booking Engine che sfrutta algoritmi di intelligenza artificiale per adattare rapidamente l’offerta alle esigenze degli ospiti, prevedendone in real time le esigenze. Grazie al supporto dell’AI una volta inserite le date si puó completare la prenotazione in soli due step.

HOTELRECOVERYTOOLS é lo strumento che terrá gli utenti incollati al tuo sito, il sistema intercetta gli utenti in uscita e proponendo la soluzione migliore a portata di click. Per massimizzare il tasso di conversione dei visitatori.

HOTELFLUIDADS ha un nome complesso ma nasconde un sistema semplice: definisce la tua strategia di marketing online integrando gli strumenti migliori che hai a disposizione per far conoscere la tua struttura. In realtà é anche un mezzo gestire al meglio gli investimenti pubblicitari senza sprecare nemmeno un’euro.

Sotto il profilo security i dati degli ospiti sono in buone mani, protetti con la tecnologia più avanzata. Comunicazioni criptate con protocollo HTTPS SSL fino a 256 bit  e compliance con lo standard PCI-DSS per la gestione della sicurezza dei dati delle carte di credito.

Tutto questo lo trovate qui. E poi un’ultima cosa: la t-shirt merita!

 

 

 

 

 

 

 

 

Si, questo é un contenuto sponsorizzato. Su questo blog parlo sempre e comunque di cose innovative e che funzionano veramente. D’altronde Sicurezza, AI e Automazione sono argomenti seri!

Buzzoole