Le impronte digitali degli script

 

Coloro che studiano la stilometria, materia che analizza un testo individuando gli indicatori stilistici al fine di identificare uno stile linguistico, sanno da tempo che la scrittura è un processo individuale, appartenente alla personalità dell’uomo.

Il range di parole scelto per comporre un testo, la sintassi e tutte le decisioni grammaticali sono alcuni esempi di elementi che identificano l’autore di un testo e ne stabiliscono la sua unicità; per tali motivi, la stilometria effettua una serie di misurazioni sul testo e ne identifica le costanti che sono come delle microscopiche “impronte digitali” utili ad individuare un autore.

Oggi vi sono strumenti automatici che già impiegano la stilometria ad esempio per il contrasto al fenomeno dei troll. L’elemento di svolta sta nel fatto che recenti ricerche dimostrano come la stilometria, se applicata insieme al machine learning, può essere utilizzata anche per l’analisi e l’attribuzione dei “testi artificiali”, come ad esempio il codice che compone un programma.

Rachel Greenstadt, professoressa della Drexel University e Aylin Caliskan della George Washington University, hanno scoperto come le linee di codice, esattamente come qualsiasi altra forma di espressione stilistica, non sono un qualcosa di “anonimo”.  È interessante notare, quindi, che uno sviluppatore lascia dietro di sé delle “tracce” che lo identificano esattamente come un qualsiasi autore di un testo.

Durante il DefCon, famosa hacking conference, Greenstadt e Caliskan hanno presentato una serie di studi, il più rilevante un algoritmo che sfrutta le tecniche di machine learning e di stilometria ciò allo scopo di de-anonimizzare gli autori di alcuni samples di codice. L’algoritmo sviluppato identifica automaticamente alcune caratteristiche presenti all’interno di un frammento di codice, le “isola” e le riconosce come elementi distintivi dello sviluppato. Il metodo utilizzato per “isolare” tali caratteristiche si basa sulla creazione di un “abstract syntax trees” (AST), albero che rappresenta graficamente la struttura sintattica del source code. Per semplicità, si può affermare che la tecnica utilizzata sia simile al metodo impiegato per identificare la struttura delle frasi scritte, per questo, piuttosto che soffermarsi sul modo in cui il codice è formattato, come ad esempio l’indentazione dei blocchi di codice, la tecnica individua la struttura sintattica sottostante.

Inoltre, dato che la tecnica si basa sul machine learning, più l’algoritmo analizza samples di diversi sviluppatori, più si affina aumentando la sua capacità di identificare codice appartenente a soggetti diversi.

Già nel 2017, Caliskan e Greenstadt dimostrarono come anche piccole parti di codice presenti su GitHub possono essere sufficienti per differenziare, con alto grado di accuratezza, gli autori di un codice.

Tuttavia l’elemento sicuramente impressionante è che Caliskan e il suo team riuscirono a de-anonimizzare il codice a partire dal codice oggetto, ovvero il codice sorgente tradotto in linguaggio macchina. Quando uno sviluppatore scrive una sezione di codice, per funzionare, tale linguaggio deve essere tradotto in un linguaggio comprensibile alla macchina; questa operazione viene effettuata dal compiler che traduce il linguaggio originale in una serie di 1 e 0, linguaggio non comprensibile agli esseri umani. Il team di Caliskan ha de-compilato il codice binario facendolo ritornare nel linguaggio di programmazione originario (nei loro test C++), mantenendo gli elementi stilistici originari dell’autore. Per semplificare, si ipotizzi di creare un testo e di tradurlo con google translate al fine di trasformarlo in un testo di lingua diversa: se il testo può apparire totalmente diverso a causa del cambio di lingua, gli elementi caratteristici permangono e sono rappresentativi dello stile dell’autore. Ciò è valido anche in caso di reverse, ovvero facendo ritornare il testo nella lingua originaria.

Per tali test, partendo dal codice binario, i ricercatori hanno utilizzato i sample pubblicati dalla competizione annuale di Google chiamata Code Jam. L’algoritmo in machine learning ha analizzato i sample di un gruppo di 100 programmatori – 8 samples per ognuno – riuscendo nel 96% dei casi ha identificare correttamente e distinguere lo sviluppatore autore del codice. Aumentando il range a 600 programmatori, l’algoritmo è riuscito ad avere un’accuratezza dell’83%.

Implicazioni e scenari futuri

La ricerca di Greenstadt and Caliskan ha mostrato la programmazione sotto una nuova luce, dimostrando soprattutto come gli sviluppatori con maggiore esperienza siano più identificabili dei novizi, in quanto più si è abili a programmare più il codice diventale “personale” e di conseguenza maggiormente identificabile.

Vi sono tuttavia una serie di implicazioni da considerare: il lavoro di Caliskan e Greenstadt può essere utilizzato per varie finalità, ad esempio per identificare casi di plagio nel software oppure per identificare l’autore di un ipotetico malware. Al giorno d’oggi vi sono una serie di attacchi cibernetici di cui non si conosce l’autore, di fatto, spesso di un attacco si sa “quando” è avvenuto, “come” è avvenuto, ma quasi mai “chi” l’ha posto in essere.

È interessante notare come un importante contributo alla ricerca di Caliskan e Greenstadt è arrivato dallo US Army Research Laboratory, significando probabilmente che lo US Army sta testando tale algoritmo nel cyberspace, magari identificando e catalogando le impronte digitali di cyber attacchi ricevuti dall’infrastruttura USA.  Per questo non è da escludere che in un futuro prossimo, se perfezionato l’algoritmo, si raggiungerà una maggiore certezza nel processo di attribuzione di un cyber attacco, magari a partire dai tentativi di ingerenza posti in essere da Nazioni straniere.

Più preoccupante il caso di un ipotetico Governo autoritario che sfrutta una tecnica di questo tipo per de-anonimizzare e identificare gli individui che hanno sviluppato un tool per aggirare la censura. Tale logica ci permette di identificare possibili implicazioni ai danni della privacy di quei sviluppatori che contribuiscono ai progetti open source e che vogliono rimanere anonimi (es. Tor Project).

Se un team di sviluppatori crea clandestinamente un tool di obfuscation delle comunicazioni evitando in tal modo di essere intercettati da un governo autoritario, è molto probabile che dall’analisi del codice si possa risalire agli autori nonostante l’impiego di tecniche off-the-shelf  obfuscation.

Per ora, Caliskan e Greenstadt si limitano a dichiarare come la strada verso il processo di coding de-anonymization sia ancora lunga.

 

Articolo di Daniele Algisi

© Riproduzione riservata