Notifications push sécurisées : de la théorie à la pratique

Hé Habr !

Aujourd’hui, je vais parler de ce que mes collègues et moi faisons depuis plusieurs mois : les notifications push pour les messageries instantanées mobiles. Comme je l'ai déjà dit, dans notre application, l'accent est mis sur la sécurité. Nous avons donc examiné si les notifications push présentent des « points faibles » et, si tel est le cas, comment les atténuer afin d'ajouter cette option utile à notre service.

Je publie une traduction de notre articles de Medium avec quelques petits ajouts de ma part. Il contient les résultats de « l'enquête » et une histoire sur la façon dont le problème a été résolu.

Nous examinons le matériel

Dans le modèle classique, les notifications push rendent les messagers vulnérables aux attaques MITM (Man-in-the-middle). Par exemple, avec Google, Microsoft et l'ancienne version d'iMessage, l'application envoie des clés de chiffrement aux serveurs Apple : sur le serveur, les utilisateurs sont authentifiés et l'en-tête du message (ou son contenu) est déchiffré.

Notifications push sécurisées : de la théorie à la pratique

En conséquence, il est possible de lire la correspondance en accédant au serveur de notification push. Cela signifie que tout cryptage de la correspondance est inutile : les notifications push laisseront toujours la possibilité d'être lues par des tiers. Les auteurs de l'article ont discuté de cette possibilité plus en détail. « Chiffrer correctement » sur Xaker.ru, dédié aux méthodes de cryptage des messages.

Si vous pensez que les serveurs Apple et Google sont sécurisés à 100 % contre les fuites de clés de chiffrement des utilisateurs, considérez le fait que leurs employés y ont accès. Et les employés sont des personnes.
Malgré toutes les vulnérabilités des notifications push, de nombreuses messageries instantanées « sécurisées », dont Signal et Telegram, les utilisent. Sinon, les utilisateurs devront surveiller « manuellement » les nouveaux messages en se connectant constamment à l’application. Ce qui est très gênant et les messagers concurrents auront un avantage.

Paranoïa et bon sens


Dans notre projet, nous avons abordé cette question de près il y a plusieurs mois. Nous devions ajouter une option de notification push pour être compétitifs. Mais en même temps, n’ouvrez pas de faille de sécurité, car toute fuite de données saperait la confiance dans le projet.

Cependant, nous avons déjà un avantage important : notre messagerie est décentralisée (les données sont stockées sur la blockchain), et les collaborateurs n'ont pas accès aux comptes. Seuls les utilisateurs disposent de clés de chiffrement, et les clés publiques des interlocuteurs sont disponibles sur la blockchain pour se protéger contre les attaques MITM.

Dans la première version des notifications push, nous avons décidé de jouer la sécurité autant que possible et de ne pas transmettre du tout le texte du message. Le service push n'a pas reçu le texte du message du nœud, mais seulement un signal concernant sa réception. Par conséquent, l’utilisateur a vu la notification « Un nouveau message est arrivé ». Il n'était possible de le lire que dans le messager.

Notifications push sécurisées : de la théorie à la pratique
Comment ça a fonctionné : vidéo.

Après cela, nous avons appris que la dernière version des notifications d'Apple comporte de nouvelles fonctionnalités de sécurité. Ils libéré UNNotificationServiceExtension, qui permet aux développeurs d'envoyer des données de notification entièrement cryptées via APNS. L'application sur l'appareil de l'utilisateur final effectue ensuite le décryptage (ou télécharge des données supplémentaires) et affiche une notification. Nous l'avons pris comme base pour la deuxième version des notifications push.

Nous avons désormais développé la deuxième version des notifications push pour iOS, qui permet d'afficher le texte du message sans risque de sécurité. Dans le nouveau concept, la logique ressemble à ceci :

  • Le service push envoie une notification push avec le numéro de transaction (le message crypté peut être très volumineux, et la taille des notifications est très limitée)
  • Lorsque l'appareil reçoit une notification, il lance notre NotificationServiceExtension - une microapplication qui demande une transaction au nœud par identifiant, la déchiffre à l'aide de la phrase secrète enregistrée et envoie une nouvelle notification au système. La phrase secrète est stockée dans un stockage sécurisé.
  • Le système affiche une notification avec un message décrypté ou une traduction.
  • Les touches ne vont nulle part, tout comme le message en texte brut. Le service push n'a aucun moyen de déchiffrer le message.

Notifications push sécurisées : de la théorie à la pratique

Nous avons accepté cette version comme fonctionnelle et l'avons implémentée dans la dernière mise à jour de l'application iOS.
Les personnes intéressées par l'aspect technique peuvent consulter le code source : github.com/Adamant-im/adamant-notificationService.

Source: habr.com

Ajouter un commentaire