Salut, Habr!
Astăzi vreau să vă vorbesc despre ceea ce eu și colegii mei am lucrat în ultimele câteva luni: notificările push pentru aplicațiile de mesagerie mobilă. Așa cum am menționat anterior, aplicația noastră pune accent pe securitate. De aceea am investigat dacă notificările push au „puncte slabe” și, dacă da, cum putem să le neutralizăm pentru a adăuga această opțiune utilă în serviciul nostru.
Publicăm traducerea articolului nostru cu câteva adăugiri din partea mea. În el sunt prezentate concluziile „investigației” și descrierea modului în care am rezolvat problema.
Investigăm materia
În modelul clasic, notificările push fac aplicațiile de mesagerie vulnerabile la atacuri MITM (Man-in-the-middle, „Omul din mijloc”). De exemplu, la Google, Microsoft și în vechea versiune a iMessage, aplicația trimite cheile de criptare către serverele Apple — pe server se face autentificarea utilizatorilor și decriptarea antetului mesajului (sau a conținutului acestuia).

Asta înseamnă că există șansa de a citi conversațiile obținând acces la serverul notificărilor push. Și asta înseamnă că orice criptare a conversațiilor este inutilă: notificările push vor lăsa totuși posibilitatea de a fi citite de terțe părți. Detalii despre această posibilitate au fost discutate de autorii articolului pe Xaker.ru, dedicat modalităților de criptare a mesajelor.
Dacă vi se pare că serverele Apple și Google nu vor permite 100% scăpări ale cheilor de criptare ale utilizatorilor, gândiți-vă că angajații lor au acces la acestea. Iar angajații sunt tot oameni.
În ciuda tuturor vulnerabilităților notificărilor push, multe aplicații de mesagerie „sigurante”, inclusiv Signal și Telegram, le folosesc. Altfel, utilizatorii ar trebui să „verifice manual” mesaje noi, accesând constant aplicația. Ceea ce este destul de incomod și aplicațiile de mesagerie concurente ar obține un avantaj.
Paranoia și bunul simț
În proiectul nostru, ne-am ocupat serios de această problemă acum câteva luni. Era necesar să implementăm opțiunea de notificări push pentru a ne menține competitivitatea. Dar în același timp, nu trebuia să lăsăm o breșă în securitate, deoarece orice scurgere de date ar submina încrederea în proiect.
Cu toate acestea, avem deja un avantaj important: aplicația noastră de mesagerie este descentralizată (datele sunt stocate în blockchain), iar angajații nu au acces la conturi. Cheile de criptare sunt doar la utilizatori, iar cheile publice ale interlocutorilor sunt disponibile în blockchain pentru a proteja împotriva atacurilor MITM.
În prima versiune a notificărilor push, am decis să fim foarte prudenți și să nu transmitem deloc textul mesajului. Serviciul de notificări primea de la nod nu textul mesajului, ci doar un semnal că acesta a fost primit. Prin urmare, utilizatorul vedea notificarea „A sosit un mesaj nou”. Putea fi citit doar în aplicația de mesagerie.

.
După aceea, am aflat că în ultima versiune a notificărilor de la Apple există noi elemente de protecție. Acestea UNNotificationServiceExtension, care permite dezvoltatorilor să trimită date complet criptate ale notificărilor prin APNS. Apoi, aplicația de pe dispozitivul utilizatorului finalizează decriptarea (sau descarcă date suplimentare) și afișează notificarea. Aceasta a fost baza pentru a doua versiune a notificărilor push.
Acum am dezvoltat a doua versiune a notificărilor push pentru iOS, care permite afișarea textului mesajului fără riscuri pentru securitate. În noua concepție, logica arată astfel:
- Serviciul de notificare trimite o notificare push cu numărul de tranzacție (mesajul criptat poate fi foarte mare, iar dimensiunea notificărilor este foarte limitată)
- La primirea notificării, dispozitivul lansează NotificationServiceExtension — o microaplicație care solicită nodului tranzacția după id, decriptează cu ajutorul frazei de acces stocate și oferă sistemului o nouă notificare. Fraza de acces este stocată într-un depozit sigur.
- Sistemul afișează o notificare cu mesajul decriptat sau traducerea.
- Cheile nu părăsesc nicaieri, la fel și mesajul în text simplu. Serviciul de notificări nu are posibilitatea de a decripta mesajul.

Această versiune a fost acceptată ca fiind funcțională și implementată în ultima actualizare a aplicației pentru iOS.
Cei interesați de partea tehnică pot viziona codul sursă: .
Sursa: habr.com
