Vysvetlenie bezpečnosti

Bezpečnostná zraniteľnosť detskej kamery Meari: čo Timmy robí inak

Prípad Meari ukazuje, že ani prepracované prihlasovanie nestačí. Bezpečnosť monitora bábätka závisí od architektúry, oprávnení a správy kľúčov.

Galaxus informoval o voľne dostupných nahrávkach z detských kamier; The Verge uviedol približne 1,1 milióna dotknutých zariadení Meari. Pre mňa je ponaučenie jasné: prihlásenie nechráni detskú izbu, ak platforma za ním nedokáže čisto oddeliť správy, obrázky či kľúče pre jednotlivé zariadenia. Timmy nevyrieši každý bezpečnostný problém na svete. Kritické tajomstvá médií a párovania Timmy však nie sú uložené v platforme cloudových kamier.

Čo zrejme zlyhalo v prípade Meari

Verejné správy opisujú platformu poskytovanú pod značkami rôznych predajcov. Mnohé známe značky predávali kamery závislé od rovnakej infraštruktúry Meari/CloudEdge. Práve preto je tento incident dôležitý: keď zdieľaná platforma nesprávne nastaví hranice oprávnení, výsledkom nie je iba jedna slabo zabezpečená kamera, ale ohrozenie celej flotily zariadení.

Opisovaný problém presahuje rámec slabých predvolených hesiel. Zdroje uvádzajú správy MQTT bez dostatočnej kontroly odberov pre jednotlivé zariadenia, verejne dostupné adresy URL obrázkov, slabé maskovanie obrázkov a statické kľúče alebo kľúče, ktoré možno získať z aplikácie. Ide o zlyhanie platformy: infraštruktúra mohla odhaliť údaje, ktoré nikdy nemali byť dostupné inému účtu.

Riziko cloudových kamierAko to rieši Timmy
Backend ukladá alebo distribuuje snímky udalostí.Timmy nemá cloudový archív obrázkov z detskej izby; médiá sa prenášajú naživo cez WebRTC.
Broker alebo úložisko musí bezchybne kontrolovať oprávnenia každého zariadenia.Firestore prenáša iba údaje o párovaní a signalizácii; SDP a ICE sú zašifrované ešte pred uložením do Firestore.
Statické kľúče môžu ovplyvniť celú flotilu zariadení.Každé párovanie vytvorí na zariadeniach vlastný kľúč odvodený z P-256 ECDH.
Reléová cesta môže byť mylne považovaná za prístup k médiám.TURN preposiela šifrované pakety SRTP, ale nedostáva mediálne kľúče.

Ako Timmy vytvára tajomstvo

Štvorznakový kód Timmy zámerne nie je tajomstvom. V kóde slúži len ako miesto stretnutia: aplikácia z neho odvodí meetingKey aby obe zariadenia našli rovnakú výmenu verejných kľúčov vo Firestore. Súkromné kľúče ECDH nikdy neopustia zariadenia.

Obe zariadenia potom vypočítajú rovnaké zdieľané tajomstvo P-256 ECDH. Kľúč párovania sa odvodí lokálne. Dvojciferný SAS sa odvodí zo zdieľaného tajomstva a oboch zoradených verejných kľúčov. Ak niekto s výmenou kľúčov manipuluje, zariadenia zobrazia odlišné čísla, čo používateľom napovie, aby párovanie nepotvrdzovali.

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ý reťazec Timmy: Firestore slúži na spojenie a prenos signalizácie; TURN je len relé; médiá zostávajú šifrované cez WebRTC.

Prečo médiá WebRTC nemožno potichu sledovať

WebRTC neznamená len „odosielanie videa“. Pred začiatkom prenosu médií zariadenia nadviažu zabezpečené spojenie pomocou DTLS. Z tohto zabezpečeného prenosu sa odvodia kľúče SRTP pre zvuk a video. Mediálne pakety sa potom zašifrujú pomocou SRTP. Server TURN môže tieto pakety preposielať, ale nezíska kľúče potrebné na dešifrovanie zvuku alebo videa.

Timmy pred to pridáva ďalšiu vrstvu: signalizačné údaje, napríklad ponuky SDP, odpovede SDP a kandidáti ICE, sa šifrujú pomocou AES-256-GCM predtým, než sa dostanú do Firestore. Firestore pomáha zariadeniam dohodnúť sa; nie je miestom, kde majú byť uložené nešifrované video, zvuk alebo signalizácia v otvorenom texte.

Čo Timmy stále netvrdí

Žiadny seriózny monitor bábätka by nemal tvrdiť, že jeho zabezpečenie nemožno prelomiť. Ak je telefón napadnutý, útočník môže zaútočiť na ktorúkoľvek aplikáciu. Škodlivá verzia aplikácie mení model rizika. Konfigurácia servera musí zostať správna. Užšie tvrdenie Timmy sa týka architektúry: Timmy sa vyhýba ukladaniu mediálnych záznamov z detskej izby, ktoré by mohol čítať backend, a umožňuje preskúmať bezpečnostne kritickú logiku párovania vo verejnom základnom projekte.

Otázky, ktoré si položiť pri každej detskej kamere

  • Ukladá výrobca obrázky alebo klipy?
  • Sú adresy URL médií súkromné, majú krátku platnosť a vyžadujú oprávnenie pre konkrétne zariadenie?
  • Generujú sa kľúče pre každé zariadenie alebo párovanie namiesto toho, aby boli staticky uložené v aplikácii?
  • Môže sprostredkovateľ doručovať správy len pre zariadenie, ktoré skutočne vlastníte?
  • Umožňuje párovanie používateľovi rozpoznať pokus o útok sprostredkovateľa (man-in-the-middle)?

Prečítať kód

Zdroje