Tra i principali imputati del blackout che ha mandato in tilt numerosi siti internet nell’ottobre 2016 ci sono milioni di dispositivi connessi, sfruttati per sovraccaricare i server di Twitter, Netflix, NTimes, CNN e tanti altri ancora.
L’evento è stata la dimostrazione di come molti dispositivi collegati alla rete siano il nuovo tallone d’Achille del web. DVR e videocamere di sorveglianza come quelle della cinese XiongMai Technologies, ma anche dispositivi di altri produttori, non integrano meccanismi di sicurezza e sono facilmente attaccabili da hacker che possono raggiungere questi dispositivi via Telnet anche se l’utente ha cambiato nome e password.
Questi dispositivi non integrano meccanismi di protezione robusti, non offrono la possibilità di disabilitare determinati servizi e che l’unico modo per evitare il diffondersi di nuovi problemi sarebbe ritirare i prodotti dal mercato.
Interessante quindi è l’approccio sul versante sicurezza voluto da Apple per i prodotti HomeKit di cui vi abbiamo parlato diffusamente in questa guida introduttiva. I dispositivi in questione sfruttano la cifratura end-to-end, in poche parole gli utenti coinvolti in un attacco nello scambio comunicativo avranno la certezza che, anche in caso di attacco ai server dell’azienda che eroga il servizio i loro pacchetti dati saranno al sicuro da occhi indiscreti.
Il meccanismo in questione, infatti, cifra i pacchetti in modo che solo i due nodi comunicanti (emittente e ricevente) siano in grado di decriptare – e quindi decifrare – i messaggi inviati attraverso la Rete. Oltre alla protezione end-end-to i dispositivi certificati da Apple sono protetti da chip che si occupano di offuscare l’accesso in remoto e prevedono vari meccanismi che rendono improbabile o ad ogni modo estremamente complesso cercare di sfruttarli per integarli in una botnet di dispositivi zombie.
HomeKit fornisce un’infrastruttura di automazione domestica che utilizza la sicurezza di iCloud e iOS per proteggere e sincronizzare i dati privati senza esporli a Apple. Vediamo come funziona e come Cupertino ha creato una infrastruttura complessa e difficile da attaccare che va a beneficio della sicurezza del singolo utente e, come abbiamo detto, di tutta la rete.
La ricerca di un equilibrio tra la facilità d’uso e la protezione dei dati e degli accessi degli utenti al sistema controllato ha richiesto diversi mesi di aggiustamento e la presenza di un chip di autenticazione apposito e limita la compatibilità al solo ecosistema di Cupertino ma, come vedremo, questo è pure un vantaggio per l’utente finale che non ha problemi a dotarsi di dispositivi di controllo con la mela morsicata e degli accessori oggi presenti sul mercato.
Dal punto di vista tecnico l’identità e la sicurezza di HomeKit sono basate su coppie di chiavi pubbliche-private “Ed25519”. Una coppia di chiavi Ed25519 viene generata sul dispositivo iOS per ogni utente di HomeKit, e questa diventa la sua identità HomeKit. Questa è usata per autenticare la comunicazione tra i dispositivi iOS, e tra i dispositivi iOS e gli accessori. Le chiavi vengono archiviate in Portachiavi e sono incluse solo in backup codificati di Portachiavi. Le chiavi sono sincronizzate tra i dispositivi utilizzando il portachiavi iCloud.
Gli accessori HomeKit generano la loro coppia di chiavi Ed25519 da utilizzare nelle comunicazioni con i dispositivi iOS. Se l’accessorio è ripristinato alle impostazioni di fabbrica, viene generata una nuova coppia di chiavi. Per stabilire una relazione tra un dispositivo iOS e un accessorio HomeKit, le chiavi vengono scambiate utilizzando il protocollo Secure Remote Password (a 3072 bit), usando un codice a 8 cifre fornito dal produttore dell’accessorio e inserito sul dispositivo iOS dall’utente e successivamente codificato mediante ChaCha20-Poly1305 AEAD con chiavi derivate da HKDF-SHA-512.
Durante la configurazione viene verificata anche la certificazione MFi dell’accessorio. Quando il dispositivo iOS e l’accessorio HomeKit comunicano durante l’utilizzo, il primo autentica il secondo, e viceversa, utilizzando le chiavi scambiate nel processo descritto prima. Ogni sessione è stabilita utilizzando il protocollo Station-to-Station ed è codificata con chiavi derivate da HKDF-SHA-512 basate su chiavi Curve25519 pre-sessione. Questo è valido sia per accessori basati su IP sia su quelli Bluetooth Low Energy.
Per quanto riguarda l’archiviazione dei dati, HomeKit archivia sul dispositivo iOS dell’utente i dati relativi a casa, accessori, luoghi e utenti. Questi dati archiviati sono codificati utilizzando le chiavi derivate dalle chiavi di identità HomeKit dell’utente, oltre a un nome casuale.
I dati sono inoltre archiviati utilizzando la classe di protezione dati “Protetto fino alla prima autenticazione utente”.
I dati HomeKit sono utilizzabili per backup solo quando l’utente sceglie l’opzione “backup codificati” (con password), così, ad esempio, i backup di iTunes non codificati non conterranno i dati HomeKit.
I dati HomeKit possono essere sincronizzati tra i dispositivi iOS di un utente utilizzando iCloud e il portachiavi iCloud. Sono codificati durante la sincronizzazione utilizzando chiavi derivate dall’identità HomeKit dell’utente e dal nome casuale. Durante la sincronizzazione, tali dati vengono gestiti come un “blob opaco”. Il blob più recente è archiviato su iCloud per abilitare la sincronizzazione, ma non è utilizzato per altri scopi.
È un oggetto codificato utilizzando chiavi disponibili solo sui dispositivi iOS dell’utente e quindi il suo contenuto è inaccessibile durante la trasmissione e l’archiviazione iCloud.
I dati HomeKit sono anche sincronizzati tra utenti multipli della stessa casa. Questo processo utilizza autenticazione e codifica, proprio come quelle usate tra un dispositivo iOS e un accessorio HomeKit.
L’autenticazione è basata su chiavi pubbliche Ed25519 che vengono scambiate tra i dispositivi quando un utente viene aggiunto a una casa. Dopo che un nuovo utente è stato aggiunto a una casa, ogni comunicazione successiva è autenticata e codificata utilizzando il protocollo Station-to-Station e le chiavi specifiche per sessione.
I nuovi utenti possono venire aggiunti solo dall’utente che ha inizialmente creato la casa in HomeKit. Il suo dispositivo configura gli accessori con la chiave pubblica del nuovo utente affinché l’accessorio possa autenticarsi e accettare comandi dall’utente nuovo.
Il processo che consente di configurare Apple TV affinché venga utilizzato con HomeKit utilizza la stessa autenticazione e codifica usate quando vengono aggiunti nuovi utenti, ma viene eseguito automaticamente se l’utente che ha creato la casa ha effettuato l’accesso a iCloud su Apple TV, e Apple TV si trova in casa. Se un utente non dispone di più dispositivi, e non concede l’accesso alla propria casa ad altri utenti, non verrà sincronizzato con iCloud alcun dato HomeKit.
Accesso remoto via iCloud
Gli accessori HomeKit possono connettersi direttamente a iCloud per consentire ai dispositivi iOS di controllarli quando la comunicazione Bluetooth o Wi-Fi non è disponibile o sospesa. L’accesso remoto via iCloud è stato progettato in maniera tale che ogni accessorio possa essere controllato e possa inviare notifiche senza rivelare a Apple di che accessorio si tratti o quali comandi o notifiche sta inviando. HomeKit non invia informazioni sull’abitazione tramite l’accesso remoto via iCloud.
Quando un utente invia un comando tramite l’accesso remoto via iCloud, viene stabilita un’autenticazione reciproca tra l’accessorio e il dispositivo iOS e i dati vengono codificati tramite la stessa procedura descritta per le connessioni locali. I contenuti delle comunicazioni sono codificati e non sono visibili da parte di Apple. Il collegamento tramite iCloud è basato sugli identificatori di iCloud registrati durante il processo di configurazione.
Gli accessori che supportano l’accesso remoto via iCloud vengono abbinati durante il loro processo di configurazione. Il processo di abbinamento inizia quando l’utente effettua l’accesso a iCloud. Successivamente, il dispositivo iOS chiede all’accessorio di autenticarsi tramite l’apposito coprocessore Apple integrato in tutti gli accessori compatibili con HomeKit.
L’accessorio genera anche chiavi ellittiche prime256v1 e la chiave pubblica viene inviata al dispositivo iOS insieme all’autenticazione e al certificato X.509 del coprocessore per l’autenticazione. Essi vengono utilizzati per richiedere un certificato per l’accessorio dal server di iCloud per l’abbinamento. Il certificato viene archiviato dall’accessorio, ma non contiene nessuna informazione che identifichi l’accessorio, a parte il permesso a collegarsi tramite l’accesso remoto via iCloud di HomeKit. Il dispositivo iOS che sta eseguendo l’abbinamento invia all’accessorio anche l’URL e altre informazioni necessarie a connettersi al server di accesso remoto di iCloud. Tali informazioni non sono legate a nessun utente o accessorio.
Ogni accessorio registra un elenco di utenti consentiti con il server di accesso remoto di iCloud. Tali utenti hanno ricevuto il permesso di controllare l’accessorio dalla persona che lo ha aggiunto all’abitazione. Agli utenti viene concesso un identificatore dal server di iCloud e possono essere associati a un account iCloud allo scopo di consegnare messaggi di notifica e risposte da parte degli accessori.
Analogamente, gli accessori ricevono degli identificatori da iCloud, ma tali identificatori non rivelano alcuna informazione sull’accessorio stesso. Quando un accessorio si connette al server di accesso remoto via iCloud di HomeKit, presenta il proprio certificato e un permesso. Il permesso viene ottenuto da un altro server iCloud e non è univoco per ciascun accessorio.
Quando un accessorio richiede un permesso, nella richiesta vengono inclusi il produttore, il modello e la versione del firmware. In questa richiesta non viene inviata alcuna informazione che identifichi l’utente o l’abitazione.
La connessione al server che fornisce i permessi non è autenticata, in maniera tale da proteggere maggiormente la privacy. Gli accessori si connettono al server di accesso remoto via iCloud attraverso HTTP/2, protetto tramite TLS 1.2 con AES-128-GCM e SHA-256. L’accessorio mantiene aperta la connessione al server di accesso remoto via iCloud, in maniera tale da poter ricevere messaggi e inviare risposte e notifiche ai dispositivi iOS.