Posted by On aprile - 22 - 2009 21 Comments

Craccare una rete wireless protetta da WEP è relativamente semplice: è una cosa risaputa. Craccare una rete protetta da WPA e WPA2 è decisamente più complicato. Non è impossibile, ma sicuramente arduo e richiede tempo, molto tempo. Tentare di craccare una rete protetta con la key standard fornita insieme al modem Wi-Fi dal provider sembra una missione impossibile. In genere queste chiavi sono formate da numeri e lettere, e la lunghezza è consistente ovvero di 8/10 caratteri. Il brute force potrebbe essere lunghissimo. Ma potrebbe esserci (anzi c’è) una scorciatoia, una scorciatoia che riduce i tempi di cracking: anzi, non li riduce ma li annulla! Fantascienza? Vediamo… Il metodo che presento in questo articolo non è universale e non sfrutta una vulnerabilità dei sistemi WPA/WPA2 (o WEP), bensi l’algoritmo di generazione delle key standard. TerminologiaAccess Point (AP): E’ il dispositivo che fornisce il servizio wireless, modem/router Wi-Fi. Key (PSK): E’ la “password” (pre-shared key), la chiave segreta che protegge la comunicazione wireless. In genere è composta da lettere e numeri. E’ il segreto condiviso tra Access Point e PC. ISP: Internet Service Provide, chi fornisce la connettività Internet. Fornisce il modem per collegarsi alla rete che nel caso preso in esame diffonde anche il segnale Wi-Fi (AP). Mac Address: Media Access Control, è l’identificatore univoco di una scheda di rete. Ogni interfaccia di rete wireless o ethernet che sia (ma anche altri tipi, vedi bluetooh) ha un Mac Address. Il Mac Address è formato da sei byte rappresentati in formato esadecimale (12-34-56-78-9A-BC-DE); i primi tre byte identificano il costruttore, gli altri tre sono univoci per dispositivo. Serial (S/N): E’ un codice che identifica in modo univoco un apparato, nel nostro caso il router/modem fornito dall’ISP. SSID: Service Set Identifier, è il nome di una rete Wi-Fi. Il Problema Quando sottoscriviamo un contratto con un ISP ci viene fornito un modem. In genere il modem viene ha in dotazione un CD; sulla confezione del cd o sotto l’apparato stesso c’è un adesivo con dei parametri. Uno di questi parametri (key) è la chiave WPA/WPA2 che dobbiamo inserire nella configurazione del nostro computer per poter accedere al servizio Wi-Fi. E’ l’unica informazione che dovrebbe essere segreta. Gli altri tre parametri sono ininfluenti. Anzi, dovrebbero essere ininfluenti. [ad] Il problema risiede nel fatto che le chiavi segrete di default sono generate con un algoritmo. E’ stato osservato da alcuni ricercatori che esistono casi in cui i parametri dell’algoritmo sono presi dal Mac Address, dal Serial o dal SSID; peggio ancora, spesso il SSID e il Serial discendono direttamente dal Mac Address. Questo significa che ottenendo il SSID e il Mac Address, o anche soltanto uno di questi due valori, effettuando il reverse engineering dell’algoritmo è possibile ottenere le key di dafault di tutti i modem di un particolare modello! Se si pensa che gli ISP distribuiscono migliaia di modem dello stesso modello e considerando inoltre che probabilmente tutti i costruttori di modem adottano meccanismi simili per la generazione delle key standard; aggiungiamo il fatto che l’utente medio difficilmente cambierà la key standard otteniamo il risultato che probabilmente gran parte dei modem Wi-Fi distribuiti dagli ISP in tutto il mondo sono vulnerabili a questo problema. La Ricerca La mia ricerca è iniziata leggendo un documento scritto da Muris Kurgas, un hacker montenegrino, il quale ha scoperto ed ha effettuato il reverse engineering dell’algoritmo di generazione della key standard del modem Pirelli Discus DRG225, molto diffuso nel suo Paese. La sua analisi era iniziata cercando vulnerabilità nei router/modem Thomson SpeedTouch e trovando appunto uno studio su questo genere di problema. Ispirandomi a queste ricerche ho deciso di effettuare il reverse engineering dell’algoritmo di generazione della key standard del mio modem/router Telsey distribuito da Fastweb. Nonostante avessi a disposizione solo i parametri del mio apparato, non avendo quindi la possibilità di incrociare i risutalti con altri dati, a differenza di Muris Kurgas che aveva i dati di diversi modem, sono riuscito a ricostruire la logica dell’algoritmo, gettando le basi per la realizzazione di un generatore universale di key dei modem attualmente distribuiti da Fastweb. Da precisare che i modem Telsey di qualche anno fa apparentemente hanno una logica ancora più semplice. Infatti, utilizzando delle combinazioni di Fastweb/Telsey SSID, Mac e Serial di modem pubblicati su Internet, ho notato che la procedura di generazione del Serial è molto più semplice e diversa da quella descritta in questo articolo. Dal SSID al Serial Nella mia ricerca mi sono ispirato ai lavori citati prima sui modem Pireli e Thomson. In entrambi casi ho notato che: 1. Il SSID è derivato dal Mac Address 2. Il Serial è derivato dal SSID (e quindi in qualche modo dal Mac Address) 3. La key (PSK) è derivata dal Serial Number (S/N) Questo significa che conoscendo il Mac Address (dato pubblico e facilmente ottenibile) si può risalire alla key segreta. Così ho deciso di iniziare la mia caccia cercando di capire se c’era un legame tra SSID/Mac e Serial anche in questo caso. I dati di cui ho a disposizione sono i dati del modem che mi ha fornito Fastweb: SSID: FASTWEB-1-00036F8E42BC Mac:  00-03-6F-8E-42-BC S/N:  00776934 PSK:  7fcee0998a Il mio obiettivo è trovare un algoritmo in grado di generare la PSK partendo dal SSID. Trovare questo algoritmo significa ottenere le key di tutti gli apparati Telsey di questo modello. E’ subito evidente che il SSID è il Mac Address al quale è stato aggiunta all’inizio la stringa “FASTWEB-1-”. Per prima cosa ho deciso di capire se il Serial fosse direttamente collegato al Mac effettuando una semplice conversione numerica, cosa che si verificava nei vecchi modelli Telsey. Infatti fino a qualche tempo fa i Serial dei modem Telsey erano la versione decimale delle ultime sei cifre decimali del Mac: Ultime sei cifre del mio Mac: 8E42BC Versione decimale: 9323196 E qui la prima delusione: il risultato è diverso dal previsto, infatti il mio Serial è 00776934. Lo sconforto dura poco perchè mi sorge un sospetto: le prime 3 cifre del risultato ottenuto (932) non sono molto diverse dalle ultime 3 cifre del mio Serial (934). Decido che non si tratta di una coincidenza, ma di un segno che la pista è buona e devo continuare a batterla. Giocando con il Mac Address mi accorgo che se invece delle ultime 6 cifre, prendo in considerazione e converto le ultime 5 (E42BC) da esadecimale a decimale ottengo 934588. Inizia a sorgermi il dubbio che il Serial sia formato da due valori di 3 cifre e con l’aggiunta degli 0 davanti. Se fosse così avrei già la seconda parte del Serial (934). Ma la prima parte (776) da dove esce? Se inverto applico il metodo appena illustrato a 934588 ottengo 588934: $E42BC  -> 934588 -> 934 588 -> 588 934 -> 00588934 Ricordo che il mio primo obiettivo è ottenere il Serial che nel mio caso è 00776934. Se la mia intuizione è giusta, ovvero se il Serial è formato da due sequenze di 3 cifre, sequenze che sarebbero l’inversione di un unico numero, per ottenere il Serial corretto manca ancora un’operazione. La seconda parte è giusta, la prima invece è diversa: ho ottenuto 588 ma mi aspettavo 776. Qual’è la differenza tra i due numeri? 776-588=188. Non mi dice nulla. Ma convertendo questo numero in esadecimale ottengo $BC: ovvero l’ultimo byte del Mac Address, che ricordo è 00-03-6F-8E-42-BC. La pista era giusta. Anche in questo caso il Serial deriva dal Mac Address. Per ottenere il Serial si prendono le ultime 5 cifre esadecimali del Mac e si sommano le ultime 2 cifre esadecimali del Mac stesso. Il risultato viene spezzato in due parti composte da 3 cifre e le due parti vengono scambiate di posizione: $E42BC = 934588 934588+188($BC) = 934776 934776 -> 934 776 ->  776 934 -> 00776934 La prima parte della missione è compiuta. Ho dimostrato che anche in questo caso il Serial deriva dal Mac Address. Se riuscirò anche nella seconda parte, ovvero la parte che conduce dal Serial alla key l’obiettivo sarà centrato. Dal Serial alla Key Ora so che c’è un legame tra SSID, Mac e Serial. Esiste un legame tra questi valori e la key (PSK)? Se si, quale? Nel caso dei Pirelli Discus analizzati da Muris Kurgas la key coincideva col Serial; nei Thomson SpeedTouch parte del SSID e la key derivano dall’elaborazione tramite hash sha1 del Serial. Non sapendo bene da dove partire effettuo un po’ di conversioni numeriche, e semplici operazioni di sottrazione, per cercare una traccia operando in modo simile al procedimento utilizzato per giungere al Serial. Purtroppo non ottengo nulla che mi sembri utile. Sono in un vicolo cieco. Decido di ripartire dalla key: 7fcee0998a. Cosa dice questo codice? Dieci cifre, esadecimali. Pare non abbiano un rapporto diretto riconoscibile col Mac e neppure col Serial. Potrebbero essere estratti da un md5 o da un sha1 come nel caso del Thomson. Ripensando anche alla logica fin qui usata dai programmatori, la key potrebbe essere composta da due semi-key di 5 cifre, ovvero 7fcee  e 0998a. A loro volta questi semi-key potrebbero essere frammenti (l’inizio o la fine) del risultato di un’operazione hash. Decido di seguire questa pista. Creo delle tabelle di hash md5 e sha1 basate sulla progressione di numeri a partire da 934588, ovvero la versione decimale delle ultime 5 cifre del Mac, numero utilizzato prima per trovare il Serial. Una volta create queste tabelle cerco i frammenti di semi-key: 7fcee e 0998a. Trovo il primo valore, si tratta dell’md5 si 936205: 936205 -> 2c916640d3b87a6aed4e443d9387fcee le ultime 5 cifre corrispondo alla semi-key. La distanza tra il valore trovato (936205) e l’origine 934588 è 1617. Non mi dice molto. Più tardi mi accorgerò che con maggior lucidità e freddezza avrei raggiunto (quasi) l’obiettivo senza l’ausilio poco elegante delle tabelle di hash: alla fine un volgare brute-force… Poco dopo trovo l’altra metà della key: 939674 023292804e3088ed5e6d2995f0998ac0 All’inizio trovo sconfortante il risultato: non mi convince il fatto che non si tratti degli ultimi 5 caratteri ma degli ultimi 7, con ‘c0′ che viene eliminato. A mettermi di buon umore però è la distanza tra i due numeri: 939674 - 936205 = 3469 A prima vista il numero 3469 non dice nulla; ma se andiamo  a guardare il Serial (00776934) ci accorgiamo che si tratta ancora una volta del giochetto dello scambio delle sequenze: 00776934 -> 6934 -> 69 34 -> 3469 Ho scoperto dunque che la key è formata da frammenti di md5; i due frammenti sono ottenuti estraendoli dalle ultime 5 e 7 cifre dell’md5, e che i due valori originali da cui derivano gli md5 sono “distanti” 3469 unità, ovvero un numero direttamente riconducibile al Serial. A questo punto però manca ancora un elemento: da dove esce il numero 1617, che separa il numero derivato dal Mac (934588) dal primo (e come abbiamo visto di conseguenza il secondo) valore utilizzato per generare la key? A Volte i Conti non Tornano… La risposta è: non lo so! O meglio, lo so, anche se non con precisione. Andiamo per gradi. Per scoprire gli hash che danno origine alla key ho fatto ricorso ad un brute force. Ho così trovato un numero misterioso (1617) che è poi la chiave di tutta la faccenda, il valore incognito che permette di arrivare dal Mac alla key. Da dove esce questo numero? Dalla aritmetica modulare, assai utilizzata in crittografia. Se prendo il numero 934776 (vedi sopra) e applico il modulo 3469 (che abbiamo appena visto) ottengo come risultato 1615; come ricorderete il numero che mi aspettavo di trovare è 1617. 934776 mod 3469 = 1615 (Non 1617 ???) Qui c’è la discrepanza che non sono riuscito a risolvere, se non stabilendo che i programmatori hanno deciso di aggiungere un valore costante di 2 al risultato dell’operazione di modulo, spiegazione che non mi convince molto. Per risolvere la questione mi servirebbero altri dati completi (SSID, Mac, Serial e key) per poter incrociare i risultati. Già così però ritengo di essere giunto a buon punto. Considerazioni Finali Partendo dalla ricerca di un hacker montenegrino che ha scoperto come risalire alla key standard di un modem Wi-Fi diffuso nel suo Paese ricostruendo l’algoritmo di generazione della key stessa. Ho deciso di fare lo stesso sull’apparato che il mio ISP mi ha dato in dotazione. Seppur l’esito finale presenti una lieva anomalia, sono riuscito a dimostrare la dipendenza del Serial Number dal SSID (e dal Mac). Con una maggior quantità di dati da analizzare sarebbe probabilmente possibile superare anche l’anomalia e creare uno script per implementare l’algoritmo di generazione delle key. La stessa cosa può essere fatta su qualsiasi altro modello di modem attualmente in circolazione. La contromisura a questo attacco è banale: non utilizzare mai le key e le password di dafault. Il problema però è: in quanti lo fanno? E quanti hanno la percezione del rischio che corrono se non modificano le key e le password standard? Fonte: http://www.pillolhacking.net/2009/04/20/cracking-istantaneo-di-chiavi-wpawpa2/ Per meglio comprendere il contenuto di questo articolo è necessario spiegare il significato di alcuni termini utilizzati in questo documento.

