Biztonságos push-értesítések: a gyakorlatba átültetve

Helló, Habr!

Ma arról mesélek, mivel foglalkozunk a kollégáimmal már néhány hónapja: a mobil üzenetküldők push értesítéseivel. Ahogy már említettem, a mi alkalmazásunkban a biztonságra helyezzük a hangsúlyt. Ezért igyekeztünk kideríteni, vannak-e a push értesítéseknek "gyenge pontjai", és ha igen, hogyan tudjuk ezeket kiiktatni, hogy ezt a hasznos funkciót bevezethessük a szolgáltatásunkba.

Megosztom a Mediumon megjelent cikkünk fordítását néhány kiegészítéssel. Ebben a "nyomozás" eredményeit és azt mutatjuk be, hogyan oldottuk meg a problémát. Kutatjuk a témát

A klasszikus modellekben a push értesítések sebezhetővé teszik az üzenetküldőket a MITM (Man-in-the-middle, "Ember a középen") támadásokkal szemben. Például a Google, a Microsoft és a régi iMessage verziója esetén az alkalmazás titkosítási kulcsokat küld az Apple szervereire — a szerveren történik a felhasználók azonosítása és az üzenetfejléc (vagy annak tartalma) dekódolása.

Ennek eredményeként lehetőség nyílik a beszélgetések elolvasására, ha hozzáférésünk van a push értesítések szerveréhez. Ez azt jelenti, hogy bármilyen üzenet titkosítása hasztalan, mert a push értesítések így is lehetőséget adnak harmadik felek számára az olvasásra. Erről bővebben írnak a cikk szerzői

Biztonságos push-értesítések: a gyakorlatba átültetve

"Titkosítás okosan" a Xaker.ru oldalon, amely az üzenetek titkosítási módszereinek szentelt. Ha úgy gondolja, hogy az Apple és a Google szerverei 100%-osan megakadályozzák a felhasználói titkosítási kulcsok szivárgását, gondoljon arra, hogy ezekhez a munkatársaik hozzáférnek. A munkatársak pedig emberek.

Minden push értesítés sebezhetősége ellenére sok "biztonságos" üzenetküldő, beleértve a Signal-t és a Telegram-ot, használja őket. Mert különben a felhasználóknak "kézi" módszerrel kellene figyelniük az új üzeneteket, folyamatosan belépve az alkalmazásba. Ami meglehetősen kényelmetlen, és a versenytárs üzenetküldők előnyre tesznek szert.
Paranoia és józan ész

A mi projektünkben hónapokkal ezelőtt komolyan foglalkoztunk ezzel a kérdéssel. Be kellett vezetnünk a push értesítéseket, hogy versenyképesek legyünk. De nem akartunk lyukat ütni a biztonságon, mert bármilyen adatvesztés aláásná a bizalmat a projekttel kapcsolatban.


Ellenben már van egy fontos előnyünk: a mi üzenetküldőnk decentralizált (az adatok blokkláncon tárolódnak), és a munkatársak nem férnek hozzá a fiókokhoz. A titkosítási kulcsok csak a felhasználóknál vannak, míg a beszélgetőpartnerek nyilvános kulcsai elérhetőek a blokkláncon, hogy megvédjék őket a MITM támadásoktól.

Впрочем, у нас уже есть важное преимущество: наш мессенджер децентрализованный (данные хранятся в блокчейне), при этом сотрудники не имеют доступа к учетным записям. Ключи шифрования есть только у пользователей, а публичные ключи собеседников доступны в блокчейне, чтобы защитить от MITM-атак.

Az első verzióban a push értesítéseinknél maximálisan óvatosak akartunk lenni, ezért nem küldtük át az üzenet szövegét. A push szolgáltatás csak a fogadott üzenet tényéről kapott jelet a csomóponttól. Ezért a felhasználó azt látta, hogy "Új üzenet érkezett". Az üzenetet csak a messenger alkalmazásban lehetett elolvasni.

Biztonságos push-értesítések: a gyakorlatba átültetve
Így működött: videó.

Ezt követően megtudtuk, hogy az Apple legújabb értesítési verziójában új védelmi elemek találhatóak. Ezek kiadták UNNotificationServiceExtension, amely lehetővé teszi a fejlesztők számára, hogy teljesen titkosított értesítési adatokat küldjenek az APNS-en keresztül. Ezt követően a végfelhasználó eszköze dekódolja (vagy további adatokat töltenek le) és megjeleníti az értesítést. Ezt alapként vettük a push értesítések második verziójához.

Jelenleg kifejlesztettük az iOS push értesítések második verzióját, amely lehetővé teszi az üzenet szövegének megjelenítését anélkül, hogy a biztonságot veszélyeztetné. Az új koncepcióban a logika így néz ki:

  • A push szolgáltatás push értesítést küld egy tranzakciós számmal (a titkosított üzenet nagyon nagy lehet, míg az értesítések mérete erősen korlátozott)
  • Az eszköz, amikor megkapja az értesítést, elindítja a NotificationServiceExtension-t — egy mikroszoftvert, amely az id alapján lekéri a tranzakciót a csomóponttól, dekódolja a megőrzött jelszóval, és egy új értesítést küld a rendszernek. A jelszó biztonságos tárolóban kerül megőrzésre.
  • A rendszer megjeleníti az értesítést a dekódolt üzenettel vagy annak fordításával.
  • A kulcsok nem távoznak sehova, ahogyan a sima szövegű üzenet sem. A push szolgáltatásnak nincs lehetősége az üzenetet dekódolni.

Biztonságos push-értesítések: a gyakorlatba átültetve

Ezt a verziót munkára vettük, és megvalósítottuk az iOS alkalmazás legutóbbi frissítésében.
A technikai részletek iránt érdeklődők a forráskódot itt nézhetik meg: github.com/Adamant-im/adamant-notificationService.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster