Vai al contenuto principale

Technology, security analysis

Un’analisi tecnica approfondita dell’app di tracciamento dei contatti NHS COVID-19

Reincubate EngineeringPubblicato il 7 maggio 2020Aggiornato il 2 agosto 2024
In questa pagina
Cover image for: Un’analisi tecnica approfondita dell’app di tracciamento dei contatti NHS COVID-19

La beta dell’app di tracciamento dei contatti NHS COVID-19 è ora open source sia per iOS sia per Android, insieme a un po’ di documentazione. Come seguito del nostro articolo «Restare vivi», abbiamo analizzato a fondo il codice sorgente. È una piacevole sorpresa scoprire che è rilasciato con licenza MIT, il che indica un impegno dell’NHSX per la trasparenza e la qualità.

Negli ultimi due giorni diversi ingegneri hanno esaminato l’app per scoprire se, e come, riesca a restare attiva. Capirlo ha richiesto una conoscenza del framework CoreBluetooth più approfondita di quella che ha la maggior parte degli sviluppatori. Non è un framework in cui gli ingegneri di solito hanno bisogno di addentrarsi.

Abbastanza presto abbiamo individuato e segnalato come funzionasse il trucco per i dispositivi Android. Stasera condividiamo cosa succede esattamente su iOS. Vediamolo passo per passo.

Primo avvio

Al primo avvio, l’app effettua una richiesta PUT a https://api.svc-covid19.nhs.uk/api/devices/registrations con un codice di attivazione, un token per le notifiche push e la prima metà del codice postale inserito dall’utente. In risposta, il server invia un linkingId che viene memorizzato nelle impostazioni dell’app. L’app richiede inoltre i permessi per le notifiche push e per il Bluetooth, come ci si aspetterebbe. Non richiede i permessi di localizzazione e, di conseguenza, non convalida il codice postale dell’utente. Sono richieste solo le prime cifre di un codice postale.

Si è sostenuto che l’app Android acceda ai dati di posizione, perché la richiesta di accesso alle API Bluetooth sui dispositivi Android sembra chiedere i permessi di localizzazione. Ieri però abbiamo smentito questa ipotesi: è una conseguenza di come Android gestisce le richieste di permessi Bluetooth.

Restare attivi su Android

Impedire a un’app di addormentarsi in background è banale su Android, perché le API standard supportano questa funzionalità e danno agli ingegneri accesso a basso livello all’hardware Bluetooth.

Su iOS, però, la storia non è così semplice. Quando le app vanno in background su iOS, le loro funzionalità vengono ridotte in modo significativo. Questo vale anche per CoreBluetooth, il framework di Apple che dà agli sviluppatori accesso al Bluetooth. Senza qualche espediente ingegnoso, per l’app diventa sostanzialmente più difficile rilevare gli iPhone che potrebbero essere in modalità background. Abbiamo fatto dei test con diversi dispositivi iOS lasciati fermi per diverse ore e abbiamo notato che il polling avveniva con minore frequenza, ma che i dispositivi comunicavano comunque durante la notte.

Usare Android per risvegliare gli iPhone

Ieri abbiamo anche riferito che, quando sono in background, le app iOS continuano a trasmettere annunci Bluetooth, ma in un modo diverso, specifico di Apple. Credevamo che gli ingegneri di NHSX / Pivotal ne avessero fatto il reverse engineering e avessero aggiunto il supporto all’app Android. Possiamo confermare che è così, e i loro dettagli tecnici si trovano qui. Ciò significa che, oltre al fatto che i dispositivi iOS riescono a mantenere l’app in background, i dispositivi Android possono risvegliare un dispositivo iOS «addormentato» indipendentemente da quanto tempo sia rimasto in background.

Quali sono dunque le implicazioni? Significa che, perché l’app funzioni, un iPhone deve trovarsi abbastanza spesso nel raggio di un dispositivo Android, in modo da poter inviare keepalive per restare in background. Di per sé potrebbe non essere una soluzione praticabile, ma...

Usare i dispositivi iOS per risvegliare… altri dispositivi iOS

Nell’articolo di ieri «Restare vivi» abbiamo riferito di ritenere che l’app iOS usasse dei «keepalive» per aggirare le restrizioni sull’esecuzione in background. Dopo aver esaminato il codice sorgente dell’app iOS, abbiamo concluso che è effettivamente così. Ma come funzionano esattamente?

In parole semplici, un keepalive, in questo contesto, è un’idea inventata dagli sviluppatori dell’app: è una notifica inviata tra due dispositivi iOS che eseguono l’app per mantenere attiva la connessione tra i dispositivi. L’aspetto interessante è che ha anche l’effetto di permettere all’app di restare attiva molto più a lungo, perché quando un dispositivo riceve un keepalive, iOS consente all’app di restare attiva per svolgere ulteriori elaborazioni.

In pratica, questo significa che l’app potrà mantenere il proprio stato attivo se si trova in prossimità di altri dispositivi. Questo, in un certo senso, è la logica del progetto di tracciamento COVID-19: anche senza questo espediente tecnico, serve una massa critica di utenti che usino l’app di tracciamento per ottenere un buon risultato per la sicurezza pubblica.

A prescindere da ciò, l’app non si addormenta subito né entra in uno stato sospeso quando va in background. La questione diventa quindi se la maggior parte degli utenti si troverà abbastanza spesso vicino a dispositivi iOS o Android da rendere praticabili gli espedienti. A nostro avviso sembra probabile, tanto più per gli utenti che si trovano più regolarmente in aree popolate. Il Bluetooth ha una portata effettiva discreta.

