Sigurne push obavijesti: od teorije do prakse

Hej Habr!

Danas ću govoriti o onome što moji kolege i ja radimo već nekoliko mjeseci: push obavijesti za mobilne instant messengere. Kao što sam već rekao, u našoj aplikaciji glavni naglasak je na sigurnosti. Stoga smo saznali imaju li push obavijesti “slabe točke” i, ako imaju, kako ih možemo izravnati kako bismo ovu korisnu opciju dodali našoj usluzi.

Objavljujem prijevod našeg članci iz Medium uz neke male dodatke od mene. Sadrži rezultate “istrage” i priču o tome kako je problem riješen.

Pregledavamo materijal

U klasičnom modelu, push obavijesti čine glasnike ranjivima na MITM (Man-in-the-middle) napade. Na primjer, s Googleom, Microsoftom i starom verzijom iMessage-a, aplikacija šalje ključeve enkripcije Appleovim poslužiteljima – na poslužitelju se autentificiraju korisnici, a zaglavlje poruke (ili njezin sadržaj) se dekriptira.

Sigurne push obavijesti: od teorije do prakse

Kao rezultat toga, postoji mogućnost čitanja korespondencije dobivanjem pristupa poslužitelju push obavijesti. To znači da je bilo kakva enkripcija dopisivanja beskorisna: push obavijesti će i dalje ostaviti mogućnost da ih pročitaju treće strane. Autori članka detaljnije su raspravljali o ovoj mogućnosti. “Ispravno šifriraj” na Xaker.ru, posvećen metodama šifriranja poruka.

Ako mislite da su poslužitelji Applea i Googlea 100% sigurni od curenja korisničkih ključeva za šifriranje, uzmite u obzir činjenicu da im njihovi zaposlenici imaju pristup. I zaposlenici su ljudi.
Unatoč svim ranjivostima push obavijesti, mnogi "sigurni" instant messengeri, uključujući Signal i Telegram, koriste ih. U suprotnom, korisnici će morati “ručno” pratiti nove poruke stalnim prijavljivanjem u aplikaciju. Što je vrlo nezgodno, a konkurentski će glasnici dobiti prednost.

Paranoja i zdrav razum


U našem projektu pomno smo se pozabavili ovim pitanjem prije nekoliko mjeseci. Morali smo dodati opciju push obavijesti kako bismo bili konkurentni. Ali u isto vrijeme nemojte otvarati sigurnosnu rupu jer će svako curenje podataka potkopati povjerenje u projekt.

No, već sada imamo važnu prednost: naš je messenger decentraliziran (podaci se pohranjuju na blockchain), a zaposlenici nemaju pristup računima. Samo korisnici imaju ključeve za šifriranje, a javni ključevi sugovornika dostupni su na blockchainu radi zaštite od MITM napada.

U prvoj verziji push obavijesti odlučili smo igrati na sigurno što je više moguće i uopće ne prenositi tekst poruke. Push usluga nije primila tekst poruke od čvora, već samo signal o činjenici njenog primitka. Stoga je korisnik vidio obavijest "Nova poruka je stigla". Bilo ga je moguće pročitati samo u messengeru.

Sigurne push obavijesti: od teorije do prakse
Kako je radilo: video.

Nakon toga saznali smo da najnovija Appleova verzija obavijesti ima nove sigurnosne značajke. Oni pušten UNNotificationServiceExtension, koji programerima omogućuje slanje potpuno šifriranih podataka obavijesti putem APNS-a. Aplikacija na uređaju krajnjeg korisnika zatim izvodi dešifriranje (ili preuzima dodatne podatke) i prikazuje obavijest. Uzeli smo ga kao temelj za drugu verziju push obavijesti.

Sada smo razvili drugu verziju push obavijesti za iOS, koja vam omogućuje prikaz teksta poruke bez sigurnosnog rizika. U novom konceptu logika izgleda ovako:

  • Push usluga šalje push obavijest s brojem transakcije (kriptirana poruka može biti vrlo velika, a veličina obavijesti je vrlo ograničena)
  • Kada uređaj primi obavijest, pokreće našu NotificationServiceExtension - mikroaplikaciju koja od čvora traži transakciju prema ID-u, dekriptira je pomoću spremljene zaporke i šalje novu obavijest sustavu. Zaporka je pohranjena u sigurnoj pohrani.
  • Sustav prikazuje obavijest s dekriptiranom porukom ili prijevodom.
  • Ključevi ne idu nikamo, baš kao ni obična tekstualna poruka. Push usluga nema načina za dešifriranje poruke.

Sigurne push obavijesti: od teorije do prakse

Prihvatili smo ovu verziju kao radnu i implementirali je u najnovijem ažuriranju iOS aplikacije.
Oni koje zanima tehnička strana mogu pogledati izvorni kod: github.com/Adamant-im/adamant-notificationService.

Izvor: www.habr.com

Dodajte komentar