Veilige pushmeldingen: van theorie naar praktijk

Hé Habr!

Vandaag zal ik het hebben over wat mijn collega’s en ik al enkele maanden doen: pushmeldingen voor mobiele instant messengers. Zoals ik al zei, ligt in onze toepassing de nadruk vooral op beveiliging. Daarom zijn we erachter gekomen of pushmeldingen “zwakke punten” hebben en, zo ja, hoe we deze kunnen nivelleren om deze handige optie aan onze service toe te voegen.

Ik publiceer een vertaling van onze artikelen van Medium met wat kleine aanvullingen van mijzelf. Hierin staan ​​de resultaten van het ‘onderzoek’ en een verhaal over hoe het probleem is opgelost.

Wij onderzoeken het materieel

In het klassieke model maken pushmeldingen boodschappers kwetsbaar voor MITM-aanvallen (Man-in-the-middle). Bij Google, Microsoft en de oude versie van iMessage stuurt de applicatie bijvoorbeeld encryptiesleutels naar Apple-servers - op de server worden gebruikers geverifieerd en wordt de berichtkop (of de inhoud ervan) gedecodeerd.

Veilige pushmeldingen: van theorie naar praktijk

Hierdoor bestaat de kans om de correspondentie te lezen door toegang te krijgen tot de push-notificatieserver. Dit betekent dat elke vorm van versleuteling van correspondentie nutteloos is: pushmeldingen laten nog steeds de mogelijkheid open om door derden te worden gelezen. De auteurs van het artikel hebben deze mogelijkheid in meer detail besproken. “Correct coderen” op Xaker.ru, gewijd aan methoden voor het coderen van berichten.

Als u denkt dat de servers van Apple en Google 100% veilig zijn tegen het lekken van coderingssleutels van gebruikers, houd er dan rekening mee dat hun werknemers er toegang toe hebben. En medewerkers zijn mensen.
Ondanks alle kwetsbaarheden van pushmeldingen maken veel ‘veilige’ instant messengers, waaronder Signal en Telegram, er gebruik van. Anders zullen gebruikers “handmatig” nieuwe berichten moeten monitoren door voortdurend in te loggen op de applicatie. Dat is erg lastig, en concurrerende boodschappers zullen een voordeel krijgen.

Paranoia en gezond verstand


In ons project hebben we dit onderwerp enkele maanden geleden nauwgezet opgepakt. We moesten een optie voor pushmeldingen toevoegen om concurrerend te zijn. Maar open tegelijkertijd geen veiligheidslek, want elk datalek zal het vertrouwen in het project ondermijnen.

We hebben echter al een belangrijk voordeel: onze messenger is decentraal (gegevens worden opgeslagen op de blockchain) en medewerkers hebben geen toegang tot accounts. Alleen gebruikers hebben coderingssleutels en openbare sleutels van gesprekspartners zijn beschikbaar op de blockchain om te beschermen tegen MITM-aanvallen.

In de eerste versie van pushmeldingen hebben we besloten om zoveel mogelijk op safe te spelen en de berichttekst helemaal niet door te geven. De push-service ontving niet de tekst van het bericht van het knooppunt, maar alleen een signaal over de ontvangst ervan. Daarom zag de gebruiker de melding 'Nieuw bericht is aangekomen'. Het was alleen mogelijk om het in de messenger te lezen.

Veilige pushmeldingen: van theorie naar praktijk
Hoe het werkte: video.

Daarna kwamen we erachter dat de nieuwste versie van meldingen van Apple nieuwe beveiligingsfuncties heeft. Zij vrijgelaten UNNotificationServiceExtension, waarmee ontwikkelaars volledig gecodeerde meldingsgegevens via APNS kunnen verzenden. De app op het apparaat van de eindgebruiker voert vervolgens de decodering uit (of downloadt aanvullende gegevens) en geeft een melding weer. We hebben het als basis genomen voor de tweede versie van pushmeldingen.

We hebben nu de tweede versie van pushmeldingen voor iOS ontwikkeld, waarmee je zonder veiligheidsrisico de tekst van het bericht kunt weergeven. In het nieuwe concept ziet de logica er als volgt uit:

  • De pushdienst stuurt een pushmelding met het transactienummer (het versleutelde bericht kan erg groot zijn en de omvang van de meldingen is zeer beperkt)
  • Wanneer het apparaat een melding ontvangt, start het onze NotificationServiceExtension - een microapplicatie die een transactie opvraagt ​​bij het knooppunt op basis van ID, deze decodeert met behulp van de opgeslagen wachtwoordzin en een nieuwe melding naar het systeem stuurt. De wachtwoordzin wordt veilig opgeslagen.
  • Het systeem geeft een melding weer met een gedecodeerd bericht of vertaling.
  • De toetsen gaan nergens heen, net als het gewone tekstbericht. De push-service kan het bericht niet ontsleutelen.

Veilige pushmeldingen: van theorie naar praktijk

We hebben deze versie als werkend geaccepteerd en geïmplementeerd in de nieuwste update van de iOS-applicatie.
Degenen die geïnteresseerd zijn in de technische kant kunnen de broncode bekijken: github.com/Adamant-im/adamant-notificationService.

Bron: www.habr.com

Voeg een reactie