iOS 15 ti permette di trovare anche un iPhone spento: c’è pericolo?

IOS 15.0 introduce una nuova funzionalità: ora è possibile trovare iPhone utilizzando Trova il mio iPhone, anche quando l’iPhone è spento. Come funziona? La funzione è un problema di sicurezza?

Questa funzione era già presente molto tempo fa con la versione beta di iOS 15. Ecco uno screenshot di luglio. Da allora, l’interfaccia utente è leggermente cambiata.

Gli utenti non hanno immediatamente notato l’esistenza di questa funzione. Devi eseguire l’aggiornamento a iOS 15.0, abilitare i servizi di localizzazione sul tuo iPhone, accedere al tuo account utente, partecipare alla rete Dov’è e così via. E alla fine, considerare la cosa più strana che nessuno fa oggi: spegnere l’iPhone. Ma non appena Twitter lo ha scoperto, la popolarità dell’argomento è cresciuta immediatamente. Così come il numero di voci su come questa funzione è implementata.

Processore sempre attivo (AOP)

C’è pochissima documentazione pubblica sull’AOP. Tutti i chip e i vari dispositivi integrati prodotti da Apple eseguono un sistema operativo in tempo reale chiamato RTKitOS. iPhone AOP non fa eccezione. Tuttavia, l’AOP ha un ruolo speciale da svolgere. Collega quasi tutti gli altri chip dell’iPhone. Per alcuni chip, svolge solo attività di base come la gestione dell’alimentazione, mentre per altri funge da proxy trasparente che attiva iOS quando necessario.

Pertanto, il processore sempre attivo consente di risparmiare energia. iOS può andare in stop mentre AOP attende gli eventi hardware. Un esempio di tale evento può essere l’informazione di un sensore di movimento. Lo schermo si accende anche se non tocchi alcun pulsante dell’iPhone.

Cercando in Internet, puoi scoprire che anche Siri è implementato in AOP. Se non sei particolarmente interessato ai dettagli tecnici, puoi saltare il resto di questa sezione. Devi solo sapere che l’AOP collega anche i chip wireless alle loro interfacce di gestione dell’alimentazione.

La maggior parte dei driver del kernel iOS ha una struttura semplice. Se RTKitOS è in esecuzione nel chip, questo può essere visto sull’output ioreg. Ad esempio, questo elenco include rose, un chip U1 basato su banda ultra larga.

Sebbene non sia nel kernel iOS, AOP implementa una copia di questi driver. Ad esempio, il controllo dell’intervallo U1 ha un’implementazione duplicata che funziona senza nearbyde può essere eseguita isolatamente nell’AOP.

Anche se il chip non è basato su RTKitOS, l’AOP può comunque connettersi ad esso. Il chip Bluetooth dell’iPhone 11, 12 e 13 è prodotto da Broadcom e si basa sul sistema operativo ThreadX. Tuttavia, l’iPhone AOP ha un controllo parziale sul Bluetooth. Sebbene non segua lo stesso circuito basato su RTKitOS, può fornire alimentazione al chip Bluetooth utilizzando un driver spmi-bluetooth.

Vale la pena notare che questo è molto diverso dalla situazione con HomePod mini e Watch. Usano un chip Bluetooth di Apple, nome in codice Marconi. AOP può controllare Marconi utilizzando driver marconi-bluetoothaop-marconi-bt-control.

Avvio dell’app Bluetooth quando l’iPhone è “spento”

Tutto ciò di cui l’iPhone ha bisogno per abilitare Trova il mio iPhone mentre il telefono è “spento” è la gestione dell’alimentazione di base e un chip Bluetooth in grado di inviare annunci spot Bluetooth LE. Inoltre, questi annunci richiedono una chiave segreta legata all’ID Apple nell’iPhone.

I chip Broadcom sono molto simili ai chip Cypress. Gli SDK Cypress supportano applicazioni IoT esterne che richiedono solo un chip Bluetooth senza host aggiuntivi. Queste applicazioni vengono eseguite su un thread ThreadX chiamato mpaf. Controlliamo se c’è un flusso da qualche parte nel firmware Bluetooth mpaf. Per fare ciò, scarica IPSW iOS 15.0, monta il file più grande .dmge vai su /usr/share/firmware/bluetooth. File .bin le patch vengono caricate tramite il driver Bluetooth PCIe. A partire da iPhone 11, contengono diverse righe di debug. Dopo aver completato grep mpaf *, puoi ottenere un tale elenco di compatibilità del dispositivo.

  • IPhone serie 11, BCM4378B1
  • Versione iPhone 12, BCM4387C2
  • Versione iPhone 13, BCM4387C2
  • IPad Air serie 2020, BCM4387C2
  • Alcune altre serie di iPad, BCM4387C2

Curiosamente, l’iPhone SE 2020, nome in codice Fiti, contiene anche il chip BCM4378B1, non ha una patch mpaf. Ho aggiornato l’iPad Air 2020 a iOS 15.0 e, nonostante la presenza di patch, la finestra di dialogo Trova il mio iPhone non viene visualizzata. Inoltre, non è presente alcun aggiornamento della posizione dell’iPad su un altro iPhone connesso allo stesso account. Cioè, ci sono probabilmente differenze tra gli attuali dispositivi supportati e i chip teoricamente in grado di supportare questa funzione. Forse Apple aggiungerà nuovi dispositivi in ​​futuro.

La patch mpafimplementa l’applicazione lpm. Il suo nome sta probabilmente per “modalità a basso consumo” e implementa il servizio gattBluetooth LE. Tutto questo si trova nelle righe e si tratta di caratteristiche già note.

tier2/Olympic/PCIE/Pistachio_CLPC_OS/USI/bld/A_4387C2_ROM/tier2/patch/bcs/mpaf_layer_patch.o.patch2.c
tier2/Olympic/PCIE/Pistachio_CLPC_OS/USI/bld/A_4387C2_ROM/tier2/patch/mpaf/apps/lpm/lpm_app.o.patch2.c
tier2/Olympic/PCIE/Pistachio_CLPC_OS/USI/bld/A_4387C2_ROM/tier2/patch/mpaf/apps/lpm/lpm_app_gatt.o.patch2.c
tier2/Olympic/PCIE/Pistachio_CLPC_OS/USI/bld/A_4387C2_ROM/tier2/patch/mpaf/apps/lpm/lpm_app_fsm.o.patch2.c

Queste patch sono state aggiunte in iOS 15 e in precedenza mancavano. I loro nomi corrispondono alla funzionalità prevista. In questo post non fornirò istruzioni su come analizzare queste patch, scaricare la ROM del chip, ecc. Le linee sopra, sono sufficienti per fare in modo che si capisca che questa funzionalità sia implementata nel chip Bluetooth.

Il contenuto della chiave privata è associato al chip U1?

In AirTag, il contenuto della chiave è memorizzato nel chip U1. Apple ha usato nRF in AirTag “Durian” per un motivo. Alla compagnia non piace né si fida di lui, ma costa poco e usa poca energia. Molto spesso, U1 è in uno stato di sonno e si sveglia di tanto in tanto.

Ma su iPhone, il sistema è diverso. Sull’iPhone, le chiavi sono archiviate in Secure Enclave (SE). In una delle prime build U1, c’erano anche linee di debug per lo scambio dei contenuti delle chiavi tra U1 e SE, ma non sono più nelle ultime build.

Trasferimento del contenuto delle chiavi segrete

Dopo aver installato il profilo di debug Bluetooth su un iPhone 12 con iOS 15.1b2, l’output idevicesyslog prima dello spegnimento si presenta così:

<!-- wp:paragraph -->
<p>30 settembre 22:02:58 BlueTool[126] &lt;Avviso>: completata la gestione dell'evento dizionario-xpc30 settembre 22:02:58 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione del comando </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«hci reset»</strong> — l'output era «0x0e 0x04 0x01 0x03 0x0c 0x00»…30 settembre 22:02:58 BlueTool[126] &lt;Avviso>: Completata la gestione dell'evento dizionario-xpc30 settembre 22:02:58 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«hci cmd 0xFE62 0x06 ...»</strong> comando — l'output era "&lt;decodifica: dati mancanti>"Sep 30 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione del comando </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«hci cmd 0xFE62 0x06 ...»</strong> — l'output era " &lt;decodifica: dati mancanti>"Sep 30 22:02:59 BlueTool[126] &lt;Avviso>:Gestione completata dell'evento dizionario-xpc30 settembre 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione del comando </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«hci cmd 0xFE62 0x06 ...»</strong> — l'output era "&lt;decodifica: dati mancanti>"30 settembre 22:02:59 BlueTool[126] &lt;Avviso>: Completata la gestione dell'evento dizionario-xpc30 settembre 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione del comando </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«hci cmd 0xFE62 0x06 ...»</strong> — l'output era "&lt;decodifica: dati mancanti>"30 settembre 22:02:59 BlueTool [126] &lt;Avviso>: completato la gestione di eventi dizionario-XPC30 settembre 22:02:59 bluetoothd [89] &lt;Avviso>: BlueTool terminato l'esecuzione </p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p><strong>«HCI cmd 0xFE62 0x06 ...»</strong> comando — l'output era "&lt;decodifica: dati mancanti>"Sep 30 22:02:59 BlueTool[126] &lt;Avviso>:Gestione completata dell'evento dizionario-xpc30 set 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione del comando «hci cmd 0xFE62 0x07 0x00 0x01» — l'output era «0x0e 0x05 ...»30 settembre 22:02:59 BlueTool[126] &lt;Avviso >: Completata la gestione dell'evento dizionario-xpcSep 30 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool ha terminato l'esecuzione «bcm -s 0x0f,0x00,0x02,0x00,0x01,0x00,0x00,0x00,0x00,0x00 Comando ,0x00,0x00» — l'output era ""30 settembre 22:02:59 BlueTool[126] &lt;Avviso>: completata la gestione dell'evento dizionario-xpc30 settembre 22:02:59 bluetoothd[89] &lt;Avviso>: BlueTool terminato eseguendo il comando «hci cmd 0xFE62 0x04» — l'output era «0x0e 0x05 0x01 0x62 0xfe 0x00 0x04»30 settembre 22:02:59 backboardd(libEDR)[66] &lt;Avviso>: ScheduleSetBrightnessIn_block_invoke: inserisci WaitUntil late 0.126834 millisecondo (333 / 333)30 set 22:02:59 backboardd[66] &lt;Avviso>: cambio luminosità:0.67814 motivo:BrightnessSystemDidChange opzioni:&lt;privato>30 settembre 22:02:59 SpringBoard(FrontBoard)[62] &lt;Avviso>: attività di spegnimento «Notifica Bluetooth» completare dopo1,59 sec 30 settembre 22:02:59 SpringBoard(CoreUtils)[62] &lt;Avviso>: invalidare CID 0x2B76000130 settembre 22:02:59 SpringBoard(FrontBoard)[62] &lt;Avviso>: attività di arresto completate.Sep 30 22:02:59 SpringBoard(CoreUtils)[62] &lt;Avviso>:</p>
<!-- /wp:paragraph -->
30 settembre invalidato 22:02:59 bluetoothd[89] <Avviso>: il flag BT_FW_OK è impostato. Immissione di LPM...
30 settembre 22:02:59 bluetoothd(CoreUtils)[89] <Avviso>: la voce LPM ha impiegato 1578ms 
30 settembre 22:02:59 bluetoothd[89] <Avviso>: invio di statistiche BT a CoreAnalytics per com. apple.BTLpmManagerStats
30 set 22:02:59 bluetoothd[89] <Avviso>: lo stato di alimentazione di PowerManager è 0
30 set 22:02:59 bluetoothd[89] <Avviso>: lo stato di alimentazione di PowerManager è 0
30 set 22:02:59 bluetoothd[89 ] <Avviso>: lo stato di alimentazione di PowerManager è 0
Sep 30 22:02:59 bluetoothd[89] <Avviso>: lo stato di alimentazione di PowerManager è 0[scollegato]

Gli ultimi passaggi vengono ripetuti molte volte con l’output di numeri arbitrari. Questi sono beacon configurabili nel chip bluetooth, quindi li ho tagliati fuori dal post. Quindi, alla fine, il chip Bluetooth dice che sta entrando in modalità a basso consumo (LPM). Subito dopo, l’iPhone si “spegne”.

Ogni annuncio Trova il mio iPhone inizia con 0x4c 0x00 0x12 0x19e questa sequenza di byte è inclusa anche nell’output BlueTool. In totale, sul chip Bluetooth vengono scritti 80 annunci pubblicitari.

Nel caso in cui desideri eseguire il debug da solo, il ripristino dell’HCI è l’ultima informazione visibile in Apple PacketLogger mentre idevicesyslog continua a visualizzare output e comandi BlueTool.

Impatto su sicurezza e privacy

La nuova funzione Trova il mio iPhone consente al pubblico di conoscere per la prima volta l’AOP e la durata della batteria del chip Bluetooth.

Supponendo che qualcuno abbia effettuato il jailbreak del tuo iPhone e ti stia spiando, potrebbe mostrare la schermata di “spegnimento”, ma non spegnere l’iPhone. Non dare mai per scontato che un dispositivo sia spento finché non hai rimosso la batteria da esso o, meglio ancora, non è stato inserito in un frullatore. Ad esempio, la NSA ha hackerato una TV Samsung e ha aggiunto una modalità di spegnimento falsa per spiare le persone.

Il protocollo Find My ha un paio di meccanismi interessanti per proteggere la tua privacy. È stato completamente decodificato e ha un’implementazione open source. Inoltre, l’app AirGuard ti consente di identificare i beacon BLE Find My in Android. Se sei preoccupato di divulgare le tue posizioni tramite Dov’è, puoi semplicemente disattivare la funzione sul tuo iPhone.

Nota che anche altri chip wireless perdono informazioni sulla posizione. Una connessione cellulare ti consente di localizzarti e un provider di servizi mobili può memorizzare la cronologia delle posizioni, anche il Wi-Fi perde una posizione (sebbene la randomizzazione dell’indirizzo MAC aiuti in questo), e non è tutto. Qualunque cosa tu faccia, uno smartphone è un dispositivo di localizzazione. La protezione della privacy di Trova il mio iPhone rimuove solo uno degli aspetti della sorveglianza, che sono molti.

Peggio ancora, AOP e Bluetooth LPM stanno rendendo possibile la creazione di un nuovo vettore di malware che risiede nell’hardware.