Njoftimet push të sigurta: nga teoria në praktikë

Përshëndetje, Habr!

Sot do flas për atë që unë dhe kolegët e mi po punojmë prej disa muajsh: njoftimet push për aplikacionet mobile të mesazheve. Siç kam thënë, në aplikacionin tonë rëndësia kryesore është siguria. Prandaj, ne kemi hetuar nëse njoftimet push kanë "pikë të dobët" dhe, nëse po, si mund t'i neutralizojmë ato për të shtuar këtë opsion të dobishëm në shërbimin tonë.

Po publikoj përkthimin e artikullit tonë nga Medium me disa shtesa nga ana ime. Në të, ka përmbledhje të "hetimit" dhe një tregim se si u zgjidh problemi.

Po studiojmë materialin

Në modelin klasik, njoftimet push e bëjnë aplikacionin të cenueshëm ndaj sulmeve MITM (Man-in-the-middle, 'Njeriu në mes'). Për shembull, te Google, Microsoft dhe në versionin e vjetër të iMessage, aplikacioni dërgon çelësat e enkriptimit në serverët e Apple - autentifikimi i përdoruesve dhe dekriptimi i titullit të mesazhit (ose i përmbajtjes) ndodhin në server.

Njoftimet push të sigurta: nga teoria në praktikë

Si rezultat, ekziston mundësia për të lexuar bisedat, duke fituar akses në serverin e njoftimeve push. Kjo do të thotë se çdo enkriptim i bisedave është i kota: njoftimet push megjithatë do të lënë mundësi për të lexuar nga palë të treta. Kjo mundësi është diskutuar më shumë nga autorët e artikullit "Enkripto me mençuri" në Xaker.ru, i dedikuar mënyrave të enkriptimit të mesazheve.

Nëse ju duket se serverët e Apple dhe Google 100% nuk do të lejojnë rrjedhjen e çelësave të enkriptimit të përdoruesve, mendoni për faktin se punonjësit e tyre kanë akses në këto serverë. Dhe punonjësit janë njerëz.
Pavarësisht të gjitha vulnerabiliteteve të njoftimeve push, shumë aplikacione të "sigurta", përfshirë Signal dhe Telegram, i përdorin ato. Në të kundërt, përdoruesit do të duhet ta monitorojnë "me dorë" mesazhet e reja, duke hyrë vazhdimisht në aplikacion. Kjo është jashtëzakonisht e papërshtatshme, dhe konkurentët do të fitojnë avantazh.

Paranoja dhe shëndeti i mirë


Në projektin tonë, ne kemi filluar këtë çështje me ngulm disa muaj më parë. Na duhej të krijonim opsionin e njoftimeve push për të qenë konkurrues. Por në të njëjtën kohë, nuk duhej të krijonim një dobësi në siguri, sepse çdo rrjedhje të dhënash do të minonte besimin në projekt.

Megjithatë, ne kemi një avantazh të rëndësishëm: mesazherët tanë janë të decentralizuar (të dhënat ruhen në blockchain), ndërsa punonjësit nuk kanë akses në llogaritë. Çelësat e enkriptimit i kanë vetëm përdoruesit, ndërsa çelësat publikë të biseduesve janë të disponueshëm në blockchain, për të mbrojtur nga sulmet MITM.

Në versionin e parë të njoftimeve, vendosëm të përshtatemi maksimalisht dhe të mos dërgojmë fare tekstin e mesazhit. Shërbimi i njoftimeve merrte nga nodi jo tekstin e mesazhit, por vetëm sinjalin për faktin e marrjes së tij. Prandaj, përdoruesi e shihte njoftimin "Keni marrë një mesazh të ri". E lexoni atë ishte e mundur vetëm në mesazher.

Njoftimet push të sigurta: nga teoria në praktikë
Si funksiononte: video.

Pas kësaj, mësuam se në versionin e fundit të njoftimeve nga Apple ka elemente të reja mbrojtjeje. Ato publikuar UNNotificationServiceExtension, i cili u lejon zhvilluesve të dërgojnë të dhëna njoftimi të plotë të enkriptuara përmes APNS. Pastaj aplikacioni në pajisjen e përdoruesit përfundimtar kryen dekriptimin (ose ngarkon të dhëna shtesë) dhe shfaq njoftimin. Këtë e morëm si bazë për versionin e dytë të njoftimeve.

Tani kemi zhvilluar versionin e dytë të njoftimeve push për iOS, i cili lejon shfaqjen e tekstit të mesazhit pa rrezikun e sigurisë. Në konceptin e ri, logjika duket kështu:

  • Shërbimi i njoftimeve dërgon një njoftim push me numrin e transaksionit (mesazhi i enkriptuar mund të jetë shumë i madh, ndërsa madhësia e njoftimeve është shumë e kufizuar)
  • Pajisja, kur merr njoftimin, aktivizon NotificationServiceExtension tonë - një mikroaplikacion, i cili kërkon nga nodi transaksionin sipas id-së, dekripton me fjalëkalimin e ruajtur, dhe i jep sistemit një njoftim të ri. Fjalëkalimi ruhet në një depo të sigurt.
  • Sistemi tregon njoftimin me mesazhin e dekriptuar ose përkthimin.
  • Çelësat nuk shkojnë askund, ashtu siç nuk shkon mesazhi i plain text. Shërbimi i njoftimeve nuk ka mundësi të dekriptojë mesazhin.

Njoftimet push të sigurta: nga teoria në praktikë

Këtë version e pranuam si funksional dhe e realizuam në përditësimin më të fundit të aplikacionit për iOS.
Ata që janë të interesuar për anën teknike mund të shikojnë kodin burimor: github.com/Adamant-im/adamant-notificationService.

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster