Xavfsiz push-bildirishnomalar: nazariyadan amaliyotga

Hey Xabr!

Bugun men hamkasblarim va men bir necha oydan beri nima qilayotganimiz haqida gaplashaman: mobil messenjerlar uchun push-bildirishnomalar. Yuqorida aytganimdek, bizning ilovamizda asosiy e'tibor xavfsizlikka qaratilgan. Shunday qilib, biz push-bildirishnomalarning "zaif tomonlari" bor-yo'qligini va agar shunday bo'lsa, ushbu foydali variantni xizmatimizga qo'shish uchun ularni qanday tekislashimiz mumkinligini bilib oldik.

Bizning tarjimasini nashr etyapman mediadan maqolalar o'zimdan kichik qo'shimchalar bilan. Unda "tergov" natijalari va muammo qanday hal qilinganligi haqidagi hikoya mavjud.

Biz materialni tekshiramiz

Klassik modelda push-bildirishnomalar messenjerlarni MITM (Man-in-the-middle) hujumlariga qarshi himoyasiz qiladi. Masalan, Google, Microsoft va iMessage’ning eski versiyasida ilova Apple serverlariga shifrlash kalitlarini yuboradi – serverda foydalanuvchilar autentifikatsiya qilinadi va xabar sarlavhasi (yoki uning mazmuni) shifrdan chiqariladi.

Xavfsiz push-bildirishnomalar: nazariyadan amaliyotga

Natijada push bildirishnoma serveriga kirish orqali yozishmalarni o'qish imkoniyati mavjud. Bu shuni anglatadiki, yozishmalarning har qanday shifrlanishi foydasiz: push-bildirishnomalar hali ham uchinchi shaxslar tomonidan o'qilishi imkoniyatini qoldiradi. Maqola mualliflari bu imkoniyatni batafsilroq muhokama qilishdi. "To'g'ri shifrlash" Xaker.ru saytida, xabarlarni shifrlash usullariga bag'ishlangan.

Agar siz Apple va Google serverlari foydalanuvchi shifrlash kalitlarining sizib ketishidan 100% xavfsiz deb hisoblasangiz, ularning xodimlari ularga kirish huquqiga ega ekanligini hisobga oling. Va xodimlar odamlardir.
Push-bildirishnomalarning barcha zaifliklariga qaramay, ko'plab "xavfsiz" messenjerlar, shu jumladan Signal va Telegram, ulardan foydalanadi. Aks holda, foydalanuvchilar doimiy ravishda ilovaga kirish orqali yangi xabarlarni "qo'lda" kuzatishlari kerak bo'ladi. Bu juda noqulay va raqobatchi messenjerlar ustunlikka ega bo'lishadi.

Paranoya va sog'lom fikr


Loyihamizda biz bu masalani bir necha oy oldin yaqindan ko'rib chiqdik. Raqobatbardosh bo'lish uchun push-bildirishnomani qo'shishimiz kerak edi. Ammo shu bilan birga, xavfsizlik teshigini ochmang, chunki har qanday ma'lumotlarning sizib chiqishi loyihaga bo'lgan ishonchni pasaytiradi.

Biroq, bizda allaqachon muhim afzallik bor: bizning messenjerimiz markazlashtirilmagan (ma'lumotlar blokcheynda saqlanadi) va xodimlarning akkauntlariga kirish imkoni yo'q. Faqat foydalanuvchilarda shifrlash kalitlari mavjud va MITM hujumlaridan himoya qilish uchun blokcheynda suhbatdoshlarning ochiq kalitlari mavjud.

Push-bildirishnomalarning birinchi versiyasida biz uni iloji boricha xavfsiz o'ynashga va xabar matnini umuman uzatmaslikka qaror qildik. Push xizmati tugundan xabar matnini qabul qilmadi, faqat uni qabul qilish fakti haqidagi signalni oldi. Shuning uchun foydalanuvchi "Yangi xabar keldi" xabarnomasini ko'rdi. Uni faqat messenjerda o'qish mumkin edi.

Xavfsiz push-bildirishnomalar: nazariyadan amaliyotga
Bu qanday ishladi: video.

Shundan so'ng biz Apple-ning bildirishnomalarining so'nggi versiyasida yangi xavfsizlik xususiyatlari borligini bilib oldik. Ular ozod qilindi UNNotificationServiceExtension, bu ishlab chiquvchilarga APNS orqali to'liq shifrlangan bildirishnoma ma'lumotlarini yuborish imkonini beradi. Keyin oxirgi foydalanuvchi qurilmasidagi ilova shifrni ochishni amalga oshiradi (yoki qo'shimcha ma'lumotlarni yuklab oladi) va bildirishnomani ko'rsatadi. Biz buni push-bildirishnomalarning ikkinchi versiyasi uchun asos qilib oldik.

Biz hozirda iOS uchun push-bildirishnomalarning ikkinchi versiyasini ishlab chiqdik, bu xabar matnini xavfsizlik xavfisiz ko'rsatish imkonini beradi. Yangi kontseptsiyada mantiq quyidagicha ko'rinadi:

  • Push xizmati tranzaksiya raqami bilan push-bildirishnoma yuboradi (shifrlangan xabar juda katta bo'lishi mumkin va bildirishnomalar hajmi juda cheklangan)
  • Qurilma bildirishnoma olganida, u bizning NotificationServiceExtension-ni ishga tushiradi - identifikator bo'yicha tugundan tranzaktsiyani so'raydi, saqlangan parol iborasi yordamida uning shifrini ochadi va tizimga yangi bildirishnoma yuboradi. Parol iborasi xavfsiz omborda saqlanadi.
  • Tizim shifrlangan xabar yoki tarjima bilan bildirishnomani ko'rsatadi.
  • Kalitlar hech qaerga ketmaydi, xuddi oddiy matnli xabar kabi. Push xizmatida xabarning shifrini ochishning imkoni yo'q.

Xavfsiz push-bildirishnomalar: nazariyadan amaliyotga

Biz ushbu versiyani ish sifatida qabul qildik va uni iOS ilovasining so'nggi yangilanishida amalga oshirdik.
Texnik tomonga qiziquvchilar manba kodini ko'rishlari mumkin: github.com/Adamant-im/adamant-notificationService.

Manba: www.habr.com

a Izoh qo'shish