Անվտանգության պարզաբանում

Meari մանկական տեսախցիկի անվտանգության խոցելիությունը․ ինչն է Timmy-ում այլ կերպ

Meari-ի դեպքը ցույց է տալիս, որ նույնիսկ հղկված մուտքի համակարգը բավարար չէ։ Մանկական մոնիտորի անվտանգությունը կախված է համակարգի ճարտարապետությունից, հասանելիության թույլտվություններից և բանալիների կառավարումից։

Galaxus-ը հայտնել է ազատ հասանելի մանկական տեսախցիկների ձայնագրությունների մասին, իսկ The Verge-ը՝ Meari-ի մոտավորապես 1,1 միլիոն տուժած սարքերի մասին։ Ինձ համար հետևությունը հստակ է․ մուտքի համակարգը չի պաշտպանի մանկասենյակը, եթե դրա հետևում գործող հարթակը յուրաքանչյուր սարքի հաղորդագրությունները, պատկերներն ու բանալիները պատշաճ կերպով չի տարանջատում։ Timmy-ն չի լուծում աշխարհում առկա անվտանգության բոլոր խնդիրները։ Սակայն Timmy-ի մեդիայի և զուգակցման համար կարևոր գաղտնիքները չեն պահվում ամպային տեսախցիկների հարթակում։

Ինչն է, ըստ երևույթին, ձախողվել Meari-ի դեպքում

Հանրային զեկույցներում նկարագրվում է այլ ապրանքանիշերով վաճառվող՝ «white-label» հարթակ։ Սպառողին ներկայացվող բազմաթիվ ապրանքանիշեր վաճառել են տեսախցիկներ, որոնք հիմնված էին նույն Meari/CloudEdge ենթակառուցվածքի վրա։ Հենց այդ պատճառով է դեպքը կարևոր․ երբ ընդհանուր հարթակը սխալ է սահմանում հասանելիության թույլտվությունների սահմանները, խնդիրը չի սահմանափակվում մեկ անպաշտպան տեսախցիկով, այլ վտանգի տակ է դնում սարքերի ամբողջ պարկը։

Նկարագրված պատկերը չի սահմանափակվում թույլ լռելյայն գաղտնաբառերով։ Աղբյուրները նշում են MQTT հաղորդագրություններ՝ առանց յուրաքանչյուր սարքի բաժանորդագրությունները պատշաճ վերահսկելու, հանրությանը հասանելի պատկերների URL-ներ, պատկերների թույլ քողարկում, ինչպես նաև անփոփոխ կամ հավելվածից դուրս բերվող բանալիներ։ Սա հարթակի ձախողում է․ ենթակառուցվածքը կարող էր բացահայտել տվյալներ, որոնք երբեք չպետք է հասանելի լինեին մեկ այլ հաշվին։

Ամպային տեսախցիկի ռիսկըTimmy-ի այլընտրանքային ճարտարապետությունը
Սերվերային համակարգը պահում կամ տարածում է պատկեր պարունակող իրադարձությունների տվյալները։Timmy-ն մանկասենյակի պատկերների ամպային արխիվ չունի․ մեդիան իրական ժամանակում փոխանցվում է WebRTC-ով։
Բրոքերը կամ ամպային պահոցի բաքեթը պետք է անթերի վերահսկի յուրաքանչյուր սարքի հասանելիությունը։Firestore-ը փոխանցում է միայն զուգակցման և ազդանշանավորման տվյալներ․ SDP/ICE տվյալները գաղտնագրվում են նախքան այնտեղ գրվելը։
Ստատիկ բանալիները կարող են ազդել ամբողջ սարքախմբի վրա։Յուրաքանչյուր զուգակցման ժամանակ սարքերում ստեղծվում է տվյալ զուգակցման համար առանձին՝ P-256 ECDH-ից ստացված բանալի։
Ռելեով անցնող ուղին կարող է սխալմամբ համարվել մեդիային հասանելիություն։TURN-ը փոխանցում է գաղտնագրված SRTP փաթեթները, բայց չի ստանում մեդիայի բանալիները։

Ինչպես է Timmy-ն ստեղծում գաղտնիքը

Timmy-ի չորս նիշից բաղկացած կոդը դիտավորյալ գաղտնիք չէ։ Ծրագրային կոդում այն պարզապես կապ հաստատելու հանդիպման կետ է․ հավելվածը դրանից ստեղծում է meetingKey հանդիպման բանալի, որպեսզի երկու սարքերն էլ գտնեն Firestore-ում հանրային բանալիների նույն փոխանակումը։ Մասնավոր ECDH բանալիները երբեք չեն լքում սարքերը։

Այնուհետև երկու սարքերն էլ հաշվարկում են նույն P-256 ECDH ընդհանուր գաղտնիքը։ Զուգակցման բանալին ստացվում է տեղում՝ հենց սարքերում։ Երկնիշ SAS արժեքը ստացվում է ընդհանուր գաղտնիքից և ըստ հերթականության դասավորված երկու հանրային բանալիներից։ Եթե որևէ մեկը միջամտի բանալիների փոխանակմանը, սարքերը տարբեր թվեր կցուցադրեն՝ օգտատերերին հուշելով չհաստատել զուգակցումը։

sequenceDiagram
    participant Baby as Baby device
    participant Firestore as Firestore meeting point
    participant Parent as Parent device
    participant Turn as TURN relay

    Baby->>Baby: Generate P-256 ECDH keypair
    Parent->>Parent: Generate P-256 ECDH keypair
    Baby->>Firestore: Write public key only under meetingKey
    Parent->>Firestore: Write public key only under meetingKey
    Firestore-->>Baby: Parent public key
    Firestore-->>Parent: Baby public key
    Baby->>Baby: Compute sharedSecret + SAS
    Parent->>Parent: Compute sharedSecret + SAS
    Baby-->>Parent: Humans compare SAS on both screens
    Baby->>Firestore: Write SDP/ICE encrypted with AES-256-GCM
    Parent->>Firestore: Write SDP/ICE encrypted with AES-256-GCM
    Baby-)Turn: WebRTC media as DTLS/SRTP packets
    Turn-)Parent: Relay forwards encrypted packets
    Note over Turn: TURN sees network metadata, not media keys
        

Timmy-ի անվտանգության պարզեցված շղթան․ Firestore-ը ծառայում է որպես հանդիպման կետ և ազդանշանավորման տվյալների փոխանցման միջոց, TURN-ը՝ միայն որպես ռելե, իսկ մեդիան մնում է WebRTC-ով գաղտնագրված։

Ինչու հնարավոր չէ աննկատ դիտել WebRTC մեդիան

WebRTC-ն պարզապես «տեսանյութ ուղարկելը» չէ։ Նախքան մեդիայի փոխանցումը սարքերը կատարում են կապի հաստատման DTLS գործընթաց։ Ձայնի և տեսանյութի SRTP բանալիները ստացվում են այդ պաշտպանված կապից։ Այնուհետև մեդիա փաթեթները գաղտնագրվում են SRTP-ով։ TURN սերվերը կարող է փոխանցել այդ փաթեթները, բայց չի ստանում ձայնը կամ տեսանյութը վերծանելու համար անհրաժեշտ բանալիները։

Timmy-ն դրանից առաջ ևս մեկ պաշտպանական շերտ է ավելացնում․ ազդանշանավորման տվյալները՝ ներառյալ SDP առաջարկները, SDP պատասխանները և ICE թեկնածուները, գաղտնագրվում են AES-256-GCM-ով նախքան Firestore հասնելը։ Firestore-ն օգնում է սարքերին համաձայնեցնել կապը․ այնտեղ չպետք է պահվեն չգաղտնագրված տեսանյութ, ձայն կամ ազդանշանավորման տվյալներ։

Ինչ չի պնդում Timmy-ն

Ոչ մի լուրջ մանկական մոնիտոր չպետք է պնդի, թե լիովին անխոցելի է։ Եթե հեռախոսը կոտրվել կամ վերահսկողության տակ է հայտնվել, ցանկացած հավելված կարող է հարձակման թիրախ դառնալ։ Հավելվածի վնասաբեր հավաքածուն փոխում է ռիսկի մոդելը։ Սերվերի կարգավորումները նույնպես պետք է շարունակեն ճիշտ մնալ։ Timmy-ի ավելի սահմանափակ պնդումը վերաբերում է ճարտարապետությանը․ այն չի ստեղծում մանկասենյակի մեդիայի այնպիսի նյութեր, որոնք սերվերային համակարգը կարող է կարդալ, և անվտանգության համար կարևոր զուգակցման տրամաբանությունը հասանելի է դարձնում հանրային հիմնական նախագծում ստուգելու համար։

Հարցեր, որոնք արժե տալ ցանկացած մանկական տեսախցիկի մասին

  • Մատակարարը պահո՞ւմ է պատկերներ կամ տեսահոլովակներ։
  • Մեդիայի URL-ները մասնավո՞ր են, կարճաժամկե՞տ և յուրաքանչյուր սարքի համար առանձին թույլտվությա՞մբ հասանելի։
  • Բանալիները ստեղծվո՞ւմ են առանձին՝ յուրաքանչյուր սարքի կամ զուգակցման համար, թե՞ անփոփոխ պահվում են հավելվածի ներսում։
  • Բրոքերը կարո՞ղ է փոխանցել միայն այն սարքի հաղորդագրությունները, որն իսկապես ձեզ է պատկանում։
  • Զուգակցման ընթացքում օգտատերը կարո՞ղ է նկատել միջնորդի՝ «man-in-the-middle» հարձակման փորձը։

Կարդալ կոդը

Աղբյուրներ