Notifiche push sicure: dalla teoria alla pratica

Ciao, Habr!

Oggi parlerò di ciò su cui io e i miei colleghi siamo stati impegnati per alcuni mesi: le notifiche push per i messenger mobile. Come ho già detto, nella nostra applicazione poniamo un forte accento sulla sicurezza. Per questo motivo, abbiamo indagato se ci siano "punti deboli" nelle notifiche push e, se sì, come possiamo mitigarli per aggiungere questa utile opzione al nostro servizio.

Pubblico la traduzione del nostro articolo su Medium con alcune aggiunte da parte mia. In esso ci sono le conclusioni dell'"indagine" e una narrazione su come è stata risolta la questione.

Esploriamo il materiale tecnico

Nel modello classico, le notifiche push rendono i messenger vulnerabili ad attacchi MITM (Man-in-the-middle, "uomo nel mezzo"). Ad esempio, Google, Microsoft e la vecchia versione di iMessage inviano le chiavi di crittografia ai server Apple — sul server avviene l'autenticazione degli utenti e la decrittazione dell'intestazione del messaggio (o del suo contenuto).

Notifiche push sicure: dalla teoria alla pratica

Di conseguenza, c'è la possibilità di leggere le conversazioni, accedendo al server delle notifiche push. Ciò significa che qualsiasi forma di crittografia delle conversazioni risulta inutile: le notifiche push lasceranno comunque la possibilità di lettura da parte di terzi. Gli autori dell'articolo hanno discusso questo aspetto in dettaglio. “Criptati in modo efficace” su Xaker.ru, dedicato ai metodi di crittografia dei messaggi.

Se pensate che i server di Apple e Google non possano mai subire perdite delle chiavi di crittografia degli utenti, riflettete sul fatto che i loro dipendenti hanno accesso a questi server. E i dipendenti sono persone.
Nonostante tutte le vulnerabilità dei push, molti messaggeri 'sicuri', inclusi Signal e Telegram, li utilizzano. Altrimenti gli utenti sarebbero costretti a monitorare manualmente i nuovi messaggi, accedendo continuamente all'app. Questo è piuttosto scomodo, e i messaggeri concorrenti avrebbero un vantaggio.

Paranoia e buon senso


Nel nostro progetto, abbiamo affrontato questa questione alcuni mesi fa. Avevamo bisogno di implementare l'opzione di notifiche push per rimanere competitivi. Ma allo stesso tempo, non volevamo creare una falla nella sicurezza, perché qualsiasi fuga di dati compromette la fiducia nel progetto.

Tuttavia, abbiamo già un vantaggio importante: il nostro messaggero è decentralizzato (i dati sono immagazzinati nella blockchain), e i dipendenti non hanno accesso agli account. Le chiavi di crittografia sono solo degli utenti, mentre le chiavi pubbliche degli interlocutori sono disponibili nella blockchain per difendersi dagli attacchi MITM.

Nella prima versione delle notifiche push abbiamo deciso di assicurarci al massimo, non trasmettendo affatto il testo del messaggio. Il servizio push riceveva dal nodo non il testo del messaggio, ma solo un segnale che ne attestava la ricezione. Pertanto, l'utente vedeva la notifica "È arrivato un nuovo messaggio". Era possibile leggerlo solo nel messenger.

Notifiche push sicure: dalla teoria alla pratica
Come funzionava: video.

Dopo ciò, abbiamo appreso che nell'ultima versione delle notifiche di Apple sono stati introdotti nuovi elementi di sicurezza. Essi hanno rilasciato UNNotificationServiceExtension, che consente agli sviluppatori di inviare dati di notifica completamente crittografati tramite APNS. Successivamente, l'applicazione sul dispositivo dell'utente finale esegue la decodifica (o scarica dati aggiuntivi) e visualizza la notifica. Questa è stata la base per la seconda versione delle notifiche push.

Attualmente abbiamo sviluppato la seconda versione delle notifiche push per iOS, che consente di visualizzare il testo del messaggio senza compromettere la sicurezza. Nella nuova concezione, la logica è la seguente:

  • Il servizio push invia una notifica push con il numero di transazione (il messaggio crittografato può essere molto grande e le dimensioni delle notifiche sono fortemente limitate)
  • Il dispositivo, una volta ricevuta la notifica, attiva il nostro NotificationServiceExtension: una micro-app che richiede alla nodo la transazione tramite ID, decrittografa utilizzando la passphrase salvata e restituisce un nuovo avviso al sistema. La passphrase è conservata in uno spazio sicuro.
  • Il sistema mostra una notifica con il messaggio decrittografato o la traduzione.
  • Le chiavi non escono mai, così come il messaggio in testo normale. Il servizio push non ha la possibilità di decrittografare il messaggio.

Notifiche push sicure: dalla teoria alla pratica

Questa versione è stata considerata funzionale ed è stata implementata nell'ultimo aggiornamento dell'app per iOS.
Coloro che sono interessati all'aspetto tecnico possono guardare il codice sorgente: github.com/Adamant-im/adamant-notificationService.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster