Bezpieczne powiadomienia push: od teorii do praktyki

Cześć, Habr!

Dziś opowiem o tym, czym zajmujemy się z kolegami od kilku miesięcy: o powiadomieniach push dla mobilnych komunikatorów. Jak już wspominałem, w naszej aplikacji główny nacisk kładziemy na bezpieczeństwo. Dlatego staraliśmy się ustalić, czy powiadomienia push mają "słabe punkty" i jeśli tak, to jak możemy je zniwelować, aby dodać tę przydatną opcję do naszego serwisu.

Publikuję tłumaczenie naszego artykułu z Medium z niewielkimi dodatkami z mojej strony. Znajdują się w nim wyniki "śledztwa" oraz opis sposobu rozwiązania problemu.

Badamy temat

W klasycznym modelu powiadomienia push sprawiają, że komunikatory są podatne na ataki MITM (Man-in-the-middle, „Człowiek pośrodku”). Na przykład w Google, Microsoft i w starej wersji iMessage aplikacja wysyła klucze szyfrujące na serwery Apple — na serwerze odbywa się autoryzacja użytkowników oraz deszyfrowanie nagłówka wiadomości (lub jej treści).

Bezpieczne powiadomienia push: od teorii do praktyki

W efekcie istnieje szansa na przeczytanie korespondencji, uzyskując dostęp do serwera powiadomień push. A to oznacza, że jakiekolwiek szyfrowania korespondencji są bezwartościowe: powiadomienia push wciąż pozostawiają możliwość odczytu przez osoby trzecie. Szczegółowo tę możliwość omawiali autorzy artykułu „Szyfruj się mądrze” na Xaker.ru, poświęconego sposobom szyfrowania wiadomości.

Jeśli myślisz, że serwery Apple i Google nie dopuściłyby do wycieku kluczy szyfrujących użytkowników, pomyśl, że mają do nich dostęp ich pracownicy. A pracownicy to ludzie.
Pomimo wszystkich wad powiadomień push, wiele „bezpiecznych” komunikatorów, w tym Signal i Telegram, z nich korzysta. W przeciwnym razie użytkownicy musieliby „ręcznie” monitorować nowe wiadomości, stale wchodząc do aplikacji. Co jest dość niewygodne i komunikatory konkurencyjne uzyskałyby przewagę.

Paranoja i zdrowy rozsądek


W naszym projekcie przystąpiliśmy do tego zagadnienia kilka miesięcy temu. Musieliśmy wprowadzić opcję powiadomień push, aby być konkurencyjnymi. Ale jednocześnie nie chcieliśmy stworzyć luki w bezpieczeństwie, ponieważ jakiekolwiek wycieki danych podważyłyby zaufanie do projektu.

Jednakże mamy już ważną przewagę: nasz komunikator jest zdecentralizowany (dane są przechowywane w blockchainie), a pracownicy nie mają dostępu do kont. Klucze szyfrujące mają tylko użytkownicy, a publiczne klucze rozmówców są dostępne w blockchainie, aby chronić przed atakami MITM.

W pierwszej wersji powiadomień zdecydowaliśmy się na maksymalne zabezpieczenie i w ogóle nie przekazywać treści wiadomości. Serwis powiadomień otrzymywał od węzła nie tekst wiadomości, a jedynie sygnał o jej otrzymaniu. Dlatego użytkownik widział powiadomienie "Przyszła nowa wiadomość". Można było je odczytać tylko w komunikatorze.

Bezpieczne powiadomienia push: od teorii do praktyki
Jak to działa: wideo.

Po tym dowiedzieliśmy się, że w ostatniej wersji powiadomień od Apple są nowe elementy zabezpieczeń. One wydali UNNotificationServiceExtension, który pozwala programistom na przesyłanie w pełni zaszyfrowanych danych powiadomień przez APNS. Następnie aplikacja na urządzeniu końcowym wykonuje deszyfrację (lub pobiera dodatkowe dane) i wyświetla powiadomienie. Na jej podstawie opracowaliśmy drugą wersję powiadomień.

Obecnie opracowaliśmy drugą wersję powiadomień push dla iOS, która pozwala na wyświetlanie treści wiadomości bez zagrożenia dla bezpieczeństwa. W nowej koncepcji logika wygląda następująco:

  • Serwis powiadomień wysyła powiadomienie push z numerem transakcji (zaszyfrowana wiadomość może być bardzo duża, a rozmiar powiadomień jest mocno ograniczony)
  • Urządzenie, po otrzymaniu powiadomienia, uruchamia naszą NotificationServiceExtension — mikroaplikację, która żąda transakcji od węzła po id, deszyfruje ją za pomocą zachowanej frazy hasła i przekazuje systemowi nowe powiadomienie. Fraza hasła jest przechowywana w bezpiecznym repozytorium.
  • System pokazuje powiadomienie z odszyfrowaną wiadomością lub tłumaczeniem.
  • Klucze nigdzie nie wychodzą, podobnie jak jawna wiadomość. Serwis powiadomień nie ma możliwości odszyfrowania wiadomości.

Bezpieczne powiadomienia push: od teorii do praktyki

Tę wersję przyjęliśmy jako roboczą i wdrożyliśmy w ostatniej aktualizacji aplikacji dla iOS.
Osoby zainteresowane stroną techniczną mogą zobaczyć kod źródłowy: github.com/Adamant-im/adamant-notificationService.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster