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 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

"Titkosítás okosan" 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.

.
Ezt követően megtudtuk, hogy az Apple legújabb értesítési verziójában új védelmi elemek találhatóak. Ezek 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.

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: .
Forrás: habr.com