Alcuni osservatori hanno suggerito che la capacità dell’app di ricevere notifiche silenziose significasse che usava queste funzionalità per risvegliarsi da remoto. Queste funzionalità, tuttavia, servono semplicemente a informare l’utente se è stato vicino a qualcuno che ha contratto il COVID-19. L’app usa anche notifiche locali che rilevano quando l’app viene terminata dal sistema, invitando gli utenti a riaprirla. Una notifica simile viene usata quando l’utente disattiva il Bluetooth.

Aidan Fitzpatrick, CEO di Reincubate, dice:

Sì, è vero che il prossimo framework ExposureNotification di Apple in iOS 13.5 rende superflui questi keepalive. Vale però la pena notare che:

  • iOS 13.5 non è stato rilasciato e potrebbe non esserlo per alcune settimane
  • Fino a ieri, l’ultima beta di iOS 13.5 aveva una grave falla di sicurezza, il che fa pensare a un lavoro impegnativo nei team di ingegneria di Apple
  • Una volta rilasciato, probabilmente ci vorranno mesi prima che la maggior parte degli utenti iOS lo installi (cosa insolita, l’adozione equivalente su Android potrebbe essere più rapida)
  • I dispositivi iOS più vecchi, come l’iPhone 6, non possono eseguire iOS 13 e non potranno usare la tecnica di Apple
  • Non c’è alcun motivo per cui l’app NHS COVID-19 non possa passare automaticamente in futuro all’uso del framework di Apple, o addirittura eseguire in parallelo entrambi i meccanismi

L’app diventerà sempre più efficace man mano che più persone la useranno, e il vantaggio dell’adozione di massa creerà in questo senso un effetto volano. L’app australiana COVIDSafe ha faticato perché non supportava il rilevamento di dispositivi iOS in background da un dispositivo Android e non aveva questo ingegnoso meccanismo di keepalive da iOS a iOS.

È importante riflettere su quali circostanze rendano appropriato l’uso di una tecnologia come questa. Se il tracciamento dei contatti riesce a salvare vite, quali criteri si dovrebbero valutare per decidere se applicarlo a future malattie? Una volta creato il precedente, c’è chi potrebbe sostenere che questa tecnologia sia usata per combattere malattie infettive già esistenti? È prevedibile che società diverse valutino in modo diverso i compromessi.

Garanzie per la privacy

Anche se scrivere un’analisi dettagliata della matematica alla base del protocollo esula un po’ dallo scopo di questo articolo, abbiamo dato un’occhiata alle garanzie per la privacy. L’app sembra attenersi rigorosamente al documento pubblicato dall’NCSC. Possiamo confermare che nessun dato di chiave lascia il dispositivo dell’utente finché questi non segnala dei sintomi, e solo allora le chiavi anonimizzate dei dispositivi con cui è stato in stretta prossimità lasciano il dispositivo. La prima metà del codice postale inserito dall’utente viene inviata all’API nell’ambito del servizio di registrazione.

In definitiva, il codice suggerisce che l’uso dell’app comporti pochi rischi tecnici per la privacy fino a quando un utente non segnala dei sintomi e non contatta l’NHS per prenotare un test. A quel punto il suo risultato sarebbe gestito dall’NHS, ma questo non cambia con o senza l’app. Tuttavia, quando più utenti entrano in contatto, segnalano sintomi e prenotano test usando l’identificatore fornito loro dall’app, potrebbe essere possibile, o no, collegarli a livello centrale. È una questione di back-end e, come afferma l’NHSX nel proprio rapporto sulla privacy dell’app, il codice è la verità in questo senso.

Protezione dalle segnalazioni false

Poiché il back-end del sistema non è open source, non è possibile confermarlo, ma sembra che non vengano inviate notifiche push ad altri dispositivi finché i cittadini non risultano positivi al COVID-19. Quando un utente segnala dei sintomi, riceve un codice di riferimento che può essere usato per prenotare un test. (Questo codice coincide con il linkingId descritto nella sezione sulla registrazione.)


Informazioni sull'autore

Reincubate Engineering


Commenti (1)

Joseph 8 maggio 2020

The termination notification seems unreliable in my testing of the production app. Might be that the app sometimes terminates before the notification has been scheduled. They probably need to always have one scheduled a few minutes ahead and keep updating it further into the future on a timer while the app is running. That way when the app dies or is killed the notification is already scheduled.


Contenuti correlati


Articoli popolari

Logo del King's Award for Enterprise

King's Award for Enterprise: Reincubate ha vinto quattro volte la più alta onorificenza aziendale ufficiale del Regno Unito, l'ultima in riconoscimento della straordinaria crescita dell'azienda negli ultimi tre anni.

Le nostre relazioni con utenti e partner sono al centro dei nostri valori e dei prodotti che creiamo. Consulta le nostre recensioni per scoprire cosa dicono di noi.

Certificazione ISO 27001 rilasciata dal Centre for Assessment, accreditato UKAS

© 2008-2026 Reincubate Ltd. Tutti i diritti riservati. Registrata in Inghilterra e Galles con il n. 5189175, P. IVA GB151788978. Camo®, Streamlight® e Reincubate® sono marchi registrati. Brevetti in corso di registrazione.

Assistenza