Hallo, Habr!
Vandaag vertel ik over wat mijn collega's en ik de afgelopen maanden hebben gedaan: pushmeldingen voor mobiele berichtenapplicaties. Zoals ik al zei, ligt de focus in onze applicatie op veiligheid. Daarom hebben we onderzocht of er "zwakke punten" zijn in pushmeldingen en, als dat zo is, hoe we deze kunnen verhelpen om deze nuttige functie aan onze service toe te voegen.
Ik publiceer de vertaling van onze met enkele aanvullingen van mijn kant. Het bevat de resultaten van het "onderzoek" en een verhaal over hoe we het probleem hebben opgelost.
We onderzoeken de materie
In het klassieke model maken pushmeldingen berichtenapps kwetsbaar voor MITM-aanvallen (Man-in-the-middle). Bijvoorbeeld, bij Google, Microsoft en in de oude versie van iMessage verstuurt de applicatie versleutelingssleutels naar de servers van Apple — op de server vindt authenticatie van gebruikers en decryptie van de berichtheader (of de inhoud daarvan) plaats.

Uiteindelijk is er een kans om de gesprekken te lezen als je toegang krijgt tot de server voor pushmeldingen. Dit betekent dat elke versleuteling van berichten nutteloos is: pushmeldingen bieden toch gelegenheid voor derden om mee te kijken. Meer over deze mogelijkheid werd besproken door de auteurs van het artikel op Xaker.ru, dat gewijd is aan manieren van berichtversleuteling.
Als je denkt dat de servers van Apple en Google 100% voorkomen dat er versleutelingssleutels van gebruikers uitlekken, bedenk dan dat hun medewerkers toegang hebben tot die servers. En medewerkers zijn mensen.
Ondanks alle kwetsbaarheden gebruiken veel "veilige" berichtenapps, waaronder Signal en Telegram, pushmeldingen. Want anders moeten gebruikers nieuwe berichten "handmatig" controleren door constant de applicatie te openen. Dit is erg ongemakkelijk, en concurrenten in de berichtenapps zullen een voordeel hebben.
Paranoia en gezond verstand
In ons project hebben we dit probleem een paar maanden geleden grondig aangepakt. We moesten de optie voor pushmeldingen maken om concurrerend te blijven. Maar tegelijkertijd wilden we er niet voor zorgen dat er een veiligheidslek kwam, want elke datalek zou het vertrouwen in het project ondermijnen.
We hebben echter al een belangrijk voordeel: onze berichtenapp is gedecentraliseerd (gegevens worden opgeslagen in de blockchain), terwijl medewerkers geen toegang hebben tot de accounts. De versleutelingssleutels zijn alleen bij de gebruikers, en de publieke sleutels van gesprekspartners zijn beschikbaar in de blockchain, om te beschermen tegen MITM-aanvallen.
In de eerste versie van de pushberichten hebben we besloten om zo voorzichtig mogelijk te zijn en geen tekst van het bericht door te geven. De pushservice ontving van de node geen tekst van het bericht, maar alleen een signaal dat het was ontvangen. Daarom zag de gebruiker de melding 'Er is een nieuw bericht binnengekomen'. Het was alleen mogelijk om het te lezen in de messenger.

.
Daarna hebben we ontdekt dat in de nieuwste versie van notificaties van Apple nieuwe beveiligingselementen zijn. Zij UNNotificationServiceExtension, waarmee ontwikkelaars volledig versleutelde gegevens van notificaties via APNS kunnen verzenden. Vervolgens voert de applicatie op het apparaat van de eindgebruiker de decryptie uit (of laadt het aanvullende gegevens) en toont de notificatie. Dit hebben we als basis genomen voor de tweede versie van de pushberichten.
We hebben nu de tweede versie van pushmeldingen voor iOS ontwikkeld, waarmee de tekst van het bericht zonder veiligheidsrisico kan worden weergegeven. In het nieuwe concept ziet de logica er als volgt uit:
- De pushservice verzendt een pushmelding met een transactie-ID (het versleutelde bericht kan heel groot zijn, terwijl de grootte van meldingen sterk beperkt is)
- Bij ontvangst van de notificatie start het onze NotificationServiceExtension — een microapplicatie die de transactie opvraagt bij de node via het ID, deze ontsleutelt met behulp van de opgeslagen wachtwoordzin en het systeem een nieuwe notificatie teruggeeft. De wachtwoordzin wordt in een veilige opslag bewaard.
- Het systeem toont een notificatie met het ontsleutelde bericht of de vertaling.
- De sleutels verdwijnen nergens naartoe, net als het plain text-bericht. De pushservice heeft geen mogelijkheid om het bericht te ontsleutelen.

Deze versie hebben we geaccepteerd als de werkende versie en geïmplementeerd in de laatste update van de applicatie voor iOS.
Geïnteresseerden in de technische kant kunnen de broncode bekijken: .
Bron: habr.com
