Notificações push seguras: da teoria à prática

Oi, Habr!

Hoje falarei sobre o que meus colegas e eu temos feito há vários meses: notificações push para mensageiros instantâneos móveis. Como já disse, em nossa aplicação a ênfase principal está na segurança. Portanto, descobrimos se as notificações push têm “pontos fracos” e, em caso afirmativo, como podemos nivelá-los para adicionar esta opção útil ao nosso serviço.

Estou publicando uma tradução do nosso artigos do Médio com algumas pequenas adições minhas. Contém os resultados da “investigação” e uma história sobre como o problema foi resolvido.

Nós examinamos o material

No modelo clássico, as notificações push tornam os mensageiros vulneráveis ​​a ataques MITM (Man-in-the-middle). Por exemplo, com Google, Microsoft e a versão antiga do iMessage, o aplicativo envia chaves de criptografia para servidores Apple – no servidor, os usuários são autenticados e o cabeçalho da mensagem (ou seu conteúdo) é descriptografado.

Notificações push seguras: da teoria à prática

Como resultado, há uma chance de ler a correspondência obtendo acesso ao servidor de notificação push. Isso significa que qualquer criptografia de correspondência é inútil: as notificações push ainda deixarão a possibilidade de serem lidas por terceiros. Os autores do artigo discutiram essa possibilidade com mais detalhes. “Criptografar corretamente” em Xaker.ru, dedicado a métodos de criptografia de mensagens.

Se você acha que os servidores da Apple e do Google são 100% seguros contra vazamento de chaves de criptografia de usuários, considere o fato de que seus funcionários têm acesso a eles. E os funcionários são pessoas.
Apesar de todas as vulnerabilidades das notificações push, muitos mensageiros instantâneos “seguros”, incluindo Signal e Telegram, as utilizam. Caso contrário, os usuários terão que monitorar “manualmente” as novas mensagens, fazendo login constantemente no aplicativo. O que é muito inconveniente, e os mensageiros concorrentes terão uma vantagem.

Paranóia e bom senso


Em nosso projeto, abordamos esse assunto de perto há vários meses. Precisávamos adicionar uma opção de notificação push para sermos competitivos. Mas, ao mesmo tempo, não abra uma brecha de segurança, pois qualquer vazamento de dados prejudicará a confiança no projeto.

Porém, já temos uma vantagem importante: nosso mensageiro é descentralizado (os dados ficam armazenados no blockchain) e os funcionários não têm acesso às contas. Apenas os usuários possuem chaves de criptografia, e as chaves públicas dos interlocutores estão disponíveis no blockchain para proteção contra ataques MITM.

Na primeira versão das notificações push, decidimos jogar pelo seguro tanto quanto possível e não transmitir o texto da mensagem. O serviço push não recebeu o texto da mensagem do nó, mas apenas um sinal sobre o fato de seu recebimento. Portanto, o usuário viu a notificação “Nova mensagem chegou”. Só foi possível ler no messenger.

Notificações push seguras: da teoria à prática
Como funcionou: vídeo.

Depois disso, aprendemos que a versão mais recente de notificações da Apple possui novos recursos de segurança. Eles liberado UNNotificationServiceExtension, que permite aos desenvolvedores enviar dados de notificação totalmente criptografados por APNS. O aplicativo no dispositivo do usuário final executa a descriptografia (ou baixa dados adicionais) e exibe uma notificação. Tomamos isso como base para a segunda versão das notificações push.

Desenvolvemos agora a segunda versão das notificações push para iOS, que permite exibir o texto da mensagem sem risco de segurança. No novo conceito, a lógica fica assim:

  • O serviço push envia uma notificação push com o número da transação (a mensagem criptografada pode ser muito grande e o tamanho das notificações é muito limitado)
  • Quando o dispositivo recebe uma notificação, ele inicia nosso NotificationServiceExtension - um microaplicativo que solicita uma transação do nó por id, descriptografa-a usando a senha salva e envia uma nova notificação ao sistema. A senha é armazenada em armazenamento seguro.
  • O sistema exibe uma notificação com uma mensagem descriptografada ou tradução.
  • As chaves não vão a lugar nenhum, assim como a mensagem de texto simples. O serviço push não tem como descriptografar a mensagem.

Notificações push seguras: da teoria à prática

Aceitamos esta versão como funcional e a implementamos na atualização mais recente do aplicativo iOS.
Os interessados ​​na parte técnica podem visualizar o código fonte: github.com/Adamant-im/adamant-notificationService.

Fonte: habr.com

Adicionar um comentário