Notificacions push segures: de la teoria a la pràctica

Hola Habr!

Avui us explicaré el que estem fent els meus companys i jo des de fa uns mesos: sobre les notificacions push per a missatgers mòbils. Com he dit, a la nostra aplicació, l'èmfasi principal està en la seguretat. Per tant, hem esbrinat si les notificacions push tenen “punts febles” i, si és així, com les podem anivellar per afegir aquesta opció útil al nostre servei.

Publico una traducció del nostre articles de Medium amb algunes addicions de mi mateix. Conté els resultats de la "investigació" i una història sobre com es va resoldre el problema.

Explorant el material

En el model clàssic, les notificacions push fan que els missatgers siguin vulnerables als atacs MITM (Man-in-the-middle). Per exemple, a Google, Microsoft i a la versió antiga d'iMessage, l'aplicació envia claus de xifratge als servidors d'Apple: els usuaris s'autentiquen al servidor i la capçalera del missatge (o el seu contingut) es desxifra.

Notificacions push segures: de la teoria a la pràctica

Com a resultat, hi ha la possibilitat de llegir la correspondència obtenint accés al servidor de notificacions push. I això vol dir que qualsevol xifratge de correspondència és inútil: les notificacions push encara deixaran la possibilitat de llegir per part de tercers. Aquesta possibilitat va ser discutida amb més detall pels autors de l'article. "Encriptar intel·ligentment" a Xaker.ru, dedicat als mètodes de xifratge de missatges.

Si us sembla que els servidors d'Apple i Google evitaran al 100% les claus de xifratge dels usuaris, tingueu en compte que els seus empleats hi tenen accés. I els empleats són persones.
Amb totes les vulnerabilitats de les notificacions push, molts missatgers "segurs", inclosos Signal i Telegram, les utilitzen. Al cap i a la fi, en cas contrari els usuaris hauran de controlar "manualment" els nous missatges, entrant constantment a l'aplicació. La qual cosa és molt inconvenient, i els missatgers competidors tindran avantatge.

Paranoia i sentit comú


En el nostre projecte, vam abordar aquest problema fa uns mesos. Necessitàvem una opció de notificació push per ser competitius. Però això no obre un forat de seguretat, perquè qualsevol filtració de dades perjudicarà la credibilitat del projecte.

Tanmateix, ja tenim un avantatge important: el nostre missatger està descentralitzat (les dades s'emmagatzemen a la cadena de blocs), mentre que els empleats no tenen accés als comptes. Només els usuaris tenen claus de xifratge, mentre que les claus públiques dels interlocutors estan disponibles a la cadena de blocs per protegir-se dels atacs MITM.

A la primera versió de les notificacions push, vam decidir jugar amb seguretat tant com fos possible i no enviar el text del missatge en absolut. El servei push rebut del node no el text del missatge, sinó només un senyal sobre el fet de la seva recepció. Per tant, l'usuari va veure la notificació "Ha arribat un missatge nou". Només era possible llegir-lo al missatger.

Notificacions push segures: de la teoria a la pràctica
Com funcionava: vídeo.

Després d'això, vam saber que la darrera versió de les notificacions d'Apple té noves funcions de seguretat. Ells alliberat UNNotificationServiceExtension que permet als desenvolupadors enviar dades de notificació totalment xifrades mitjançant APNS. L'aplicació del dispositiu de l'usuari final realitza el desxifrat (o baixa dades addicionals) i mostra una notificació. Ho vam prendre com a base per a la segona versió de les notificacions push.

Ara hem desenvolupat la segona versió de les notificacions push per a iOS, que permet mostrar el text del missatge sense riscos de seguretat. En el nou concepte, la lògica és així:

  • El servei push envia una notificació push amb el número de transacció (el missatge xifrat pot ser molt gran i la mida de les notificacions és molt limitada)
  • Quan un dispositiu rep una notificació, llança la nostra NotificationServiceExtension: una microaplicació que sol·licita una transacció al node per identificador, la desxifra amb la frase de contrasenya desada i envia una nova notificació al sistema. La contrasenya s'emmagatzema en un emmagatzematge segur.
  • El sistema mostra una notificació amb el missatge descodificat o la traducció.
  • Les tecles no van enlloc, com un missatge de text senzill. El servei push no té cap manera de desxifrar el missatge.

Notificacions push segures: de la teoria a la pràctica

Vam prendre aquesta versió com a versió de treball i la vam implementar a l'última actualització de l'aplicació iOS.
Els interessats en la part tècnica poden veure el codi font: github.com/adamant-im/adamant-notificationService.

Font: www.habr.com

Afegeix comentari