Stiltwalker: Ecco come un gruppo di hackers ha aggirato ReCaptcha

Di - 4 June 2012 - in

Con l’acronimo CAPTCHA vengono chiamati i test di Turing automatizzati, ovvero i test automatici per distinguere gli esseri umani dai computer. Vi sono moltissimi tipi di test di questo genere, ma indubbiamente i piú diffusi sono quelli che chiedono all’utente di trascrivere delle parole scritte in maniera deformata o disturbata sullo schermo del computer.

Test di questo genere sono fortemente criticati, poiché si basano su un’attività, la lettura di parole in un’immagine, che spesso i computer sanno fare bene e che non è detto che gli esseri umani sappiano fare (si pensi ai problemi di cecità o ipovisione).

Google ha risolto entrambi i problemi in maniera piuttosto interessante. I CAPTCHA di Google, chiamati ReCaptcha, sono formati da due parole: la prima è nota a Google, mentre la seconda proviene da un libro scannerizzato per il progetto Google Books e che il sistema di lettura dei caratteri che Google utilizza non è riuscito a leggere. Quando una parola viene trascritta allo stesso modo tre volte, Google la inserisce tra quelle note. In questo modo, i ReCaptcha contengono solo parole che non è stato possibile far leggere ad un computer con un software sofisticato come quello di Google. Difficile quindi attaccare il sistema da questo fronte.

Il secondo problema è stato risolto dando la possibilità di ascoltare un audio disturbato che detta alcune parole da trascrivere, diverse da quelle scritte (altrimenti si aiuterebbe un eventuale attaccante che potrebbe incrociare i dati provenienti dal testo scritto e quelli provenienti dall’audio). Questo fronte è chiaramente piú debole, poiché l’audio non viene da una sorgente che non è stato possibile interpretare con il computer.

Queste caratteristiche hanno reso ReCaptcha qualcosa di molto sicuro e, allo stesso tempo, di molto pratico, favorendone una diffusione enorme: fanno uso di ReCaptcha ormai quasi tutti i grandi siti web, e moltissimi siti, forum e blog personali. Diversi hacker hanno tentato di attaccare il sistema, ma con percentuali di successo mai davvero soddisfacenti.

Un gruppo di tre hacker, chiamati C-P, Adam e Jeffball, in un progetto chiamato Stiltwalker (Trampoliere), sono riusciti ad aggirare il sistema attaccando proprio il fronte del sistema audio. Google, però, lo ha migliorato poco prima che loro pubblicassero i risultati, rendendo vano il tutto. Vediamo in ogni caso come hanno fatto, è decisamente interessante.

La struttura dell’audio di ReCaptcha

Il file audio generato da ReCaptcha era costituito da sei parole. Alle sei parole, veniva sovrapposta la registrazione all’inverso di un rumore statico radio di fondo (il rumore che si sente quando la radio non prende). In questo modo il cervello umano, che è in grado di distinguere le parole con un significato da un rumore di fondo, era in grado di interpretare le parole dettate, mentre un computer non era neanche in grado da distinguere le parti di solo rumore dalle parti con le parole.

Le parole differenti dettate da ReCaptcha sono solamente 58, ma sono pronunciate con accenti e tonalità differenti, che unite al rumore di fondo consentono di complicare comunque le cose abbastanza da rendere difficoltoso un attacco.

I problemi creati ad un eventuale attaccante sono quindi tre. Il primo è il distinguere i momenti in cui viene effettivamente pronunciata una parola, oltre al rumore di fondo, e quelli in cui invece c’è solo rumore. Il secondo è distinguere, in quelle parti, il rumore di fondo dalle parole. Il terzo è interpretare le parole.

Analisi dello spettro

I tre hacker hanno preso una serie di campioni dell’audio e lo hanno rapidamente analizzato. Ne è venuto fuori che nei momenti in cui viene dettata una parola, il suono contiene frequenze alte, che invece sono completamente assenti nei momenti di rumore di fondo. Questo bug enorme, ma effettivamente difficile da immaginare, ha permesso con una banale spettrografia, di distinguere e separare le parti contenenti le parole da analizzare dal rumore che si può tranquillamente buttar via.

L’analisi dello spettro è nell’immagine in cima all’articolo. I picchi, molto evidenti, indicano le zone di parlato, mentre le valli sono le zone di solo rumore.

Hashing percettivo: un tentativo fallito

A questo punto, se gli spezzoni contenenti parole uguali fossero tutti uguali tra loro, la risoluzione del CAPTCHA sarebbe stata banale. Tra i vari spezzoni “uguali”, però, varia sia il rumore di fondo, sia la pronuncia, rendendo totalmente impossibile il confronto per un computer.

Il modo migliore per confrontare due file pesanti, come i file audio, è farne un hash (una stringa-riassunto di lunghezza predefinita, costruita in modo tale che da file identici vengono hash identici mentre da file diversi è estremamente improbabile che vengano hash identici). Tale metodo risulta qui completamente inapplicabile.

Qualche speranza lo da’ l’hashing percettivo. Si tratta di una tecnica per generare specificamente hash di file audio, implementata dalla libreria open source pHash, i cui hash derivanti da file che hanno caratteristiche audio simili sono simili.

Questo permette di prendere una piccola serie di campioni per ogni parola (che, ricordo, sono 58), farne il pHash, e crearsi cosí una tabella con una serie di pHash per ogni parola. A questo punto si possono confrontare i pHash di nuovi spezzoni audio con quelli contenuti nella tabella, calcolando a quale dei pHash noti somigli di piú il nuovo pHash.

