Droši push paziņojumi: no teorijas līdz praksei

Čau Habr!

Šodien es runāšu par to, ko es un mani kolēģi darām jau vairākus mēnešus: push paziņojumi mobilajiem tūlītējajiem ziņojumiem. Kā jau teicu, mūsu pieteikumā galvenais uzsvars tiek likts uz drošību. Tāpēc mēs noskaidrojām, vai push paziņojumiem ir “vājās vietas” un, ja ir, kā mēs varam tos izlīdzināt, lai mūsu pakalpojumam pievienotu šo noderīgo iespēju.

Es publicēju mūsu tulkojumu raksti no Medium ar dažiem nelieliem papildinājumiem no sevis. Tajā ir “izmeklēšanas” rezultāti un stāsts par to, kā problēma tika atrisināta.

Mēs pārbaudām materiālu

Klasiskajā modelī push paziņojumi padara kurjerus neaizsargātus pret MITM (cilvēks vidū) uzbrukumiem. Piemēram, izmantojot Google, Microsoft un veco iMessage versiju, lietojumprogramma nosūta šifrēšanas atslēgas uz Apple serveriem – serverī tiek autentificēti lietotāji un atšifrēta ziņojuma galvene (vai tās saturs).

Droši push paziņojumi: no teorijas līdz praksei

Tā rezultātā ir iespēja lasīt korespondenci, iegūstot piekļuvi push paziņojumu serverim. Tas nozīmē, ka jebkāda korespondences šifrēšana ir bezjēdzīga: push paziņojumi joprojām atstās iespēju tos izlasīt trešajām pusēm. Raksta autori šo iespēju apsprieda sīkāk. “Šifrēt pareizi” vietnē Xaker.ru, kas veltīta ziņojumu šifrēšanas metodēm.

Ja uzskatāt, ka Apple un Google serveri ir 100% droši pret lietotāja šifrēšanas atslēgu noplūdi, ņemiet vērā faktu, ka viņu darbiniekiem ir piekļuve tiem. Un darbinieki ir cilvēki.
Neskatoties uz visām push paziņojumu ievainojamībām, daudzi “droši” tūlītējie kurjeri, tostarp signāls un telegramma, tos izmanto. Pretējā gadījumā lietotājiem būs “manuāli” jāuzrauga jauni ziņojumi, pastāvīgi piesakoties lietojumprogrammā. Tas ir ļoti neērti, un konkurējošie kurjeri iegūs priekšrocības.

Paranoja un veselais saprāts


Mūsu projektā mēs šo jautājumu rūpīgi aplūkojām pirms vairākiem mēnešiem. Lai mēs būtu konkurētspējīgi, mums bija jāpievieno push paziņojumu opcija. Bet tajā pašā laikā neatveriet drošības caurumu, jo jebkura datu noplūde iedragās pārliecību par projektu.

Tomēr mums jau ir svarīga priekšrocība: mūsu kurjers ir decentralizēts (dati tiek glabāti blokķēdē), un darbiniekiem nav piekļuves kontiem. Šifrēšanas atslēgas ir tikai lietotājiem, un blokķēdē ir pieejamas sarunu partneru publiskās atslēgas, lai aizsargātu pret MITM uzbrukumiem.

Pirmajā push paziņojumu versijā mēs nolēmām, ka tas ir pēc iespējas drošāks un ziņojuma tekstu vispār nepārraida. Pusdienests no mezgla nesaņēma ziņas tekstu, bet tikai signālu par tā saņemšanas faktu. Tāpēc lietotājs redzēja paziņojumu “Ir saņemts jauns ziņojums”. To bija iespējams izlasīt tikai ziņnesī.

Droši push paziņojumi: no teorijas līdz praksei
Kā tas darbojās: video.

Pēc tam uzzinājām, ka Apple jaunākajai paziņojumu versijai ir jauni drošības līdzekļi. Viņi izlaists UNNotificationServiceExtension, kas ļauj izstrādātājiem nosūtīt pilnībā šifrētus paziņojumu datus, izmantojot APNS. Pēc tam lietotne galalietotāja ierīcē veic atšifrēšanu (vai lejupielādē papildu datus) un parāda paziņojumu. Mēs to izmantojām kā pamatu push paziņojumu otrajai versijai.

Tagad esam izstrādājuši otro push paziņojumu versiju operētājsistēmai iOS, kas ļauj parādīt ziņojuma tekstu bez drošības riska. Jaunajā koncepcijā loģika izskatās šādi:

  • Push pakalpojums nosūta push paziņojumu ar darījuma numuru (šifrētais ziņojums var būt ļoti liels, un paziņojumu lielums ir ļoti ierobežots)
  • Kad ierīce saņem paziņojumu, tā palaiž mūsu NotificationServiceExtension — mikrolietojumprogrammu, kas pieprasa darījumu no mezgla pēc ID, atšifrē to, izmantojot saglabāto ieejas frāzi, un nosūta sistēmai jaunu paziņojumu. Ieejas frāze tiek glabāta drošā krātuvē.
  • Sistēma parāda paziņojumu ar atšifrētu ziņojumu vai tulkojumu.
  • Taustiņi nekur nepazūd, tāpat kā vienkārša īsziņa. Puspiegādes pakalpojumam nav iespējas atšifrēt ziņojumu.

Droši push paziņojumi: no teorijas līdz praksei

Mēs pieņēmām šo versiju kā strādājošu un ieviesām to jaunākajā iOS lietojumprogrammas atjauninājumā.
Tie, kurus interesē tehniskā puse, var apskatīt avota kodu: github.com/Adamant-im/adamant-notificationService.

Avots: www.habr.com

Pievieno komentāru