Tere, Habr!
TÀna rÀÀgin sellest, millega ma kolleegidega juba mitu kuud rahmeldan: mobiilimessage'ide push-teadetest. Nagu ma juba mainisin, on meie rakenduses peamine fookus turvalisusel. SeetÔttu uurisime, kas push-teadetel on "nÔrgad kohad" ja kui on, siis kuidas saame neid ennetada, et lisada see kasulik vÔimalus meie teenusesse.
Avaldan tÔlke meie mÔningate enda lisandustega. Selles on kokkuvÔtted "uurimisest" ja jutt sellest, kuidas probleem lahendada.
Uurime teemat
Klassikalises mudelis muudavad push-teated sĂ”numiteenuseid haavatavaks MITM (Man-in-the-middle) rĂŒnnakute suhtes. NĂ€iteks Google'il, Microsoftil ja vanas iMessage'i versioonis saadab rakendus krĂŒpteerimise vĂ”tmeid Apple'i serveritesse â serveris toimub kasutajate autentimine ja sĂ”numi pealkirja (vĂ”i sisu) dekrĂŒpteerimine.

LĂ”puks on vĂ”imalik lugeda vestlusi, kui juurdepÀÀs push-teateteenuse serverile on saavutatud. See tĂ€hendab, et kĂ”ik sĂ”numite krĂŒpteeringud on kasutud: push-teated jĂ€tavad ikkagi vĂ”imaluse kolmandate isikute loetavusele. Selle vĂ”imaluse ĂŒle arutlevad artikli autorid Xaker.ru-s, kus kĂ€sitletakse sĂ”numite krĂŒpteerimise viise.
Kui teile tundub, et Apple'i ja Google'i serverid ei lase 100% kasutajate krĂŒpteerimisvĂ”tmeid lekida, mĂ”elge sellele, et nendele pÀÀsevad ligi nende töötajad. Ja töötajad on inimesed.
KÔigist push-teadete haavatavustest hoolimata kasutavad paljud "turvalised" messengerid, sealhulgas Signal ja Telegram, neid. Muud juhul tuleks kasutajatel "kÀsitsi" uusi sÔnumeid jÀlgida, pidevalt rakendusse sisenedes. Mis on vÀga ebamugav, ja konkurentsivÔimelised messengerid saavad sellest eelise.
Paranoia ja terve mÔistus
Meie projektis hakkasime sellele kĂŒsimusele tĂ”siselt lĂ€henema mitu kuud tagasi. Meil oli vaja luua push-teate vĂ”imalus, et olla konkurentsivĂ”imelised. Kuid sellega ei tohtinud me turvaauku lasta, sest iga andmeleke kaotab usaldusvÀÀrsuse projekti suhtes.
Kuid meil on juba oluline eelis: meie messenger on detsentraliseeritud (andmed salvestatakse plokiahelas), mille tĂ”ttu töötajatel ei ole juurdepÀÀsu kontodele. KrĂŒpteerimise vĂ”tmed on ainult kasutajatel ning vestluspartnerite avalikud vĂ”tmed on saadaval plokiahelas, et kaitsta MITM-rĂŒnnakute eest.
Esimese versiooni push'ide puhul otsustasime maksimaalselt ettevaatusabinÔusid rakendada ja mitte edastada sÔnumi tekstisisu. Push-teenus sai sÔlmpunktist mitte sÔnumi teksti, vaid ainult signaali selle vastuvÔtmise kohta. SeetÔttu nÀgi kasutaja teavitust "Uus sÔnum on saabunud". Selle lugemine oli vÔimalik ainult messengeris.

.
PĂ€rast seda saime teada, et Apple'i viimases versioonis on uusi kaitseelemente. Need UNNotificationServiceExtension, mis vĂ”imaldab arendajatel saata tĂ€ielikult krĂŒpteeritud teateid APNS-i kaudu. SeejĂ€rel dekrĂŒpteerib rakendus lĂ”ppkasutaja seadmes (vĂ”i laadib tĂ€iendavaid andmeid) ja kuvab teavituse. Seda kasutasime teise versiooni push'ide aluseks.
Praegu oleme arendanud teise versiooni push-teavitustest iOS-ile, mis vÔimaldab kuvada sÔnumi teksti ilma turvariskideta. Uue kontseptsiooniga nÀeb loogika vÀlja jÀrgmiselt:
- Push-teenus saadab push-teate tehingu numbriga (krĂŒpteeritud sĂ”num vĂ”ib olla vĂ€ga suur ja teavituste suurus on tugevalt piiratud)
- Seade kĂ€ivitab teavituse saamisel meie NotificationServiceExtension'i â mikrorakenduse, mis kĂŒsib sĂ”lmpunktist tehingu ID jĂ€rgi, dekrĂŒpteerib salvestatud paroolifaasi abil ja edastab sĂŒsteemile uue teavituse. Paroolifaas hoitakse turvalises hoiustamises.
- SĂŒsteem kuvab teavituse dekrĂŒpteeritud sĂ”numiga vĂ”i tĂ”lkega.
- Kuidas iganes, vĂ”tmed ei lahku kuhugi, nagu ka plaintext sĂ”num. Push-teenusel ei ole vĂ”imalust sĂ”numit dekrĂŒpteerida.

Selle versiooni vÔtsime kasutusele ja rakendasime iOS-i viimases uuenduses.
Tehnika huvilised saavad vaadata allika koodi: .
Allikas: habr.com
