Hallo, Habra!
Heute erzähle ich von dem, womit wir uns seit mehreren Monaten beschäftigen: von Push-Benachrichtigungen für mobile Messenger. Wie ich bereits erwähnt habe, liegt der Schwerpunkt unserer Anwendung auf Sicherheit. Daher haben wir untersucht, ob es bei Push-Benachrichtigungen "schwache Stellen" gibt und wenn ja, wie wir diese ausgleichen können, um diese nützliche Option in unseren Dienst zu integrieren.
Ich veröffentlicht die Übersetzung unseres mit einigen kleinen Ergänzungen von meiner Seite. Darin sind die Ergebnisse der "Untersuchung" und die Erläuterung, wie wir das Problem gelöst haben.
Wir untersuchen die Technik
In der klassischen Modell machen Push-Benachrichtigungen Messenger anfällig für MITM-Angriffe (Man-in-the-Middle). Zum Beispiel sendet Google, Microsoft und die alte Version von iMessage die Verschlüsselungsschlüssel an die Server von Apple – auf dem Server findet die Authentifizierung der Benutzer und die Entschlüsselung des Nachrichten-Headers (oder des Inhalts) statt.

Infolgedessen besteht die Möglichkeit, den Schriftverkehr zu lesen, wenn man Zugang zu den Push-Benachrichtigungsservern erhält. Das bedeutet, dass jede Verschlüsselung des Schriftverkehrs nutzlos ist: Push-Benachrichtigungen bieten weiterhin die Möglichkeit, von Dritten gelesen zu werden. Die Autoren des Artikels auf Xaker.ru haben diese Möglichkeit angesprochen, die sich mit den Methoden der Nachrichtverschlüsselung beschäftigt.
Wenn Sie denken, dass die Server von Apple und Google 100 % sicher vor einem Leck der Benutzer-Verschlüsselungsschlüssel sind, denken Sie daran, dass deren Mitarbeiter Zugang zu diesen haben. Und Mitarbeiter sind Menschen.
Trotz aller Schwächen von Push-Benachrichtigungen nutzen viele „sichere“ Messenger, darunter Signal und Telegram, sie. Ansonsten müssten die Benutzer neue Nachrichten "manuell" überwachen, indem sie ständig in die Anwendung gehen. Das ist sehr unpraktisch, und Konkurrenz-Apps würden einen Vorteil erhalten.
Paranoia und gesunder Menschenverstand
In unserem Projekt haben wir uns vor mehreren Monaten intensiv mit diesem Thema beschäftigt. Wir mussten eine Push-Benachrichtigungsoption schaffen, um wettbewerbsfähig zu bleiben. Dabei durften wir jedoch nicht durch ein Sicherheitsleck das Vertrauen in das Projekt gefährden.
Allerdings haben wir bereits einen wichtigen Vorteil: Unser Messenger ist dezentralisiert (Daten werden in der Blockchain gespeichert), zudem haben die Mitarbeiter keinen Zugang zu den Konten. Die Verschlüsselungsschlüssel befinden sich nur bei den Benutzern, und die öffentlichen Schlüssel der Gesprächspartner sind in der Blockchain verfügbar, um sich vor MITM-Angriffen zu schützen.
In der ersten Version der Push-Nachrichten haben wir versucht, auf Nummer sicher zu gehen und den Nachrichtentext überhaupt nicht zu übermitteln. Der Push-Dienst erhielt von der Node nicht den Text der Nachricht, sondern nur ein Signal über den Erhalt. Daher sah der Benutzer die Benachrichtigung „Es ist eine neue Nachricht eingegangen“. Diese konnte nur im Messenger gelesen werden.

.
Danach haben wir erfahren, dass in der neuesten Version der Benachrichtigungen von Apple neue Schutzmaßnahmen vorhanden sind. Sie UNNotificationServiceExtension, die es Entwicklern ermöglicht, vollständig verschlüsselte Benachrichtigungsdaten über APNS zu senden. Dann entschlüsselt die Anwendung auf dem Gerät des Endbenutzers die Daten (oder lädt zusätzliche Daten) und zeigt die Benachrichtigung an. Diese Grundlage haben wir für die zweite Version der Push-Nachrichten verwendet.
Jetzt haben wir die zweite Version der Push-Benachrichtigungen für iOS entwickelt, die es ermöglicht, den Nachrichtentext ohne Sicherheitsrisiko anzuzeigen. In dem neuen Konzept sieht die Logik folgendermaßen aus:
- Der Push-Dienst sendet eine Push-Benachrichtigung mit der Transaktionsnummer (da die verschlüsselte Nachricht sehr groß sein kann, ist die Größe der Benachrichtigungen stark begrenzt)
- Das Gerät startet beim Empfang der Benachrichtigung unsere NotificationServiceExtension – ein Mikroanwendung, die die Transaktion von der Node anhand der ID anfordert, sie mit dem gespeicherten Passwort entschlüsselt und der System eine neue Benachrichtigung übergibt. Das Passwort wird in einem sicheren Speicher aufbewahrt.
- Das System zeigt die Benachrichtigung mit der entschlüsselten Nachricht oder Übersetzung an.
- Die Schlüssel verlassen das Gerät nicht, ebenso wenig wie die Klartextnachricht. Der Push-Dienst hat keine Möglichkeit, die Nachricht zu entschlüsseln.

Diese Version haben wir als Arbeitsversion akzeptiert und im letzten Update der iOS-Anwendung umgesetzt.
Technikinteressierte können den Quellcode einsehen: .
Quelle: habr.com
