Անվտանգ ծանուցումներ՝ տեսությունից մինչև պրակտիկա

Հե՜յ Հաբր։

Այսօր ես կխոսեմ այն ​​մասին, թե ինչ ենք անում ես և իմ գործընկերներն արդեն մի քանի ամիս՝ push ծանուցումներ բջջային ակնթարթային մեսենջերների համար: Ինչպես արդեն ասացի, մեր հավելվածում հիմնական շեշտը դրված է անվտանգության վրա։ Հետևաբար, մենք պարզեցինք, թե արդյոք push ծանուցումներն ունեն «թույլ կետեր», և եթե այո, ապա ինչպես կարող ենք դրանք հարթեցնել՝ այս օգտակար տարբերակը մեր ծառայությանն ավելացնելու համար:

Հրատարակում եմ մեր թարգմանությունը հոդվածներ Medium-ից մի քանի փոքրիկ հավելումներով իմ կողմից: Այն պարունակում է «հետաքննության» արդյունքները և պատմություն այն մասին, թե ինչպես է լուծվել խնդիրը։

Մենք ուսումնասիրում ենք նյութը

Դասական մոդելում push ծանուցումները մեսենջերներին խոցելի են դարձնում MITM (Man-in-the-Middle) հարձակումների նկատմամբ: Օրինակ, Google-ի, Microsoft-ի և iMessage-ի հին տարբերակի հետ հավելվածը գաղտնագրման բանալիներ է ուղարկում Apple-ի սերվերներին. սերվերի վրա օգտատերերը վավերացվում են և հաղորդագրության վերնագիրը (կամ դրա բովանդակությունը) վերծանվում է:

Անվտանգ ծանուցումներ՝ տեսությունից մինչև պրակտիկա

Արդյունքում, հնարավորություն կա կարդալ նամակագրությունը՝ մուտք գործելով push ծանուցման սերվեր: Սա նշանակում է, որ նամակագրության ցանկացած կոդավորումն անօգուտ է. push ծանուցումները դեռևս կթողնեն երրորդ անձանց կողմից ընթերցվելու հնարավորությունը: Հոդվածի հեղինակներն ավելի մանրամասն քննարկել են այս հնարավորությունը։ «Ճիշտ կոդավորումը» Xaker.ru-ում՝ նվիրված հաղորդագրությունների կոդավորման մեթոդներին:

Եթե ​​կարծում եք, որ Apple-ի և Google-ի սերվերները 100%-ով ապահով են օգտատերերի գաղտնագրման բանալիների արտահոսքից, հաշվի առեք այն փաստը, որ նրանց աշխատակիցները մուտք ունեն դրանք: Իսկ աշխատողները մարդիկ են։
Չնայած push ծանուցումների բոլոր խոցելիություններին, շատ «անվտանգ» ակնթարթային մեսենջերներ, ներառյալ Signal-ը և Telegram-ը, օգտագործում են դրանք: Հակառակ դեպքում օգտատերերը ստիպված կլինեն «ձեռքով» վերահսկել նոր հաղորդագրությունները՝ անընդհատ մուտք գործելով հավելված: Ինչը շատ անհարմար է, և մրցակից մեսենջերները առավելություն կստանան։

Պարանոյա և ողջախոհություն


Մեր նախագծում մենք այս խնդրին մոտիկից անդրադարձել ենք մի քանի ամիս առաջ: Մրցունակ լինելու համար մենք պետք է ավելացնեինք push ծանուցման տարբերակ: Բայց միևնույն ժամանակ մի բացեք անվտանգության անցք, քանի որ տվյալների ցանկացած արտահոսք կխաթարի նախագծի նկատմամբ վստահությունը:

Այնուամենայնիվ, մենք արդեն ունենք մի կարևոր առավելություն՝ մեր մեսենջերը ապակենտրոնացված է (տվյալները պահվում են բլոկչեյնում), և աշխատակիցները մուտք չունեն հաշիվներ։ Կոդավորման բանալիներ ունեն միայն օգտատերերը, իսկ բլոկչեյնում հասանելի են զրուցակիցների հանրային բանալիներ՝ MITM հարձակումներից պաշտպանվելու համար:

Push notifications-ի առաջին տարբերակում մենք որոշեցինք հնարավորինս անվտանգ խաղալ և ընդհանրապես չփոխանցել հաղորդագրության տեքստը։ Push ծառայությունը հանգույցից չի ստացել հաղորդագրության տեքստը, այլ միայն ազդանշան այն ստանալու փաստի մասին: Հետևաբար, օգտատերը տեսել է «Նոր հաղորդագրություն է եկել» ծանուցումը: Այն հնարավոր էր կարդալ միայն մեսենջերում։

Անվտանգ ծանուցումներ՝ տեսությունից մինչև պրակտիկա
Ինչպես է դա աշխատել՝ տեսանյութ.

Դրանից հետո մենք իմացանք, որ Apple-ի ծանուցումների վերջին տարբերակն ունի անվտանգության նոր հնարավորություններ։ Նրանք ազատ է արձակվել UNNotificationServiceExtension, որը թույլ է տալիս ծրագրավորողներին ուղարկել APNS-ի միջոցով ամբողջությամբ կոդավորված ծանուցման տվյալները: Վերջնական օգտագործողի սարքի հավելվածն այնուհետև կատարում է վերծանում (կամ ներբեռնում է լրացուցիչ տվյալներ) և ցուցադրում ծանուցում: Մենք այն վերցրել ենք որպես push ծանուցումների երկրորդ տարբերակի հիմք։

Այժմ մենք մշակել ենք push ծանուցումների երկրորդ տարբերակը iOS-ի համար, որը թույլ է տալիս ցուցադրել հաղորդագրության տեքստը՝ առանց անվտանգության ռիսկի։ Նոր հայեցակարգում տրամաբանությունն ունի հետևյալ տեսքը.

  • Push ծառայությունը ուղարկում է push ծանուցում գործարքի համարով (գաղտնագրված հաղորդագրությունը կարող է շատ մեծ լինել, իսկ ծանուցումների չափը շատ սահմանափակ է)
  • Երբ սարքը ծանուցում է ստանում, այն գործարկում է մեր NotificationServiceExtension-ը՝ միկրոհավելված, որը գործարք է պահանջում հանգույցից՝ ըստ id-ի, վերծանում է այն՝ օգտագործելով պահպանված անցաբառը և նոր ծանուցում է ուղարկում համակարգին: Անցաբառը պահվում է ապահով պահեստում:
  • Համակարգը ցուցադրում է ծանուցում վերծանված հաղորդագրությամբ կամ թարգմանությամբ:
  • Ստեղները ոչ մի տեղ չեն գնում, ինչպես պարզ տեքստային հաղորդագրությունը: Push ծառայությունը հաղորդագրությունը վերծանելու միջոց չունի:

Անվտանգ ծանուցումներ՝ տեսությունից մինչև պրակտիկա

Մենք ընդունեցինք այս տարբերակը որպես գործող և այն ներդրեցինք iOS հավելվածի վերջին թարմացումում:
Տեխնիկական կողմով հետաքրքրվողները կարող են դիտել սկզբնական կոդը. github.com/Adamant-im/adamant-notificationService.

Source: www.habr.com

Добавить комментарий