Sigurne push obavijesti: od teorije do prakse

Hej Habr!

Danas ću govoriti o tome šta ja i moje kolege 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 da li push obavijesti imaju „slabe tačke“ i, ako da, kako ih možemo izravnati kako bismo dodali ovu korisnu opciju našoj usluzi.

Objavljujem prevod našeg članci iz Medium sa nekim malim dodacima od mene. Sadrži rezultate “istrage” i priču o tome kako je problem riješen.

Ispitujemo materijal

U klasičnom modelu, push notifikacije čine glasnike ranjivim na MITM (Man-in-the-middle) napade. Na primjer, s Googleom, Microsoftom i starom verzijom iMessagea, aplikacija šalje ključeve za šifriranje Apple serverima - na serveru se autentifikuju korisnici i dešifruje se zaglavlje poruke (ili njen sadržaj).

Sigurne push obavijesti: od teorije do prakse

Kao rezultat toga, postoji šansa za čitanje prepiske tako što ćete dobiti pristup serveru push obavijesti. To znači da je svako šifriranje korespondencije beskorisno: push obavijesti će i dalje ostaviti mogućnost da ih treće strane čitaju. Autori članka su detaljnije raspravljali o ovoj mogućnosti. “Šifriraj ispravno” na Xaker.ru, posvećen metodama šifriranja poruka.

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

Paranoja i zdrav razum


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

Međutim, već imamo važnu prednost: naš glasnik je decentraliziran (podaci se pohranjuju na blockchain), a zaposleni nemaju pristup računima. Samo korisnici imaju ključeve za šifriranje, a javni ključevi sagovornika dostupni su na blockchainu radi zaštite od MITM napada.

U prvoj verziji push notifikacija odlučili smo da budemo sigurni koliko god je to moguće i da uopće ne prenosimo tekst poruke. Push servis nije primio tekst poruke od čvora, već samo signal o činjenici njenog prijema. Stoga je korisnik vidio obavijest „Nova poruka je stigla“. To je bilo moguće pročitati samo u messengeru.

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

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

Sada smo razvili drugu verziju push notifikacija za iOS, koja vam omogućava da prikažete tekst poruke bez sigurnosnog rizika. U novom konceptu, logika izgleda ovako:

  • Push usluga šalje push obavijest s brojem transakcije (šifrirana 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 traži transakciju od čvora po ID-u, dešifruje je koristeći sačuvanu lozinku i šalje novo obavještenje sistemu. Pristupna fraza je pohranjena u sigurnom skladištu.
  • Sistem prikazuje obaveštenje sa dešifrovanom porukom ili prevodom.
  • Ključevi ne idu nikuda, baš kao i obična tekstualna poruka. Push usluga nema način da dešifruje poruku.

Sigurne push obavijesti: od teorije do prakse

Prihvatili smo ovu verziju kao radnu i implementirali je u najnovije ažuriranje iOS aplikacije.
Zainteresovani za tehničku stranu mogu pogledati izvorni kod: github.com/Adamant-im/adamant-notificationService.

izvor: www.habr.com

Dodajte komentar