Notifiche push sicure: dalla teoria alla pratica

Ehi Habr!

Oggi parlerò di ciò che io e i miei colleghi stiamo facendo ormai da diversi mesi: notifiche push per la messaggistica istantanea mobile. Come ho già detto, nella nostra applicazione l'enfasi principale è sulla sicurezza. Abbiamo quindi scoperto se le notifiche push hanno dei “punti deboli” e, in tal caso, come possiamo livellarli per aggiungere questa utile opzione al nostro servizio.

Pubblico una traduzione del ns articoli da Medium con alcune piccole aggiunte da parte mia. Contiene i risultati dell '"indagine" e una storia su come è stato risolto il problema.

Esaminiamo il materiale

Nel modello classico, le notifiche push rendono i messenger vulnerabili agli attacchi MITM (Man-in-the-middle). Ad esempio, con Google, Microsoft e la vecchia versione di iMessage, l'applicazione invia chiavi di crittografia ai server Apple: sul server gli utenti vengono autenticati e l'intestazione del messaggio (o il suo contenuto) viene decrittografata.

Notifiche push sicure: dalla teoria alla pratica

Di conseguenza, c'è la possibilità di leggere la corrispondenza ottenendo l'accesso al server di notifica push. Ciò significa che qualsiasi cifratura della corrispondenza è inutile: le notifiche push lasceranno comunque la possibilità di essere lette da terzi. Gli autori dell'articolo hanno discusso questa possibilità in modo più dettagliato. “Crittografa correttamente” su Xaker.ru, dedicato ai metodi di crittografia dei messaggi.

Se ritieni che i server Apple e Google siano sicuri al 100% contro la fuga delle chiavi di crittografia degli utenti, considera il fatto che i loro dipendenti vi hanno accesso. E i dipendenti sono persone.
Nonostante tutte le vulnerabilità delle notifiche push, molti servizi di messaggistica istantanea “sicuri”, tra cui Signal e Telegram, le utilizzano. In caso contrario, gli utenti dovranno monitorare “manualmente” i nuovi messaggi accedendo costantemente all’applicazione. Il che è molto scomodo e i messaggeri concorrenti otterranno un vantaggio.

Paranoie e buon senso


Nel nostro progetto abbiamo affrontato da vicino questo tema diversi mesi fa. Avevamo bisogno di aggiungere un'opzione di notifica push per essere competitivi. Ma allo stesso tempo, non aprire una falla nella sicurezza, perché qualsiasi fuga di dati minerebbe la fiducia nel progetto.

Tuttavia, abbiamo già un vantaggio importante: il nostro messenger è decentralizzato (i dati sono archiviati sulla blockchain) e i dipendenti non hanno accesso agli account. Solo gli utenti dispongono di chiavi di crittografia e le chiavi pubbliche degli interlocutori sono disponibili sulla blockchain per proteggersi dagli attacchi MITM.

Nella prima versione delle notifiche push abbiamo deciso di andare sul sicuro il più possibile e di non trasmettere affatto il testo del messaggio. Il servizio push non ha ricevuto dal nodo il testo del messaggio, ma solo un segnale relativo al fatto della sua ricezione. Pertanto, l'utente ha visualizzato la notifica "È arrivato un nuovo messaggio". È stato possibile leggerlo solo nel messenger.

Notifiche push sicure: dalla teoria alla pratica
Come ha funzionato: video.

Successivamente, abbiamo appreso che l'ultima versione delle notifiche di Apple ha nuove funzionalità di sicurezza. Essi rilasciato UNNotificationServiceExtension, che consente agli sviluppatori di inviare dati di notifica completamente crittografati tramite APNS. L'app sul dispositivo dell'utente finale esegue quindi la decrittografia (o scarica dati aggiuntivi) e visualizza una notifica. Lo abbiamo preso come base per la seconda versione delle notifiche push.

Ora abbiamo sviluppato la seconda versione delle notifiche push per iOS, che consente di visualizzare il testo del messaggio senza rischi per la sicurezza. Nel nuovo concetto, la logica è simile a questa:

  • Il servizio push invia una notifica push con il numero di transazione (il messaggio crittografato può essere molto grande e la dimensione delle notifiche è molto limitata)
  • Quando il dispositivo riceve una notifica, avvia la nostra NotificationServiceExtension, una microapplicazione che richiede una transazione dal nodo tramite ID, la decrittografa utilizzando la passphrase salvata e invia una nuova notifica al sistema. La passphrase viene archiviata in un archivio sicuro.
  • Il sistema visualizza una notifica con un messaggio o una traduzione decrittografati.
  • Le chiavi non vanno da nessuna parte, proprio come il semplice messaggio di testo. Il servizio push non ha modo di decrittografare il messaggio.

Notifiche push sicure: dalla teoria alla pratica

Abbiamo accettato questa versione come funzionante e l'abbiamo implementata nell'ultimo aggiornamento dell'applicazione iOS.
Chi è interessato al lato tecnico può visionare il codice sorgente: github.com/Adamant-im/adamant-notificationService.

Fonte: habr.com

Aggiungi un commento