Come spesso accade quando ciò che si attacca è ben fatto, questa tecnica cosí semplice ed efficace nella teoria si è poi rivelata un completo fallimento nella pratica, non raggiungendo nemmeno il 30% di successi.

I disturbi introdotti da Google, infatti, sono abbastanza ben fatti da rendere gli spezzoni tutti ugualmente diversi fra loro, e rendendo inservibile il pHashing.

Rete neurale

Quando le cose semplici funzionano male, la sfida si fa abbastanza interessante da rendere molto piacevole escogitare stratagemmi complessi. I tre hacker hanno fatto un salto di complessità davvero notevole, realizzando loro stessi un algoritmo ad apprendimento automatico basato su una rete neurale.

Vale la pena spendere qualche parola su questo tipo di algoritmi per chi non ne ha chiara l’idea di fondo. Un algoritmo ad apprendimento automatico è semplicemente una procedura in grado di modificare il proprio comportamento in base ai dati che gli vengono forniti. Ad esempio, un algoritmo che impari a giocare sempre meglio a scacchi osservando le contromosse del proprio avversario umano, o un algoritmo che trascrive testo dettato, imparando a farlo sempre meglio accettando le correzioni fatte poi a mano dal suo utente.

Vi sono diversi modi di realizzare algoritmi di questo genere. Uno dei piú diffusi, grazie alla sua potenza e capacità di sopportare un certo carico di insegnamenti errati, unito a una certa semplicità costruttiva, è quello basato su reti neurali. Una rete neurale è, semplificando, una struttura che collega una certa quantità di ingressi ad una certa quantità di uscite, modificando i percorsi tra ingressi e uscite in base a ciò che le viene insegnato dall’esterno.

I tre hacker hanno dato in pasto alla loro rete ben 50000 parole generate da ReCaptcha, assieme alle relative trascrizioni fatte dagli utenti. A questo, inoltre, hanno aggiunto la scoperta di un bug molto comune: alcuni insiemi di parole erano piú comuni di altri. Ciò è dovuto al fatto che i generatori di numeri casuali si basano su algoritmi che generano sequenze non realmente casuali.

In questo modo hanno realizzato un sistema molto simile ai riconoscitori vocali utilizzati per la dettatura di testi, che in genere si basano sull’apprendimento automatico e sull’analisi statistica delle parole che vengono messe piú comunemente vicine tra loro.

Creandosi un database degli hash (reali, non pHash) di circa 15 milioni di sestine di parole (scegliendo tra le piú comuni) sulle circa 25 milioni di sestine possibili, sono riusciti a tirar fuori un sistema che riconosce, nella maggior parte dei casi, la sestina direttamente dall’hash in meno di un secondo.

Restringere lo spazio delle chiavi

Non soddisfatti, hanno sfruttato anche un’altra caratteristica del sistema di Google. Dato che spesso, con il rumore di fondo, è difficile per l’orecchio umano capire chiaramente una parola, ReCaptcha accetta anche parole dalla pronuncia simile a quella di ciò che viene dettato. In inglese non sono poche le parole con pronuncia molto simile, ed è quindi stato possibile utilizzare una sola parola per tradurre gruppi di molte parole. In questo modo è stato ridotto di molto lo spazio delle chiavi, ovvero l’insieme di parole da inserire, riducendo ulteriormente i tempi di riconoscimento.

L’algoritmo cosí realizzato è stato in grado di risolvere 17338 CAPTCHA audio su 17495, con un’efficienza del 99,1%, riuscendo a trascrivere correttamente fino a 847 CAPTCHA consecutivamente senza sbagliare. Ulteriori informazioni si trovano sul sito del gruppo.

Le contromisure di Google

Due ore prima che Stiltwalker facesse il suo debutto pubblico alla conferenza di sicurezza LayerOne, Google ha pesantemente modificato il suo sistema rendendo Slitwalker inservibile.

Il rumore di fondo è stato sostituito con voci manipolate in modo da essere rese rumori incomprensibili, facendo in modo che le alte frequenze siano sull’intero blocco di audio. Ecco lo spettro, confrontabile facilmente con il vecchio spettro che è in cima all’articolo:

Inoltre, la frase è stata portata da sei a dieci parole e il tempo a trenta secondi (le frasi del vecchio sistema duravano soli otto secondi). Adam, del gruppo degli hacker, ha dichiarato di non aver prove che siano state date informazioni a Google, ma che sia difficile credere si tratti di una coincidenza.

Un portavoce di Google ha dichiarato che l’aggiornamento è stato fatto per riparare una vulnerabilità di ReCaptcha e che continueranno a studiare questo tipo di vulnerabilità con l’intento di mantenere il sistema sicuro senza però rinunciare ad una semplicità di interpretazione delle parole da parte di chi ne fa uso. Ha dichiarato inoltre che sebbene ReCaptcha sia uno strumento sicuro e robusto contro attacchi di abuso dei servizi, va comunque utilizzato sempre in abbinamento ad altre tecnologie.

Adam è però poco convinto delle parole del portavoce, quando dice che il sistema rimane semplice da interpretare per le persone: “Sono riuscito a passare un test su tre, il loro test di Turing non è cosí efficace se crede che io sia un robot”.

Dopo qualche tentativo, mi trovo a concordare con lui. Non che mi siano stati mai molto congegnali, questi test.

Via | Ars Technica

Leave a Reply

Lorenzo Breda Articolo scritto da

Studente di Informatica a Roma, si occupa di programmazione web sopratutto lato server, e di accessibilità del web. Utilizza e ama Debian GNU/Linux, e si interessa di fisica, fumetto, trekking e fotografia (gli ultimi due possibilmente abbinati).
Collabora con Googlab da aprile 2012.

Contatta l'autore

Previous post:

Next post: