Notificacións push seguras: da teoría á práctica

Ola Habr!

Hoxe falarei do que levamos varios meses facendo os meus compañeiros e eu: notificacións push para mensaxería instantánea móbil. Como xa dixen, na nosa aplicación o principal énfase está na seguridade. Por iso, descubrimos se as notificacións push teñen "puntos débiles" e, de ser así, como podemos nivelalas para engadir esta útil opción ao noso servizo.

Estou publicando unha tradución do noso artigos de Medium con algunhas pequenas incorporacións da miña parte. Contén os resultados da "investigación" e unha historia sobre como se resolveu o problema.

Examinamos o material

No modelo clásico, as notificacións push fan que os mensaxeiros sexan vulnerables aos ataques MITM (Man-in-the-middle). Por exemplo, con Google, Microsoft e a versión antiga de iMessage, a aplicación envía claves de cifrado aos servidores de Apple: no servidor, os usuarios son autenticados e a cabeceira da mensaxe (ou o seu contido) é descifrada.

Notificacións push seguras: da teoría á práctica

Como resultado, existe a posibilidade de ler a correspondencia accedendo ao servidor de notificacións push. Isto significa que calquera cifrado da correspondencia é inútil: as notificacións push aínda deixarán a posibilidade de ser lidas por terceiros. Os autores do artigo analizaron esta posibilidade con máis detalle. "Cifrar correctamente" en Xaker.ru, dedicado aos métodos de cifrado de mensaxes.

Se pensas que os servidores de Apple e Google son 100% seguros contra a fuga de claves de cifrado dos usuarios, ten en conta o feito de que os seus empregados teñen acceso a eles. E os empregados son persoas.
A pesar de todas as vulnerabilidades das notificacións push, moitos mensaxeiros instantáneos "seguros", incluídos Signal e Telegram, utilízanas. En caso contrario, os usuarios terán que supervisar "manualmente" as novas mensaxes iniciando sesión constantemente na aplicación. O que é moi inconveniente, e os mensaxeiros competidores terán vantaxe.

Paranoia e sentido común


No noso proxecto, abordamos este tema de preto hai varios meses. Necesitabamos engadir unha opción de notificación push para ser competitivos. Pero, ao mesmo tempo, non abras un buraco de seguridade, porque calquera fuga de datos minaria a confianza no proxecto.

Non obstante, xa temos unha vantaxe importante: o noso mensaxeiro está descentralizado (os datos almacénanse na cadea de bloques) e os empregados non teñen acceso ás contas. Só os usuarios teñen claves de cifrado e as claves públicas dos interlocutores están dispoñibles na cadea de bloques para protexerse contra ataques MITM.

Na primeira versión das notificacións push, decidimos facer o máis seguro posible e non transmitir o texto da mensaxe en absoluto. O servizo push non recibiu o texto da mensaxe do nodo, senón só un sinal sobre o feito da súa recepción. Polo tanto, o usuario viu a notificación "Chegou unha nova mensaxe". Só era posible lelo no messenger.

Notificacións push seguras: da teoría á práctica
Como funcionou: vídeo.

Despois diso, soubemos que a última versión de notificacións de Apple ten novas funcións de seguridade. Eles liberado UNNotificationServiceExtension, que permite aos desenvolvedores enviar datos de notificación totalmente cifrados a través de APNS. A aplicación do dispositivo do usuario final realiza o descifrado (ou descarga datos adicionais) e mostra unha notificación. Tomámolo como base para a segunda versión das notificacións push.

Agora desenvolvemos a segunda versión das notificacións push para iOS, que che permite mostrar o texto da mensaxe sen risco de seguridade. No novo concepto, a lóxica é así:

  • O servizo push envía unha notificación push co número de transacción (a mensaxe cifrada pode ser moi grande e o tamaño das notificacións é moi limitado)
  • Cando o dispositivo recibe unha notificación, lanza a nosa NotificationServiceExtension, unha microaplicación que solicita unha transacción do nodo mediante o identificador, descifra-a usando a frase de acceso gardada e envía unha nova notificación ao sistema. A contrasinal gárdase nun almacenamento seguro.
  • O sistema mostra unha notificación cunha mensaxe descifrada ou tradución.
  • As teclas non van a ningún lado, igual que a mensaxe de texto simple. O servizo push non ten forma de descifrar a mensaxe.

Notificacións push seguras: da teoría á práctica

Aceptamos que esta versión funcionaba e implementámola na última actualización da aplicación iOS.
Os interesados ​​na parte técnica poden ver o código fonte: github.com/Adamant-im/adamant-notificationService.

Fonte: www.habr.com

Engadir un comentario