Quindi ecco la storia. Ho questo orologio intelligente, l'Olio Model One. Mi piacerebbe installare Asteroid OS su questo orologio, e per farlo devo ottenere l'esecuzione del codice root (l'obiettivo di questa domanda).
L'Olio, oltre a non avere alcuna porta di debug (JTAG o UART) sulla scheda madre, esegue un sistema Android bloccato. In effetti, l'interfaccia utente è un'app Dalvik completamente personalizzata e l'utente non è nemmeno in grado di sapere che l'orologio funziona su Android. L'ormai defunta compagnia che fabbricava e sviluppava questi orologi non rilasciava mai nessuna documentazione tecnica (a parte il fondatore che menzionava brevemente che eseguivano Linux in un'intervista); Conosco tutto questo esaminando un file di aggiornamento del firmware.
L'unico modo conosciuto per ottenere l'esecuzione del codice su uno di questi orologi è inviare un file di aggiornamento del firmware tramite Bluetooth. (I file di aggiornamento del firmware sono davvero semplici: i file sono archivi zip e uno script di shell con il nome di update.sh viene estratto da quell'archivio zip e viene eseguito come root, questo script shell è responsabile della copia degli altri file nei loro luoghi appropriati ). Semplice, vero? Il problema è che questo file di aggiornamento del firmware deve essere inviato tramite il protocollo RFCOMM non documentato proprietario; questo protocollo è completamente non documentato ed è stato implementato solo nell'app per smartphone companion personalizzata (Olio Assist).
Il mio precedente approccio era di leggere il codice Java decompilato dall'app Android Olio Assist e riscrivere il codice del gestore dell'aggiornamento del firmware in un programma python; questo ha dimostrato di essere il compito più terribile che abbia mai affrontato. Per un capriccio, ho cercato su google "esecuzione arbitraria di codice bluetooth di Linux" e ho trovato BlueBorne. BlueBorne sembra essere la mia unica speranza di ottenere un'esecuzione arbitraria del codice su Olio Watch senza eseguire il reverse engineering del protocollo Bluetooth. Il sistema Android di Olio sembra soddisfare tutti i criteri: l'orologio esegue il kernel Android 3.10.0; l'ultimo firmware è stato rilasciato il 30 novembre 2016 (il kernel è stato compilato il 29 novembre), prima che BlueBorne venisse scoperto; e, secondo SDP, l'intero stack Bluetooth Android sembra essere intatto (quella parte non è nell'aggiornamento del firmware, quindi SDP è la mia migliore fonte). Dato che una parte dello stack Bluetooth Android è intatta, le frasi "L2CAP" e "BNEP" (ho visto quelle molte durante la ricerca su BlueBorne) sono generosamente sparpagliate nella ricerca SDP. La mia domanda è, dato che, come posso usare BlueBorne per ottenere l'esecuzione del codice sul sistema Android? Quale codice PoC è disponibile?
Grazie per l'aiuto. L'orologio Olio è in realtà completamente disfunzionale: l'app Olio Assist cerca di parlare con un server che viene chiuso quando la società ha cessato l'attività; insiste a telefonare a casa su questo server prima di parlare con l'orologio Olio appaiato, e per questo, dopo la metà del 2017, tutti gli orologi Olio che non erano già configurati diventano fermacarte. Questa è la mia unica speranza di ripristinare qualsiasi funzionalità.
Alcuni collegamenti:
Il file di aggiornamento del firmware a cui mi riferivo.
Guarda la configurazione del kernel (estratto dall'aggiornamento del firmware)
Ricerca SDP