VI PROPONGO ANCHE UN ALTRO ARTICOLO PIU DETTAGLIATO PRESO DA http://wifiresearchers.wordpress.com/

Ciò che leggerete in questo post è il frutto di alcune ricerche effettuate da persone appassionate di wifi e tecniche di sicurezza. Anche se il titolo potrebbe far pensare altrimenti è bene capire che il senso etico della guida non è violare reti altrui.. bensì proteggersi, prendere adeguate misure di sicurezza e capire quanto e come il cliente viene tutelato dal proprio ISP. Nonostante questo post sia esclusivamente relativo a Fastweb, il problema non riguarda solamente questo provider ma la più generale nozione di sicurezza dei provider Italiani.

La maggior parte degli utenti che scelgono una encriptazione WPA-PSK si sentono abbastanza sicuri in quanto questo protocollo risulta essere molto robusto, e ciò è effettivamente vero! Ma da quello che apprenderete vi renderete subito conto che il problema sta da un altra parte. Molto spesso tra le sedia e la tastiera! Molte società preferiscono spendere milioni di € in campagne pubblicitarie e non si curano di realizzare dei progetti robusti in termini di sicurezza per garantire la privacy del Cliente.

  • La prima parte di questo articolo sarà una breve introduzione alle notazioni utilizzate e le specifiche tecniche a cui si farà riferimento.
  • Nella seconda parte vedremo nel dettaglio le scelte progetuali adottate per la costruzione della chiave WPA-PSK predefinita impressa nell’etichetta sotto ogni router. Parleremo inoltre dell’architettura degli HAG Fastweb e del modello Pirelli in particolare.
  • Nella terza parte vedremo invece la tecnica di Reverse Enginnering applicata ad un firmware Pirelli Fastweb che ci ha portato alla scoperta dell’algoritmo di generazione della chiave WPA di default.
  • Infine nell’ultima parte accenneremo alle possibili soluzioni per ovviare questi tipi di problemi e garantire perciò una maggiore sicurezza per le comunicazioni di tipo wireless.

