Č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
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).
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.
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.
Potom sme sa dozvedeli, že najnovšia verzia upozornení Apple má nové bezpečnostné funkcie. Oni
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.
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:
Zdroj: hab.com