Notificări push sigure: de la teorie la practică

Hei Habr!

Astăzi voi vorbi despre ceea ce facem eu și colegii mei de câteva luni: notificări push pentru mesageria instantanee mobile. După cum am spus deja, în aplicația noastră accentul principal este pus pe securitate. Prin urmare, am aflat dacă notificările push au „puncte slabe” și, dacă da, cum le putem nivela pentru a adăuga această opțiune utilă serviciului nostru.

Public o traducere a noastră articole din Medium cu câteva mici completări din partea mea. Conține rezultatele „investigației” și o poveste despre cum a fost rezolvată problema.

Examinăm materialul

În modelul clasic, notificările push fac mesagerii vulnerabili la atacurile MITM (Man-in-the-middle). De exemplu, cu Google, Microsoft și versiunea veche a iMessage, aplicația trimite chei de criptare către serverele Apple - pe server, utilizatorii sunt autentificați și antetul mesajului (sau conținutul acestuia) este decriptat.

Notificări push sigure: de la teorie la practică

Ca urmare, există șansa de a citi corespondența prin obținerea accesului la serverul de notificare push. Aceasta înseamnă că orice criptare a corespondenței este inutilă: notificările push vor lăsa în continuare posibilitatea de a fi citite de terți. Autorii articolului au discutat mai detaliat această posibilitate. „Criptați corect” pe Xaker.ru, dedicat metodelor de criptare a mesajelor.

Dacă credeți că serverele Apple și Google sunt 100% sigure împotriva scurgerii cheilor de criptare ale utilizatorilor, luați în considerare faptul că angajații lor au acces la ele. Și angajații sunt oameni.
În ciuda tuturor vulnerabilităților notificărilor push, multe mesagerie instant „securizate”, inclusiv Signal și Telegram, le folosesc. În caz contrar, utilizatorii vor trebui să monitorizeze „manual” mesajele noi, conectându-se constant la aplicație. Ceea ce este foarte incomod, iar mesagerii concurenți vor obține un avantaj.

Paranoia și bunul simț


În proiectul nostru, am abordat cu atenție această problemă în urmă cu câteva luni. Trebuia să adăugăm o opțiune de notificare push pentru a fi competitivi. Dar, în același timp, nu deschideți o gaură de securitate, deoarece orice scurgere de date va submina încrederea în proiect.

Cu toate acestea, avem deja un avantaj important: messengerul nostru este descentralizat (datele sunt stocate pe blockchain), iar angajații nu au acces la conturi. Doar utilizatorii au chei de criptare, iar cheile publice ale interlocutorilor sunt disponibile pe blockchain pentru a se proteja împotriva atacurilor MITM.

În prima versiune a notificărilor push, am decis să jucăm în siguranță cât mai mult posibil și să nu transmitem deloc textul mesajului. Serviciul push nu a primit textul mesajului de la nod, ci doar un semnal despre faptul primirii acestuia. Prin urmare, utilizatorul a văzut notificarea „Mesaj nou a sosit”. Era posibil să-l citească doar în messenger.

Notificări push sigure: de la teorie la practică
Cum a funcționat: video.

După aceea, am aflat că cea mai recentă versiune a notificărilor Apple are noi funcții de securitate. ei eliberată UNNotificationServiceExtension, care permite dezvoltatorilor să trimită date de notificare complet criptate prin APNS. Aplicația de pe dispozitivul utilizatorului final efectuează apoi decriptarea (sau descarcă date suplimentare) și afișează o notificare. L-am luat ca bază pentru cea de-a doua versiune a notificărilor push.

Am dezvoltat acum cea de-a doua versiune a notificărilor push pentru iOS, care vă permite să afișați textul mesajului fără un risc de securitate. În noul concept, logica arată astfel:

  • Serviciul push trimite o notificare push cu numărul tranzacției (mesajul criptat poate fi foarte mare, iar dimensiunea notificărilor este foarte limitată)
  • Când dispozitivul primește o notificare, lansează NotificationServiceExtension - o microaplicație care solicită o tranzacție de la nod prin ID, o decriptează folosind fraza de acces salvată și trimite o nouă notificare către sistem. Fraza de acces este stocată într-un spațiu de stocare securizat.
  • Sistemul afișează o notificare cu un mesaj decriptat sau o traducere.
  • Cheile nu merg nicăieri, la fel ca mesajul text simplu. Serviciul push nu are nicio modalitate de a decripta mesajul.

Notificări push sigure: de la teorie la practică

Am acceptat această versiune ca funcțională și am implementat-o ​​în cea mai recentă actualizare a aplicației iOS.
Cei interesați de partea tehnică pot vizualiza codul sursă: github.com/Adamant-im/adamant-notificationService.

Sursa: www.habr.com

Adauga un comentariu