Notazioni

MAC Address: codice di 48 bit (6 byte) assegnato in modo univoco ad ogni scheda di rete ethernet prodotta al mondo. Rappresenta in sostanza un nome per un particolare dispositivo di rete. Gli indirizzi MAC vengono solitamente rappresentati in formato esadecimale, separando ciascun ottetto con un trattino o con i due punti. Un esempio di indirizzo MAC è “00-08-74-4C-7F-1D”. Confrontando i primi tre ottetti con le assegnazioni OUI dell’IEEE, si può osservare come esso appartenga alla Dell Corporation, mentre gli ultimi tre ottetti rappresentano il numero seriale assegnato al componente dal produttore.

Ogni scheda ha un indirizzo unico perché i primi 24 bit sono identificativi della casa produttrice e i successivi della scheda. In questo modo ogni casa produttrice ha a disposizione 2 alla 24 indirizzi, quindi può produrre più di 16 milioni di schede; se un produttore ne produce meno, gli indirizzi (a 48 bit) non assegnati vengono persi, non potendo essere utilizzati da altri costruttori. Una lista dei vendors si può trovare a questo indirizzo: Vendors

SSID: il Service Set Identifier è il nome con cui una rete Wi-Fi si identifica ai suoi utenti. Spesso gli access point sono configurati in modo da annunciare continuamente i loro SSID, cossicché i dispositivi Wi-Fi possano creare un elenco delle reti disponibili nella zona in cui si trovano.

