Ecco come ho hackerato il mio braccialetto fitness
Roman Unuchek
La storia ha avuto inizio alcuni mesi fa, quando mi sono trovato ad avere un braccialetto fitness prodotto da un noto brand del settore. Visto che si tratta di un dispositivo indossabile (wearable device), ho subito provveduto ad installare l'app Android Wear – applicazione appositamente creata per tali dispositivi. In effetti, l'app Android Wear si è agevolmente collegata al braccialetto fitness.
Si è tuttavia verificato qualcosa di strano: il programma si era di fatto collegato ad un Nike+ Fuel Band SE, mentre io, in realtà, disponevo del braccialetto di un altro produttore! Non è occorso molto tempo per scoprire che il dispositivo Nike apparteneva ad un mio collega, il quale, peraltro, non si era nemmeno accorto che mi ero collegato al suo fitness tracker.
Dopo quanto accaduto, ho deciso di condurre una breve indagine, soprattutto per verificare l'effettivo stato di sicurezza del braccialetto fitness di cui disponevo.
Braccialetti intelligenti: modalità di comunicazione con il telefono
Il mercato presenta, attualmente, numerose offerte di bracciali analoghi, da parte di vari altri produttori. Riporto, qui di seguito, i dati statistici, ottenuti attraverso la rete globale di sicurezza KSN, relativi alla ripartizione delle installazioni - sui dispositivi mobile degli utenti - di applicazioni Android specificamente sviluppate per interagire con noti fitness tracker (tali dati statistici sono stati ottenuti tramite gli utenti KSN che hanno volontariamente acconsentito ad effettuare la trasmissione degli stessi ai nostri analisti).
Suddivisione installazioni delle app Android appositamente create per interagire
con i fitness tracker realizzati dai vari produttori
Sebbene le statistiche riguardino esclusivamente la diffusione delle applicazioni Android (non è garantito che gli utenti dispongano effettivamente dei rispettivi dispositivi), esse riflettono, anche se con un certo grado di approssimazione, la situazione relativa al livello di popolarità dei vari dispositivi indossabili.
Per interfacciarsi con il telefono dell'utente, la maggior parte dei braccialetti fitness utilizza la tecnologia Bluetooth LE (anche conosciuta con la denominazione di Bluetooth Smart). Questo significa che la connessione dei dispositivi non avviene con le stesse modalità utilizzate nell'ambito della tecnologia Bluetooth "ordinaria". Non esiste, infatti, una password comune; la maggior parte dei dispositivi, di fatto, non è dotata né di schermo, né di tastiera.
Per i bracciali fitness si ricorre quindi all'utilizzo del profilo GATT (Generic Attribute Profile). Il dispositivo indossabile, in pratica, presenta una determinata gamma di servizi; ogni servizio ha poi tutta una serie di caratteristiche. Ogni caratteristica, a sua volta, contiene un buffer di byte ed un elenco di descrittori; ogni descrittore contiene, infine, un valore - ovvero un buffer di byte.
Per cercare di illustrare al meglio tutto ciò, ho prelevato del codice pronto per l'uso tramite l'ambiente di sviluppo Android SDK - in sostanza un esempio di applicazione da utilizzare per la connessione a dispositivi Bluetooth LE. Va sottolineato, tra l'altro, che non ho dovuto scrivere nemmeno una stringa di codice; ho semplicemente aperto un progetto già esistente in Android Studio ed ho premuto il pulsante Start.
Lo screenshot qui sopra inserito mostra il risultato della connessione realizzata con il mio braccialetto fitness per mezzo di tale applicazione. Sono di fatto visibili i vari servizi e le loro caratteristiche. Per quel che riguarda il mio fitness tracker, tuttavia, non si rivela così semplice ricavare i dati dalle caratteristiche, visto che per effettuare tale operazione occorre non solo il collegamento, ma anche l'autenticazione. Nel caso di alcuni altri dispositivi sono invece riuscito a leggere i dati contenuti nelle caratteristiche, così come i relativi descrittori. È del tutto possibile che si sia trattato proprio di dati riguardanti gli utenti.
Le scansioni effettuate
Così, utilizzando l'esempio di applicazione ottenuto tramite Android SDK, mi sono potuto collegare ad alcuni dispositivi. Ho poi realizzato una mia applicazione, in grado di ricercare automaticamente i dispositivi Bluetooth LE, ed ho tentato in seguito di connettermi a questi ultimi, allo scopo di ottenere il loro elenco dei servizi.
Utilizzando questa applicazione ho effettuato alcuni processi di scansione.
- Nell'arco di due ore, nella metropolitana di Mosca, sono riuscito a collegarmi con 19 dispositivi 11 FitBit e 8 Jawbone.
- In una sola ora, poi, in un club di fitness della cittadina di Bellevue, WA, USA, sono stati rilevati 25 dispositivi, ovvero 20 Fitbit e 1 dispositivo per ognuna delle seguenti marche: Nike, Jawbone, Microsoft, Polar, Quans.
- Nello spazio di due ore, infine, a Cancun (Messico), durante il SAS 2015, mi sono potuto connettere con 10 fitness tracker: 3 Jawbone e 7 FitBit.
In solo sei ore di scansione, quindi, sono riuscito a collegarmi con ben 54 dispositivi. E tutto questo in presenza di due severe limitazioni:
- Nonostante nelle specifiche si indichino 50 metri, nella maggior parte dei casi la massima distanza effettiva per poter realizzare la connessione non è risultata superiore ai 6 metri.
- Si presume che sia impossibile collegarsi ad un dispositivo già connesso. Quindi, se il vostro device è già accoppiato con il vostro telefono, nessuno potrà collegarsi ad esso; il dispositivo non dovrebbe essere addirittura nemmeno rilevato nel corso della scansione.
Questa seconda restrizione significa, in linea di principio, che finché il dispositivo è collegato allo smartphone, esso non è accessibile agli eventuali attacchi. In realtà le cose non stanno proprio così. Ecco la dimostrazione: utilizzando la mia applicazione per la scansione, sono riuscito a bloccare la comunicazione in corso tra il mio braccialetto fitness e l'applicazione ufficiale, sebbene gli stessi fossero stati in precedenza accoppiati.
Considerando il secondo punto delle limitazioni sopra specificate, si può presumere che i dispositivi da me rilevati non si siano mai connessi al telefono, oppure che, nella circostanza, il braccialetto non fosse collegato allo smartphone durante il processo di scansione da me eseguito (Bluetooth disattivato sul telefono). Terza variante, il dispositivo già collegato poteva magari risultare accessibile per un'ulteriore connessione, nonostante la presunta restrizione. Di qualunque cosa si tratti, per gli eventuali malintenzionati le probabilità di potersi connettere ai fitness tracker sono davvero molto elevate.
Tuttavia, nella maggior parte dei casi, per poter ottenere l'accesso ai dati dell'utente occorre non solo il collegamento al dispositivo, ma anche la relativa autenticazione. Vediamo, ora, come avviene la procedura di autenticazione sul mio braccialetto fitness.
Il processo di autenticazione sul mio dispositivo
Per il processo di autenticazione del braccialetto con lo smartphone, l'applicazione ufficiale si avvale di uno dei quattro servizi disponibili sul device. Per ognuna delle caratteristiche riconducibili a tale servizio l'applicazione imposta il flag «CharacteristicNotification»; in tal modo l'applicazione comunica al braccialetto che essa vuole ricevere le notifiche riguardanti qualsiasi modifica della caratteristica in questione. In seguito l'applicazione ottiene l'elenco dei descrittori contenuti in ogni caratteristica e provvede ad impostare il flag «ENABLE_NOTIFICATION_VALUE»; in questo modo l'applicazione comunica al braccialetto che essa vuole ricevere le notifiche riguardanti qualsiasi modifica di ogni descrittore.
Successivamente, una delle caratteristiche cambia il proprio valore, ovvero il buffer di byte. L'applicazione legge dal braccialetto questo buffer: intestazione 200f1f e relativo array di byte – che chiameremo authBytes.
L'applicazione crea poi un nuovo array. La prima parte di esso sarà costituita da un array costante, contenuto nell'applicazione ed iniziante con 6dc351fd44; la seconda parte del nuovo array sarà invece authBytes. L'applicazione recupera l'hash MD5 dal nuovo array e lo invia al dispositivo con la seguente struttura:
- - Header (201210051f)
- - Md5
- - Byte di verifica
In seguito l'applicazione invia al dispositivo un ulteriore array, anch'esso contenuto in tale applicazione.
Il braccialetto inizia quindi a vibrare; a questo punto l'utente non dovrà fare altro che premere l'apposito pulsante: la procedura di autenticazione verrà in tal modo completata.
Con l'applicazione ufficiale la procedura di autenticazione richiede all'incirca 15 secondi. Da parte mia, ho creato un'applicazione grazie alla quale occorrono appena 4 secondi, per far sì che il braccialetto inizi a vibrare.
Obbligare l'utente a premere l'unico pulsante presente sul braccialetto può rivelarsi un'operazione non particolarmente difficile. È in effetti sufficiente essere abbastanza insistenti; il processo di autenticazione può essere riavviato varie volte, finché l'utente non premerà il pulsante. Oppure finché l'utente non si allontanerà ad una distanza superiore ai 6 metri.
Una volta completata la procedura di autenticazione, i dati presenti sul mio braccialetto fitness divengono accessibili per eventuali attività di sniffing. Attualmente, i dispositivi per il fitness indossabili non contengono così tante informazioni. Si tratta, in genere, del numero di passi compiuti, delle fasi del sonno, dei battiti del polso registrati nel corso dell'ultima ora, e via dicendo. All'incirca una volta ogni ora l'applicazione provvede a trasferire sul cloud tutte le informazioni provenienti dal braccialetto.
Una volta effettuata l'autenticazione, si rivela decisamente facile impartire dei comandi al dispositivo. Ad esempio, per modificare l'orario, sarà sufficiente inviare al dispositivo un array di byte iniziante con f0020c, e poi la data, nella seguente forma: YYYY MM DD DW HH MM SS MSMSMSMS.
Per quel che riguarda gli altri fitness tracker la cosa si presenta ancor più agevole: con alcuni di essi, infatti, una parte dei dati è direttamente accessibile subito dopo aver stabilito la connessione; inoltre, il codice dell'applicazione utilizzata per il braccialetto fitness prodotto da Nike risulta non offuscato, e può pertanto essere letto molto agevolmente (i risultati di un'interessante ricerca sono consultabili qui).
Conclusioni
Come hanno dimostrato i risultati emersi dalla breve indagine da me condotta, in alcuni casi è possibile connettersi al dispositivo indossabile a totale insaputa dell'utente.
Dopo aver violato il braccialetto di cui dispongo, il malintenzionato non potrà tuttavia ottenere l'accesso a tutti i dati relativi all'utente; infatti, questi ultimi non vengono custoditi nel braccialetto o nello smartphone, poiché l'applicazione ufficiale provvede a trasferire regolarmente tutte le informazioni dal braccialetto al cloud.
I fitness tracker divengono sempre più popolari e funzionali. Probabilmente, in un futuro ormai prossimo, essi conterranno un numero di sensori ben più elevato, così come una quantità di informazioni - spesso di natura medica - decisamente superiore. Nonostante tutto questo, si ha l'impressione che i produttori di tali dispositivi non pensino poi troppo al livello di sicurezza di questi ultimi.
Provate ad immaginare: nel caso in cui sia stato hackerato un braccialetto provvisto di sensore per rilevare i battiti del polso, il proprietario di un negozio potrebbe ad esempio monitorare la frequenza cardiaca dell'acquirente, proprio nel momento in cui quest'ultimo controlla i prezzi e gli sconti offerti in tale esercizio commerciale. Allo stesso modo, si potrebbe scoprire la reazione delle persone nei confronti della pubblicità. Un braccialetto fitness provvisto di sensore del battito cardiaco, dopo essere stato violato, potrebbe infine essere utilizzato come una sorta di macchina della verità.
Ovviamente, sono possibili attività ancor più nocive, quali, ad esempio, l'utilizzo di temibili Trojan-Ransom. Un malintenzionato potrebbe ad esempio assumere il controllo del vostro braccialetto fitness e costringere quest'ultimo a vibrare senza interruzione, per poi chiedere, in qualità di riscatto, una determinata somma di denaro per far cessare la vibrazione.
I risultati della breve indagine condotta sono stati riferiti al produttore del braccialetto fitness di cui dispongo. La società ha risposto affermando che, nella circostanza, si trattava di un Bug UX (“user expectation”), e non di un problema legato alla sicurezza. Per motivi di etica professionale e di sicurezza non riveleremo, stavolta, né il nome né il modello del braccialetto in questione. Qualora siate preoccupati riguardo ad eventuali conseguenze derivanti da un possibile sfruttamento “in-the-wild” dei problemi di sicurezza da noi scoperti, non esitate a contattare il produttore del vostro braccialetto fitness, chiedendo se il dispositivo che utilizzate sia di fatto interessato o meno da quanto descritto nel presente articolo.
Ci auguriamo, ad ogni caso, che questo articolo possa rivelarsi utile non solo per gli utenti, ma anche per gli stessi produttori di braccialetti fitness, in maniera tale che questi dispositivi possano divenire più sicuri dal punto di vista della Sicurezza IT.