Bezpečné push notifikácie: od teórie k praxi

Čau Habr!

Dnes budem hovoriť o tom, čo s kolegami robíme už niekoľko mesiacov: push notifikácie pre mobilné instant messenger. Ako som už povedal, v našej aplikácii je hlavný dôraz kladený na bezpečnosť. Preto sme zisťovali, či majú push notifikácie „slabé miesta“ a ak áno, ako ich môžeme vyrovnať, aby sme túto užitočnú možnosť pridali do našej služby.

Zverejňujem preklad nášho články z Medium s niekoľkými malými doplnkami odo mňa. Obsahuje výsledky „vyšetrovania“ a príbeh o tom, ako bol problém vyriešený.

Skúmame materiál

V klasickom modeli push notifikácie robia messengerov zraniteľnými voči MITM (Man-in-the-middle) útokom. Napríklad v prípade Google, Microsoftu a starej verzie iMessage aplikácia odosiela šifrovacie kľúče na servery Apple – na serveri sa overujú používatelia a dešifruje sa hlavička správy (alebo jej obsah).

Bezpečné push notifikácie: od teórie k praxi

Výsledkom je možnosť prečítať si korešpondenciu získaním prístupu k serveru push notifikácií. To znamená, že akékoľvek šifrovanie korešpondencie je zbytočné: push notifikácie stále ponechávajú možnosť čítania tretími stranami. Tejto možnosti sa podrobnejšie venovali autori článku. „Správne šifrovať“ na Xaker.ru, venovanom metódam šifrovania správ.

Ak si myslíte, že servery Apple a Google sú 100% zabezpečené proti úniku používateľských šifrovacích kľúčov, zvážte skutočnosť, že ich zamestnanci k nim majú prístup. A zamestnanci sú ľudia.
Napriek všetkým zraniteľnostiam push notifikácií ich používa mnoho „zabezpečených“ instant messengerov, vrátane Signal a Telegram. V opačnom prípade budú musieť používatelia „ručne“ sledovať nové správy neustálym prihlasovaním sa do aplikácie. Čo je veľmi nepohodlné a konkurenční poslovia získajú výhodu.

Paranoja a zdravý rozum


V našom projekte sme sa tejto problematike podrobne venovali pred niekoľkými mesiacmi. Aby sme boli konkurencieschopní, museli sme pridať možnosť upozornenia push. Zároveň však neotvárajte bezpečnostnú dieru, pretože akýkoľvek únik dát podkope dôveru v projekt.

Už teraz však máme dôležitú výhodu: náš messenger je decentralizovaný (údaje sú uložené na blockchaine) a zamestnanci nemajú prístup k účtom. Šifrovacie kľúče majú iba používatelia a na blockchaine sú k dispozícii verejné kľúče účastníkov na ochranu pred útokmi MITM.

V prvej verzii push notifikácií sme sa rozhodli hrať čo najviac na istotu a text správy vôbec neprenášať. Služba push neprijala z uzla text správy, ale iba signál o skutočnosti jej prijatia. Používateľovi sa preto zobrazilo upozornenie „Prišla nová správa“. Dalo sa to prečítať len v messengeri.

Bezpečné push notifikácie: od teórie k praxi
Ako to fungovalo: video.

Potom sme sa dozvedeli, že najnovšia verzia upozornení Apple má nové bezpečnostné funkcie. Oni prepustený UNNotificationServiceExtension, ktorá umožňuje vývojárom odosielať plne šifrované údaje upozornení cez APNS. Aplikácia na zariadení koncového používateľa potom vykoná dešifrovanie (alebo stiahne ďalšie údaje) a zobrazí upozornenie. Vzali sme to ako základ pre druhú verziu push notifikácií.

Teraz sme vyvinuli druhú verziu push notifikácií pre iOS, ktorá umožňuje zobraziť text správy bez bezpečnostného rizika. V novom koncepte vyzerá logika takto:

  • Služba push odošle upozornenie push s číslom transakcie (šifrovaná správa môže byť veľmi veľká a veľkosť upozornení je veľmi obmedzená)
  • Keď zariadenie dostane upozornenie, spustí našu NotificationServiceExtension – mikroaplikáciu, ktorá požaduje transakciu z uzla podľa id, dešifruje ju pomocou uloženej prístupovej frázy a odošle do systému nové upozornenie. Prístupová fráza je uložená v zabezpečenom úložisku.
  • Systém zobrazí upozornenie s dešifrovanou správou alebo prekladom.
  • Klávesy nikam nejdú, rovnako ako obyčajná textová správa. Služba push nemá žiadny spôsob, ako dešifrovať správu.

Bezpečné push notifikácie: od teórie k praxi

Túto verziu sme prijali ako funkčnú a implementovali ju do najnovšej aktualizácie iOS aplikácie.
Záujemcovia o technickú stránku si môžu pozrieť zdrojový kód: github.com/Adamant-im/adamant-notificationService.

Zdroj: hab.com

Pridať komentár