WEP: Wired Equivalent Privacy: è un protocollo di sicurezza per reti wireless ormai insicuro e ritenuto legacy.

WPA-PSK: Wi-Fi Protected Access (WPA e WPA 2) è un programma di certificazione e un protocollo per la sicurezza di reti wireless, basato sull’uso di password, amministrato dall’alleanza del Wi-Fi come forma di protezione per le reti di computer wireless.

HAG: Home Access Gateway. Apparato di rete in dotazione dei clienti Fastweb, l’equivalente router/modem fornito ai clienti di altri ISP nazionali. In ingresso riceve un segnale digitale proveniente dalla rete Fastweb, in uscita fornisce un segnale telefonico analogico tradizionale e un segnale dati a velocità variabile, dipendente dal tipo di cablaggio dell’utenza: fibra ottica o xDSL.

Brute Force: Il metodo “forza bruta” è un algoritmo di risoluzione di un problema che consiste nel verificare tutte le soluzioni teoricamente possibili fino a che si trova quella effettivamente corretta.

Il suo principale fattore positivo è che consente teoricamente sempre di trovare la soluzione corretta, ma per contro è sempre la soluzione più lenta o dispendiosa; viene utilizzato come ultima risorsa sia in crittanalisi che in altre parti della matematica solamente in quei casi dove sia l’unico procedimento conosciuto.

Attacco a dizionario: Nella crittanalisi e nella sicurezza informatica, un attacco a dizionario è una tecnica per “rompere” un codice cifrato o un meccanismo di autenticazione provando a decifrare il codice o a determinare la passphrase cercando tra un gran numero di possibilità. In pratica si tenta di accedere a dati protetti da password (sia remoti, come ad esempio accounts su siti web o server di posta; sia locali, come documenti o archivi protetti da password) tramite una serie continuativa e sistematica di tentativi di inserimento della password, solitamente effettuati in modo automatizzato, basandosi su uno o più dizionari. In contrasto con un metodo forza bruta (o attacco brute force), dove tutte le possibili password sono ricercate in maniera esaustiva, un attacco a dizionario prova solamente le possibili password più probabili. Si può usare una lista di parole probabili (detta dizionario).


MIPS: acronimo di Microprocessor without Interlocked Pipeline Stages, è un processore di architettura RISC sviluppato da MIPS Computer Systems Inc. Il MIPS è utilizzato nel campo dei computer SGI, e hanno trovato grossa diffusione nell’ambito dei sistemi embedded, dei devices di Windows CE e nei router di Cisco . Le console Nintendo 64, Sony PlayStation, Sony PlayStation 2 e Sony PlayStation Portable utilizzano processori MIPS, nonchè gli HAG forniti da Fastweb ISP, che si basano su un’architettura a 32 bit.


IDA: IDA Pro Disassembler and Debugger è un interattivo, programmabile, estensibile, multi-processore, disassemblatore disponibile per sistemi Windows, Linux e Mac OS X. IDA PRO è diventato un software standard per l’analisi del codice ostile alla ricerca di vulnerabilità. Per maggiori informazioni visitare il seguente link: executive overview

Questa guida non ha la pretesa di essere esaustiva sotto ogni aspetto, ma ha lo scopo di aiutare nella logica il lettore, affinchè giunga da solo alle proprie conclusioni. Si invita quindi ad approfondire in maniera autonoma eventuali argomenti di interesse.

Gli HAG Fastweb oggi

La rete Fastweb attualmente distribuisce due modelli di Hag-Fastweb WiFi di due ben note case costrustrici: Telsey e Pirelli.

Per entrambi, Fastweb utilizza un algoritmo proprietario per assegnare in modo univoco una chiave WPA-PSK predefinita dato il rispettivo MAC ADDRESS della scheda wifi interna. Ciò significa che dato un qualsiasi Hag questo è identificato da tre parametri principali: Serial, SSID, WPA-PSK default, MAC Address.

Inoltre l’SSID di rete ha il sequente forato: “Fastweb-A-xxxxxxxxxxxx” dove A può assumere il valore 1 o 2, le x rispecchiano di solito il Mac Address della scheda wireless interna. Dalle prime 3 coppie del MAC è quindi possibile capire di che Hag si tratta. Per i Pirelli Fastweb gli indirizzi sono comunemente del tipo: FASTWEB-1-001CA2xxxxxx o FASTWEB-1-001DBXxxxxxx mentre per i Telsey Fastweb: FASTWEB-1-00036Fxxxxxx oppure FASTWEB-1-002196xxxxxx. Può capitare però che l’SSID non corrisponda al MAC, almeno per le ultime tre coppie. Questo si può facilmente verificare facendo un confronto diretto oppure attraverso uno sniffer di rete come ad esempio kismet.

La chiave WPA-PSK generata di default per ogni Hag è una chiave composta da 10 cifre esadecimali (10 cifre in modo che la stessa chiave supporti contemporanemente lo standard WPA e WEP). Facendo diverse ricerche e riscontri su questo tipo di dati siamo riusciti a capire il significato di quelle lettere apparentemente casuali ed insensate. Per capire meglio il concetto ci affidiamo a qualche esempio pratico reale.

Questi sono i dati (fac-simili) di possibili reti Fastweb Pirelli:

SSID: FASTWEB-1-001CA2AAAAAA

Mac: 00-1C-A2-AA-AA-AA

WEP/WPA PSK: 0964080272


SSID: FASTWEB-1-001CA2BBBBBB

Mac: 00-1C-A2-BB-BB-BB

WEP/WPA PSK: 6b6c657368


SSID: FASTWEB-1-001CA2CCCCCC

Mac: 00-1C-A2-CC-CC-CC

WEP/WPA PSK: 690268086f

Adesso analizziamo le tre chiavi WPA un po’ più da vicino.

0964080272, 6b6c657368, 690268086f

Notiamo subito che le chiavi sono composte da valori esadecimali, aventi quindi un charset di questo tipo {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f}

Qui notiamo subito il primo errore progettuale: Scegliere una chiave WPA di 10 caratteri in uno spazio chiavi abbastanza ristretto, tale da favorire un bruteforce attack. Date le crescenti potenze di calcolo, le chiavi WPA dovrebbero tendere più alla lunghezza massima di 64 caratteri che alla minima di 8. 10 caratteri (casuali) sembrano ancora tutt’oggi un numero tale da scoraggiare la forza bruta, ma come vedremo in realtà lo spazio di ricerca in questo caso è molto più stretto.

Maggiori dettagli

Come accennato sopra la password Fastweb WPA è violabile in tempi più che ragionevoli con un meccanismo di bruteforce. Però, l’assunzione alla base di questa procedura è che la generazione della PSK sia casuale. E se invece casuale non fosse ciò che casuale appare? E, soprattutto, se l’algoritmo del tutto deterministico e ripetibile alla base di questa generazione, dipendesse da dati che è alla portata di chiunque ottenere? Se così fosse l’intero scopo della protezione WPA sarebbe sconfitto in partenza: chiunque potrebbe estrarre i dati e calcolare le PSK che gli interessano.

La nostra ricerca intende dimostrare che nel caso dei router Fastweb Pirelli la preshared key è funzione dell’SSID (ovvero, del nome stesso della rete). La vulnerabilità è particolarmente grave, in quanto l’SSID è il dato pubblico per definizione: volendo o meno, qualsiasi software di gestione wifi lo mostra apertamente.

Primo passo necessario allo sviluppo della ricerca è stata l’estrazione del firmware da un router e la successiva importazione in un ambiente adatto allo studio del codice assembler così ottenuto.

A tale scopo abbiamo analizzato il firmware utilizzando un ottimo software: IDA PRO.

Tale ambiente consente la navigazione del codice ASM MIPS, risolve automaticamente i riferimenti tramite le tabelle dei simboli e in generale semplifica enormemente il lavoro di reversing consentendo di concentrarsi sulla lettura e comprensione del codice.

Una spiacevole (piacevole) sopresa è stata la presenza, nel disassemblato di tutte le funzioni con nomi fortemente autoesplicativi (ulteriore grave errore, a nostro avviso, da parte dei programmatori) questo ci ha permesso di semplificare straordinariamente l’analisi del firmmware.

Il cuore dell’algoritmo si svolge nella soubroutine: cript_it. Tale funzione, dal nome palesemente esplicativo, viene invocata indirettamente durante la generazione dei parametri WiFi del dispositivo. Ad essa viene passato come parametro proprio il nome della rete, o meglio parte di esso, che sostanzialmente rappresenta il MAC Address della scheda wifi contenuta nell’HAG, trattato secondo un algoritmo proprietario non difficile da comprendere.

Analisi dell’Algoritmo

In sintesi questi sono i passi svolti dall’algoritmo per ricavare la WPA predefinita partendo dall’SSID di rete.


  1. Estrae una sequenza di 6 byte dall’SSID.
  2. Inizializza i vettori MD5 (MD5Init).
  3. Inserisce i 6 byte dell’SSID nella sequenza di cui calcola l’hash MD5 (MD5Update).
  4. Ricalcola l’hash MD5 (dell’hash precedente) utilizzando una sequenza di 20 byte predefinita (MD5Update).
  5. Finalizza l’hash MD5 (MD5Finish).
  6. Dall’hash finale crea una squenza binaria ottenuta considerando i primi 4 byte più significativi dell’hash.
  7. Questa sequenza viene a sua volta suddivisa in 5 gruppi da 5 bit ciascuno. I bit in eccesso vengono scartati. Ed ogni gruppo di 5 bit viene riconvertito in esadecimale (*)  riottenendo una sequenza di 5 byte.
  8. Somma 0×57 ad ogni byte il cui valore sia >= 0xA (**).
  9. La concatenazione di queste rappresentazioni (con lettere minuscole) è la WPA PSK di default.
(*) Una sequenza da 5 bit può assumere il valore compreso tra 0×00 e 0x1F.
(**) L’aggiunta della costante 0×57 avviene poichè i caratteri tra 0xA e 0×60 (estremi inclusi) non sono validi nello spazio chiavi considerato, per cui aggiungendo 0×57 a 0xA si ottiene, appunto, ox61 (primo carattere ammesso dopo 0×09).

I punti 2,3 e 4 dell’Algoritmo sono svolti dalla funzione cript_it. Essa riceve in input una sequenza di 6 byte ottenuta dalla parte terminale dell’SSID raggruppando i byte in 6 gruppi da 2 cifre cadauno (00,12,34,56,78,90), e considerando ciascun gruppo un byte espresso in base 16.

Cosa ne fa è presto detto: ne calcola l’MD5 (per la precisione, inserisce questi 6 byte in una sequenza di cui sarà calcolato l’MD5). La procedura MD5 è nota, documentata, e trovarne implementazioni è alla portata di tutti, in ogni linguaggio: BASIC, C/C++, Pascal, C#, COBOL, … basta una semplice ricerca.

Un esperto di tecniche crittografiche avrebbe sicuramente riconosciuto l’algoritmo anche se la routine invocata si fosse chiamata in modo più oscuro (e avrebbe comunque potuto replicare il codice ASM in un linguaggio a scelta, senza capire di star reimplementando un algoritmo noto in letteratura), ma dichiarare platealmente l’uso dell’MD5 è stata un‘ulteriore semplificazione al nostro lavoro.

Usare solo l’SSID così trattato sarà però sembrato sin troppo banale. Si è allora deciso di aggiungere un salt, ovvero una sequenza speciale prefissata di 0×14 (20) byte, da inserire nella sequenza alterando in modo originale la creazione dell’hash MD5! Derivare il salt è stato abbastanza semplice per chi aveva conoscenze pregresse di assembler MIPS, in quanto il codice si avvaleva di una feature tipica di quell’architettura: il delay slot (riteniamo che non sia stata una deliberata scelta offuscativa dei programmatori, ma l’opera del compilatore intenzionato ad usare ogni ciclo in computazione attiva, e minimizzare i NOP).

Tale caratteristica del MIPS32 implica che quando si esegue un salto (o una chiamata di subroutine), la CPU non la esegue subito, ma ha appunto un ciclo “libero” per svolgere un’altra istruzione.

Di seguito è riportato un’estratto della funzione in questione (cript_it).

01 .text:00480FF8       la      $t9, atomac
02 .text:00480FFC       jalr    $t9 ; atomac
03 .text:00481000       move    $a0, $s0
04 .text:00481004       lw      $gp, 0xA8+var_98($sp)
05 .text:00481008       move    $s0, $v0
06 .text:0048100C       addiu   $a0, $sp, 0xA8+var_90
07 .text:00481010       beqz    $s1, loc_48109C
08 .text:00481014       la      $t9, MD5Init
09 .text:00481018       jalr    $t9 ; MD5Init
10 .text:0048101C       nop
11 .text:00481020       lw      $gp, 0xA8+var_98($sp)
12 .text:00481024       move    $a1, $s0
13 .text:00481028       addiu   $a0, $sp, 0xA8+var_90
14 .text:0048102C       la      $t9, MD5Update
15 .text:00481030       jalr    $t9 ; MD5Update
16 .text:00481034       li      $a2, 6
17 .text:00481038       lw      $gp, 0xA8+var_98($sp)
18 .text:0048103C       addiu   $a0, $sp, 0xA8+var_90
19 .text:00481040       li      $a2, 0x14
20 .text:00481044       la      $a1, 0x10020000
21 .text:00481048       la      $t9, MD5Update
22 .text:0048104C       jalr    $t9 ; MD5Update
23 .text:00481050       addiu   $a1, (unk_100220D0 - 0x10020000)
24 .text:00481054       lw      $gp, 0xA8+var_98($sp)
25 .text:00481058       addiu   $a0, $sp, 0xA8+var_20
26 .text:0048105C       la      $t9, MD5Final
27 .text:00481060       jalr    $t9 ; MD5Final


Conoscendo il delay slot, è evidente che l’indirizzo della sequenza segreta è unk_100220D0. A tale indirizzo troviamo:

0x22,0x33,0x11,0x34,0x02,0x81,0xFA,0x22,0x11,0x41,0x68,0x11,0x12,0x01,0x05,0x22,0x71,0x42,0x10,0x6

Esempio pratico


Poniamo il caso in cui si abbia la propria rete Fastweb avente un SSID di questo tipo FASTWEB-1-00193EA1B2C3.

I 6 byte da considerare sono 00,19,3E,A1,B2,C3. Si calcola l’hash MD5 di questi 6 byte secondo l’algoritmo sopracitato ottenendo: a37d4267f1d177f44d352978d95558a9. Di questo hash si considerano i primi 4 byte nella rappresentazione binaria, ovvero 10100011 01111101 01000010 01100111. Di questa sequenza binaria si formano 5 gruppi di 5 bit ciascuno, ottenendo: 10100 01101 11110 10100 00100, che rappresentati in esadecimale diventano 0×14 0x0D 0x1E 0×14 0×04.

La WPA key si ottiene da questa sequenza di byte confrontanto ciascun byte con 0x0A, se risulta essere maggiore viene aggiunto il valore hex 0×57 (per il motivo precedentemente spiegato) ottenendo così la seguente chiave: 6b64756b04.

Ovviamente, questi sono dati d’esempio (non reali) utilizzati per dimostrare la validità dell’algoritmo.

Le nostre Conclusioni

Non si può evitare, in conclusione, di segnalare che le operazioni dei progettisti sono carenti sotto diversi aspetti:

1) Legare la chiave WPA a dati pubblicamente conoscibili. Chiunque può usare uno sniffer (kismet o airodump) per ricavare ESSID e MAC Address delle reti Fastweb Pirelli (tra l’altro, l’ESSID viene rivelato già dal software di gestione delle reti wireless, senza necessità di un approccio attivo di wardriving). Legare la chiave a informazioni interne del router/modem non deducibili da alcuna combinazione di MAC ed ESSID sarebbe stata una scelta più accurata. Usare algoritmi casuali sarebbe la scelta ideale . Ovviamente, l’uso di casualità deve essere tale da rendere innocuo ogni tentativo di bruteforcing. Ad esempio, rendere del tutto random il quinto byte della chiave non ha senso (un bruteforce su 256 valori si completa in tempi inferiori al secondo su molti sistemi). Selezionare in maniera totalmente random i 20 byte della sequenza, questo sì avrebbe impedito l’approccio alla base di quest’articolo.

Una soluzione più semplice, ma altrettanto efficace, sarebbe stata quella di legare la chiave WPA non al MAC della scheda 802.11 dell’HAG, ma a quello dell’interfaccia Ethernet (ogni scheda Ethernet ha un MAC univoco). Non essendoci alcun legame tra la scheda WiFi e quella Ethernet all’interno dello stesso Hag, la scelta avrebbe impedito una reperibilità on the fly dei dati necessari all’algoritmo, annullando la vulnerabilità concreta connessa alla scoperta dell’algoritmo.

