Bezpečná push notifikace: od teorie k praxi

Čau Habr!

Dnes budu mluvit o tom, co s kolegy děláme již několik měsíců: push notifikace pro mobilní instant messengery. Jak jsem již řekl, v naší aplikaci je hlavní důraz kladen na bezpečnost. Zjistili jsme proto, zda mají push notifikace „slabá místa“, a pokud ano, jak je můžeme vyrovnat, abychom do naší služby přidali tuto užitečnou možnost.

Zveřejňuji překlad našeho články z Medium s několika malými doplňky ode mne. Obsahuje výsledky „šetření“ a příběh o tom, jak byl problém vyřešen.

Zkoumáme materiál

V klasickém modelu činí oznámení push posly zranitelnými vůči útokům MITM (Man-in-the-middle). Například u Googlu, Microsoftu a staré verze iMessage aplikace odesílá šifrovací klíče na servery Apple – na serveru se uživatelé ověřují a hlavička zprávy (nebo její obsah) je dešifrována.

Bezpečná push notifikace: od teorie k praxi

Výsledkem je možnost číst korespondenci získáním přístupu k serveru oznámení push. To znamená, že jakékoli šifrování korespondence je k ničemu: oznámení push stále ponechávají možnost, aby je mohly číst třetí strany. Autoři článku tuto možnost podrobněji rozebrali. „Správně šifrovat“ na Xaker.ru, věnovaném metodám šifrování zpráv.

Pokud si myslíte, že servery Apple a Google jsou 100% zabezpečené proti úniku uživatelských šifrovacích klíčů, zvažte skutečnost, že k nim mají přístup jejich zaměstnanci. A zaměstnanci jsou lidé.
Navzdory všem zranitelnostem push notifikací je používá mnoho „zabezpečených“ instant messengerů, včetně Signal a Telegram. V opačném případě budou uživatelé muset „ručně“ sledovat nové zprávy neustálým přihlašováním do aplikace. Což je velmi nepohodlné a konkurenční poslové získají výhodu.

Paranoia a zdravý rozum


V našem projektu jsme se tímto problémem podrobně zabývali před několika měsíci. Potřebovali jsme přidat možnost oznámení push, abychom byli konkurenceschopní. Zároveň ale neotvírejte bezpečnostní díru, protože jakýkoli únik dat podkope důvěru v projekt.

Již nyní však máme důležitou výhodu: náš messenger je decentralizovaný (data jsou uložena na blockchainu) a zaměstnanci nemají přístup k účtům. Šifrovací klíče mají pouze uživatelé a na blockchainu jsou k dispozici veřejné klíče účastníků pro ochranu před útoky MITM.

V první verzi push notifikací jsme se rozhodli hrát co nejvíce na jistotu a text zprávy vůbec nepřenášet. Služba push nepřijala z uzlu text zprávy, ale pouze signál o skutečnosti jejího přijetí. Proto se uživateli zobrazilo oznámení „Přišla nová zpráva“. Bylo možné si to přečíst pouze v messengeru.

Bezpečná push notifikace: od teorie k praxi
Jak to fungovalo: video.

Poté jsme se dozvěděli, že nejnovější verze oznámení společnosti Apple má nové bezpečnostní funkce. Ony propuštěn UNNotificationServiceExtension, která umožňuje vývojářům odesílat plně šifrovaná data oznámení přes APNS. Aplikace v zařízení koncového uživatele poté provede dešifrování (nebo stáhne další data) a zobrazí upozornění. Vzali jsme to jako základ pro druhou verzi push notifikací.

Nyní jsme vyvinuli druhou verzi push notifikací pro iOS, která umožňuje zobrazit text zprávy bez bezpečnostního rizika. V novém konceptu vypadá logika takto:

  • Služba push odešle oznámení push s číslem transakce (šifrovaná zpráva může být velmi velká a velikost oznámení je velmi omezená)
  • Když zařízení obdrží upozornění, spustí naši NotificationServiceExtension – mikroaplikaci, která požaduje transakci z uzlu podle id, dešifruje ji pomocí uložené přístupové fráze a odešle do systému nové upozornění. Přístupová fráze je uložena v zabezpečeném úložišti.
  • Systém zobrazí upozornění s dešifrovanou zprávou nebo překladem.
  • Klíče nikam nejdou, stejně jako textová zpráva. Služba push nemá žádný způsob, jak zprávu dešifrovat.

Bezpečná push notifikace: od teorie k praxi

Tuto verzi jsme přijali jako funkční a implementovali ji do nejnovější aktualizace aplikace pro iOS.
Zájemci o technickou stránku si mohou prohlédnout zdrojový kód: github.com/Adamant-im/adamant-notificationService.

Zdroj: www.habr.com

Přidat komentář