Hallo Habr!
Heute werde ich darüber sprechen, was meine Kollegen und ich seit mehreren Monaten tun: über Push-Benachrichtigungen für mobile Instant Messenger. Wie gesagt, in unserer Anwendung liegt der Schwerpunkt auf der Sicherheit. Daher haben wir herausgefunden, ob Push-Benachrichtigungen „Schwachstellen“ aufweisen und wenn ja, wie wir sie ausgleichen können, um diese nützliche Option zu unserem Service hinzuzufügen.
Ich veröffentliche eine Übersetzung unseres
Artikels mit Medium mit einigen Ergänzungen von mir. Es enthält die Ergebnisse der „Untersuchung“ und eine Geschichte darüber, wie das Problem gelöst wurde.
Entdecken Sie das Material
Im klassischen Modell machen Push-Benachrichtigungen Messenger anfällig für MITM-Angriffe (Man-in-the-Middle, Man-in-the-Middle). Bei Google, Microsoft und in der alten Version von iMessage sendet die Anwendung beispielsweise Verschlüsselungsschlüssel an Apple-Server. Benutzer werden auf dem Server authentifiziert und der Nachrichtenkopf (oder sein Inhalt) wird entschlüsselt.

Infolgedessen besteht die Möglichkeit, die Korrespondenz zu lesen, indem Sie Zugriff auf den Push-Benachrichtigungsserver erhalten. Und das bedeutet, dass jede Verschlüsselung der Korrespondenz nutzlos ist: Push-Benachrichtigungen bieten weiterhin die Möglichkeit, von Dritten gelesen zu werden. Die Autoren des Artikels
„Encrypt Wisely“ auf Xaker.ru, der sich mit Methoden zur Nachrichtenverschlüsselung befasst, haben diese Möglichkeit ausführlicher erörtert.
Wenn Sie der Meinung sind, dass die Server von Apple und Google keinen 100% igen Verlust von Benutzerverschlüsselungsschlüsseln zulassen, sollten Sie berücksichtigen, dass ihre Mitarbeiter Zugriff darauf haben. Und die Mitarbeiter sind Menschen.
Bei all den Schwachstellen des Pushings verwenden viele "sichere" Messenger, einschließlich Signal und Telegramm, diese. Andernfalls müssen Benutzer neue Nachrichten "manuell" überwachen, indem sie ständig in die Anwendung eintreten. Was sehr unpraktisch ist und konkurrierende Boten einen Vorteil erhalten.
Paranoia und gesunder Menschenverstand
In unserem Projekt haben wir uns vor einigen Monaten mit diesem Thema auseinandergesetzt. Wir mussten Push-Benachrichtigungen zu einer Option machen, um wettbewerbsfähig zu sein. Machen Sie jedoch gleichzeitig keine Sicherheitslücke, da Datenlecks die Glaubwürdigkeit des Projekts beeinträchtigen.
Wir haben jedoch bereits einen wichtigen Vorteil: Unser Messenger ist dezentralisiert (Daten werden in der Blockchain gespeichert), während Mitarbeiter keinen Zugriff auf Konten haben. Nur Benutzer haben Verschlüsselungsschlüssel, und die öffentlichen Schlüssel des Gesprächspartners sind in der Blockchain verfügbar, um sich vor MITM-Angriffen zu schützen.
In der ersten Version des Push haben wir beschlossen, so viel wie möglich auf Nummer sicher zu gehen und den Text der Nachricht überhaupt nicht zu übertragen. Der Push-Dienst empfing vom Knoten nicht den Nachrichtentext, sondern nur ein Signal über die Tatsache seines Empfangs. Daher sah der Benutzer die Benachrichtigung "Eine neue Nachricht ist eingetroffen." Es konnte nur im Messenger gelesen werden.
Wie es funktioniert hat: Video .
Danach haben wir erfahren, dass die neueste Version von Benachrichtigungen von Apple neue Sicherheitsfunktionen enthält. Sie haben
die UNNotificationServiceExtension veröffentlicht, mit der Entwickler vollständig verschlüsselte Benachrichtigungsdaten über APNS senden können. Anschließend entschlüsselt die Anwendung auf dem Endbenutzergerät (oder lädt zusätzliche Daten herunter) und zeigt eine Benachrichtigung an. Wir haben es als Grundlage für die zweite Version des Push genommen.
Jetzt haben wir die zweite Version von Push-Benachrichtigungen für iOS entwickelt, mit der Sie Nachrichtentext ohne Sicherheitsrisiko anzeigen können. Im neuen Konzept sieht die Logik folgendermaßen aus:
- Der Push-Dienst sendet eine Push-Benachrichtigung mit einer Transaktionsnummer (die verschlüsselte Nachricht kann sehr groß sein und die Anzahl der Benachrichtigungen ist sehr begrenzt).
- Nach Erhalt einer Benachrichtigung startet das Gerät unsere NotificationServiceExtension - eine Mikroanwendung, die eine Transaktion vom Knoten anhand ihrer ID anfordert, sie mit der gespeicherten Passphrase entschlüsselt und dem System eine neue Benachrichtigung gibt. Die Passphrase wird in einem sicheren Lager gespeichert.
- Das System zeigt eine Benachrichtigung mit einer entschlüsselten Nachricht oder Übersetzung an.
- Die Schlüssel gehen nirgendwo hin, ebenso wie eine einfache Textnachricht. Der Push-Dienst kann die Nachricht nicht entschlüsseln.

Wir haben diese Version als funktionsfähig angesehen und im neuesten Update der iOS-Anwendung implementiert.
Interessenten an der technischen Seite können den Quellcode einsehen:
github.com/Adamant-im/adamant-notificationService .