2) Fare il deployment in produzione di router con un firmware con i simboli presenti. La totale mancanza di nomi delle funzioni e variabili avrebbe reso fortemente complicato se non quasi impossibile il lavoro di analisi del firmware. L’unico approccio utilizzabile in tal caso, sarebbe stata la simulazione del codice MIPS su un sistema di emulazione, al fine di dedurre il “punto” in cui effettivamente veniva scritta in memoria la chiave di rete, e un successivo traceback nel codice. Si sarebbe potuto anche far uso di tecniche di offuscamento del codice e di meccanismi anti-debugging, tipici di software commerciali.

3) Aver generato password di soli 10 simboli, tra l’altro cifre esadecimali. Ad una analisi fortemente sommaria è possibile restringere lo spazio di ricerca a 256 alla quinta valori (256 valori possibili in un byte per 5 byte, che danno luogo a 10 cifre se stampati in esadecimale). Analisi più accurate rivelano che i valori dei byte rappresentano lettere dell’alfabeto in minuscolo (a-z) e numeri da 00 a 09 della tabella ASCII. Le possibili combinazioni sono quindi: 26 lettere dell’alfabeto più 10 numeri per un totale di 36 simboli che ognuna di queste coppie può assumere. Ciò significa che in totale abbiamo 36^5 combinazioni possibili, cioè 60466176 combinazioni ~ 60 Milioni. Avendo a disposizione l’handshake di rete, diventa fattibile (avendo un dizionario, banalmente creabile) l’attacco a forza bruta. Questo numero sembra molto alto, ma con la potenza di calcolo che oggi si ha a disposizione è possibile per chiunque testare tutto lo spazio chiavi in meno di un giorno. Considerando la media di 1300 keys/s ci vorranno ~ 13 h nel peggiore dei casi. Se poi distribuiamo il carico di lavoro su più computer (possibilmente più potenti) riusciremo ad avere la chiave nel giro di qualche ora, o addirittura di qualche decina di minuti se si utilizza la potenza di calcolo delle GPU di potenti schede video.


4) Sarebbe buona regola da parte dell’Assistenza Fastweb invitare i nuovi Clienti a modificare il prima possibile le configurazioni inziali accessibili dalla MyFastPage. La chiave di rete predefinita è utile solo inizialmente per testare il corretto funzionamento della linea ADSL e dei vari PC connessi all’HAG, dopodichè deve essere sostituita con una più robusta. L’opzione che mantiene l’accesso automatico dai PC connessi a quella rete va assolutamente evitato.

Dalla MyFastPage è possibile reperire moltissime informazioni sensibili del Cliente, ovvero: Cognome e Nome dell’intestatario, Codici bancari, Codice fiscale (e quindi data di nascita e luogo), Indirizzo e Numero civico dell’abitazione, Numero di telefono fisso ed eventualmente mobile, le fatture associate al conto Fastweb con i relativi dettagli alle chiamate e costi, e i MAC address dei PC connessi alla rete.


Fortunatamente, Fastweb mette a disposizione un modo abbastanza semplice per evitare questi spiacevoli inconvenienti. Modificare la password di default. Infatti dalla MyFastPage->Gestione Abbonamento->Configura WiFi con una semplice procedura è possibile modificare la chiave predefinita. Ma in quanti lo fanno? Lavorando nell’ambito delle reti, per esperienza personale vi possiamo dire che Fastweb copre una buona fetta di mercato per quanto riguarda la fornitura dei servizi internet nelle aziende; il 70% di queste lascia le impostazioni WiFi di default, mentre il 95% lascia l’accesso automatico alla MyFastPage con le password di default.

Noterete che la situazione non è per niente banale o da sottovalutare.

Ci teniamo a sottolineare che più volte abbiamo sollecitato personalmente il suddetto Provider a prendere provvedimenti a riguardo, ma le nostre segnalazioni sono state del tutto snobbate, e la risposta più intelligente è stata: “Gentile cliente, la ringraziamo per il suo contributo ma i nostri clienti possono modificare la chiave wifi dalla MyFastPage.”

Siamo i primi a consigliare (ove possibile) la modifica della chiave di default a prescindere dal gestore, non solo perché lo riteniamo opportuno, ma anche perché la nostra etica ce lo impone.


Siamo convinti che la sicurezza informatica dipende principalmente dal fattore umano. Abbiamo tentato di far sentire la nostra voce a Fastweb, ma non abbiamo ottenuto risposta nè interesse al problema. Per questo motivo abbiamo deciso di pubblicare questo articolo, per informare le persone di una falla di sicurezza che altrimenti resterebbe ad esclusivo beneficio di una ristretta cerchia di savants, a tutto danno del grande pubblico. Auspichiamo che la pubblicazione di questo articolo incentivi le persone a salguardare i propri dati personali evitando così di essere accusati di reati commessi da crackers informatici che sfruttano la nostra rete in modo illegale.

Auspichiamo inoltre che i Provider Italiani possano prendere i giusti provvedimenti a riguardo, progettando sistemi di sicurezza molto più sicuri di quelli attuali.

Share

  • RSS
  • Delicious
  • Digg
  • Facebook
  • Twitter
  • Linkedin

