Hej, Habr!
I dag ska jag berÀtta om vad jag och mina kollegor har arbetat med de senaste mÄnaderna: push-notifikationer för mobila meddelandeapplikationer. Som jag redan nÀmnt, Àr vÄrt fokus pÄ sÀkerhet. DÀrför har vi undersökt om det finns "svaga punkter" i push-notifikationer och om sÄ Àr fallet, hur vi kan motverka dem för att lÀgga till denna anvÀndbara funktion i vÄr tjÀnst.
Jag publicerar en översÀttning av vÄr med nÄgra egna tillÀgg. Den innehÄller resultatet av en "utredning" och en berÀttelse om hur vi löste problemet.
Vi undersöker materialet
I den klassiska modellen gör push-notifikationer meddelandetjÀnster sÄrbara för MITM-attacker (Man-in-the-middle, "Mannen i mitten"). Till exempel, hos Google, Microsoft och den gamla versionen av iMessage skickar applikationen krypteringsnycklar till Apples servrar - dÀr sker autentisering av anvÀndare och avkodning av meddelandets rubrik (eller dess innehÄll).

Slutresultatet Àr att det finns en chans att lÀsa konversationer om man fÄr tillgÄng till push-notifikationsservern. Det betyder att alla krypteringar av meddelanden Àr meningslösa: push-notifikationer ger ÀndÄ möjlighet för tredje parter att lÀsa dem. Detta diskuteras mer ingÄende av författarna till artikeln pÄ Xaker.ru, som handlar om metoder för meddelandekryptering.
Om du tror att Apples och Googles servrar 100% kommer att förhindra lÀckor av anvÀndarnas krypteringsnycklar, tÀnk pÄ att deras anstÀllda har tillgÄng till dem. Och anstÀllda Àr mÀnniskor.
Trots alla sÄrbarheter hos push-notifikationer anvÀnder mÄnga "sÀkra" meddelandetjÀnster, inklusive Signal och Telegram, dem. Annars skulle anvÀndarna behöva "manuellt" övervaka nya meddelanden, stÀndigt gÄ in i applikationen. Vilket Àr ganska obekvÀmt, och konkurrerande meddelandetjÀnster skulle fÄ en fördel.
Paranoia och sunt förnuft
I vÄrt projekt tog vi itu med denna frÄga för nÄgra mÄnader sedan. Vi behövde skapa en push-notifikationsfunktion för att vara konkurrenskraftiga. Men vi ville inte skapa en sÀkerhetslucka, eftersom varje datalÀcka skulle underminera förtroendet för projektet.
Emellertid har vi redan en viktig fördel: vÄr meddelandetjÀnst Àr decentraliserad (data lagras i blockchain), och anstÀllda har inte tillgÄng till kontona. Krypteringsnycklarna finns endast hos anvÀndarna, medan offentliga nycklar för samtalspartnerna Àr tillgÀngliga i blockchain för att skydda mot MITM-attacker.
I den första versionen av push-notiser beslutade vi att vara vÀldigt försiktiga och inte överhuvudtaget överföra meddelandetexten. Push-tjÀnsten fick frÄn noden inte meddelandetexten, utan bara en signal om att det hade mottagits. DÀrför sÄg anvÀndaren notifikationen "Du har fÄtt ett nytt meddelande". Det gick endast att lÀsa i meddelandeappen.

.
Efter detta fick vi veta att den senaste versionen av notifikationer frÄn Apple har nya skyddselement. De UNNotificationServiceExtension, som gör det möjligt för utvecklare att skicka helt krypterade data i notifikationer via APNS. Sedan utför appen pÄ slutanvÀndarens enhet dekryptering (eller laddar ner ytterligare data) och visar notifikationen. Denna lösning anvÀnde vi som grund för den andra versionen av push-notiserna.
Nu har vi utvecklat den andra versionen av push-notifikationer för iOS, som möjliggör visning av meddelande-texten utan sÀkerhetsrisk. I den nya konceptet ser logiken ut sÄ hÀr:
- Push-tjÀnsten skickar push-notifikationen med transaktionsnumret (det krypterade meddelandet kan vara mycket stort, medan notifikationernas storlek Àr kraftigt begrÀnsad)
- Enheten vid mottagandet av notifikationen startar vĂ„r NotificationServiceExtension â en mikrotjĂ€nst som begĂ€r transaktionen frĂ„n noden via id, dekrypterar den med hjĂ€lp av den sparade passfrasen, och ger systemet en ny notifikation. Passfrasen lagras i ett sĂ€kert utrymme.
- Systemet visar notifikationen med det dekrypterade meddelandet eller översÀttningen.
- Nycklarna lÀmnar inte nÄgonstans, precis som meddelandet i klartext. Push-tjÀnsten har ingen möjlighet att dekryptera meddelandet.

Denna version antog vi som en fungerande och implementerade den i den senaste uppdateringen av appen för iOS.
Den som Àr intresserad av den tekniska sidan kan titta pÄ koden: .
KĂ€lla: habr.com
