Vysvětlení bezpečnosti

Zranitelnost dětských kamer Meari: co Timmy dělá jinak

Případ Meari ukazuje, že propracované přihlášení nestačí. Bezpečnost dětské chůvičky závisí na architektuře, autorizaci a správě klíčů.

Galaxus informoval o volně přístupných záznamech z dětských kamer; The Verge uvedl, že bylo zasaženo přibližně 1,1 milionu zařízení Meari. Pro mě z toho plyne střízlivé ponaučení: přihlášení dětský pokoj neochrání, pokud platforma na pozadí nedokáže pro jednotlivá zařízení důsledně oddělit zprávy, snímky a klíče. Timmy neřeší každý bezpečnostní problém na světě. Jeho klíčová tajemství pro přenos médií a párování však nejsou uložena v cloudové platformě pro kamery.

Co se v případě Meari zřejmě nepovedlo

Veřejné zprávy popisují platformu typu white label. Kamery závislé na stejné infrastruktuře Meari/CloudEdge prodávala řada různých značek. Právě proto je tento incident důležitý: když sdílená platforma nesprávně nastaví hranice oprávnění, nejde o slabinu jediné kamery, ale o ohrožení celé flotily zařízení.

Popsaný problém sahá dál než ke slabým výchozím heslům. Zdroje uvádějí zprávy MQTT bez dostatečného řízení odběru pro jednotlivá zařízení, veřejně dostupné adresy URL obrázků, slabé maskování obrázků a statické klíče nebo klíče, které lze získat z aplikace. Jde o selhání platformy: infrastruktura mohla zpřístupnit data, ke kterým jiný účet nikdy neměl mít přístup.

Riziko cloudových kamerJak to Timmy řeší
Backend ukládá nebo distribuuje události s obrázky.Timmy nemá cloudový archiv snímků z dětského pokoje; média se přenášejí živě přes WebRTC.
Broker nebo úložiště musí dokonale autorizovat každé zařízení.Firestore přenáší pouze data párování a signalizace; SDP/ICE je před zápisem zašifrováno.
Statické klíče mohou ohrozit celou flotilu zařízení.Při každém párování vznikne na zařízeních vlastní klíč odvozený z P-256 ECDH.
Reléová cesta může být zaměněna za přístup k médiím.TURN přeposílá šifrované pakety SRTP, ale nezískává klíče k médiím.

Jak Timmy vytváří tajemství

Čtyřznakový kód Timmy záměrně není tajemstvím. V kódu slouží jen jako bod setkání: aplikace z něj odvodí meetingKey aby obě zařízení našla stejnou výměnu veřejných klíčů ve Firestore. Soukromé klíče ECDH nikdy neopustí zařízení.

Obě zařízení pak vypočítají stejné sdílené tajemství P-256 ECDH. Klíč pro párování se odvodí lokálně. Dvoumístný SAS se odvodí ze sdíleného tajemství a obou seřazených veřejných klíčů. Pokud by někdo do výměny klíčů zasáhl, zařízení zobrazí různá čísla, což uživatelům napoví, aby párování nepotvrzovali.

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
        

Zjednodušený bezpečnostní řetězec Timmy: Firestore slouží jako bod setkání a přenos signalizace; TURN je pouze relé; média zůstávají šifrovaná přes WebRTC.

Proč nelze média WebRTC potichu sledovat

WebRTC neznamená jen „odesílání videa“. Než začne přenos médií, zařízení provedou navázání spojení pomocí protokolu DTLS. Z tohoto zabezpečeného přenosu se odvodí klíče SRTP pro zvuk a video. Mediální pakety se poté šifrují pomocí SRTP. Server TURN je může přeposílat, ale nezíská klíče potřebné k dešifrování zvuku nebo videa.

Timmy před tím přidává další vrstvu: signalizační data, například nabídky SDP, odpovědi SDP a kandidáti ICE, jsou před odesláním do Firestore zašifrována pomocí AES-256-GCM. Firestore pomáhá zařízením vyjednat spojení; není místem pro nešifrované video, zvuk ani nešifrovanou signalizaci.

Co Timmy stále netvrdí

Žádná seriózní dětská chůvička by neměla tvrdit, že ji nelze napadnout. Pokud je telefon kompromitován, může být napadena jakákoli aplikace. Škodlivá verze aplikace mění model rizik. Také konfigurace serveru musí zůstat správná. Užší tvrzení Timmy se týká jeho architektury: nevytváří na backendu čitelné mediální soubory z dětského pokoje a bezpečnostně kritickou logiku párování lze zkontrolovat ve veřejném projektu jádra aplikace.

Na co se ptát u každé dětské kamery

  • Ukládá výrobce obrázky nebo klipy?
  • Jsou adresy URL médií neveřejné, krátkodobé a je přístup k nim autorizován pro každé zařízení zvlášť?
  • Vytvářejí se klíče pro každé zařízení nebo párování, místo aby byly staticky uložené v aplikaci?
  • Může broker doručovat zprávy pouze pro zařízení, které skutečně vlastníte?
  • Umožňuje párování uživateli rozpoznat útok prostředníka (man-in-the-middle)?

Přečíst kód

Zdroje