21 Responses so far.

  1. x scrive:

    salve, ho un telsey V.2.0 ho fatto la prova a convertire in decimale le ultime 5 cifre del Mac,ma non hanno nulla a che vedere col serial number,ecco i dati:
    SSID:FASTWEB-1-00036FE8EBA0
    MAC :00.03.6F.E8.EB.A0
    S/N:01272057
    WPA PSK:8dd32bb8ea
    ,fatemi sapere..

    • r00t scrive:

      Ciao,
      Il tutorial è basato su una piccola quantita di router fastweb ed è puramente teorico.
      Con la tua osservazioni ci dimostri che:
      1) Funziona solo su router vecchi
      2) C’è ancora molto da studiare in merito.

      Non siamo noi gli autori del tutorial, ti invito comunque a contattare, se sei interessato, l’autore ( Angelo Righi ) su http://www.pillolhacking.net

      Saluti

  2. Luca scrive:

    Salve,è la prima volta che metto un post quì,comunque volevo sapere se qualcuno sà un algoritmo per i router di alice,il gate 2 plus,o ancora non si è saputo niente su questo tipo di AP…Grazie
    Un saluto a tutti

  3. r00t scrive:

    Ciao Luca,
    per gli Alice ci sono stati rumors riguardo ad un hacker che si fa chiamare saxdax che era riuscito a reversarli. Ma di pubblico purtroppo non c’e’ niente.
    Se dovesse uscire qualcosa fara’ sicuramente notizia…

    Stay tuned! ;)

  4. Davide scrive:

    Pieno sostegno a tutti quelli che si sbattono per il reverse engineering e per capire se quello che ci viene propinato come sicuro sia davvero tale.
    A parte questo però, credo che non sia possibile risalire alla PSK partendo dai dati pubblici o pseudo pubblici per i seguenti motivi:
    - E’ più semplice scrivere una funzione che generi una chiave (pseudo-)casuale che una funzione che la generi in funzione di s/n, MAC ecc.
    - Se ci fosse il modo di entrare in tutte le reti alice (o fastweb), i dieci tecnici a conoscenza di questo fatto o sono sepolti da qualche parte o si sarebbero già lasciati sfuggire qualcosa.

    IMHO

    • r00t scrive:

      Bravo Davide! Mi associo al sostegno di tutti colore che si occupano di reversing. E’ uno sporco lavoro, ma qualcuno dovrà pur farlo!
      Sembra un po strano, ma molti produttori preferiscono generarsi una PSK tramite questi parametri. Come dimostra anche questo exploit: http://milw0rm.com/exploits/8359

      Piu che i tecnici qua si parla di case produttrici. Il tenico telecom/fastweb non è a conoscenza di come ricavarsi una PSK. Magari, se hanno i giusti permessi possono però controllarlo sul database centrale.
      E’ la casa produttrice (Pirelli, Telsey ecc) che di solito è l’unica a conoscere come sia stata generata una psk (non è esclusa l’ipotesi che sia una psk generata randomicamente).
      Speriamo almeno che abbiano fatto una funzione random debian-style :D
      debian_random_buggata

  5. domx scrive:

    Ultimamente si è diffusa la notizia che anche delex, come afferma sul suo blog, (http://alix.22web.net/) ha l’algoritmo di generazione delle wpa alice come saxdax. Però non risponde alle mie mail, nè tantomeno pubblica i risultati del suo lavoro. Inoltre pare che si faccia pagare come saxdax, il che per me si chiama speculare. Mi potete aiutare?

    • r00t scrive:

      Ciao domx,
      non sapevo di delex. Mi iscrivo al forum e cerco conferme.
      Comunque riguardo al farsi pagare è una decisione… non si puo’ giudicare. Alla fine è un lavoro che queste due persone hanno fatto ed è giusto che per un lavoro si deve essere pagati.
      Purtroppo stiamo pero’ parlando di hackers…. e gli hackers le cose se le ‘dovrebbero’ scambiare fra di loro

  6. :P scrive:

    Pagare?! Ma siete matti…na c’è online che offre lo stesso servizio gratis!

    oversecurity.net/wpa-recovery/

    • r00t scrive:

      Ciao Andrea,
      se avessi letto un minimo piu approfonditamente l’articolo o anche solo un commento, avresti capito che NON siamo noi a chiedere soldi per fare reversing delle key fastweb.
      Quindi per favore la prossima volta prima di arrivare a conclusioni affrettate leggi almeno ciò che è stato scritto.
      Il sito te lo pubblico volentieri perchè comunque sia avete fatto un bel lavoro. Speriamo però funzioni! :D

  7. amine scrive:

    ciao .. e interessante cio k hai scritto .. e t kiedo un favore se mi potresti trovare la password d questo fastweb-1-00036FED9078.. MI PUOI RISPONDERE sul mio indirizzo grazie mille

  8. major scrive:

    Salve,
    ho letto con piacere il vostro articolo e sono rimasto molto colpito.
    Alcuni processi, però, non mi sono chiari: esattamente i punti 1-5.
    Una volta che ho il SSID della rete, in che modo devo trovarmi l’MD5?
    Ho provato a fare l’MD5 dell’MD5 ottenuto dal SSID ma non è uguale.
    Cortesemente, potreste chiarirmi questi passaggi?
    Grazie.

  9. giampiero scrive:

    salve ki mi puo aiutare avendo trovato una rete fastweb protetta con seriale
    -1-00036F8FC1A8 KI MI SA DIRE LA KEY X POTER NAVIGARE grazie a tutti. mi potete mandare sulla mia e mail un messaggio saluti giampiero

  10. Marco scrive:

    Ciao a tutti,sapreste dirmi se un Ssid del tipo fastweb-1-uFNXa etc. indica un nuovo tipo di protezione adottata da fastweb o cosa?grazie in anticipo

    • r00t scrive:

      Non saprei Marco,
      non li ho mai visti in giro, probabilmente puo essere solo qualcuno che ha messo un SSID in quel modo.
      Oppure che la parte dopo -1- sia solo una conversione in ascii del MAC, ma credo sia improbabile dato che risultano tutti caratteri stampabili.

      Nel tuo caso:
      fastweb-1-uFNXa —> fastweb-1-75464e5861

      Anche se penso non sia questa la strada da percorrere

  11. Marco scrive:

    scusami ho cercato di seguire la tua guida ma mi sono perso un po’, ad esempio il mio router è: FASTWEB-1-t92NNwFAkQdS
    sapresti calcorarmi il key?


*