Galaxus rapporterede om frit tilgængelige optagelser fra babykameraer; The Verge rapporterede om cirka 1,1 millioner berørte Meari-enheder. For mig er konklusionen nøgtern: Et login beskytter ikke børneværelset, hvis den bagvedliggende platform ikke holder beskeder, billeder og nøgler tydeligt adskilt for hver enhed. Timmy løser ikke alle sikkerhedsproblemer i verden. Men Timmys sikkerhedskritiske hemmeligheder til medier og parring ligger ikke i en cloudkameraplatform.
Hvad der tilsyneladende gik galt i Meari-sagen
De offentlige rapporter beskriver en white label-platform. Kameraer fra mange forskellige mærker var afhængige af den samme Meari/CloudEdge-infrastruktur. Derfor er hændelsen vigtig: Når en fælles platform placerer en autorisationsgrænse forkert, er resultatet ikke blot ét sårbart kamera, men eksponering af en hel produktflåde.
Det rapporterede mønster handler om mere end svage standardadgangskoder. Kilder beskriver MQTT-beskeder uden tilstrækkelig kontrol af abonnementer for hver enhed, offentligt tilgængelige billed-URL'er, svag obfuskering af billeder samt statiske nøgler eller nøgler, der kan udtrækkes fra appen. Det er en platformsfejl: Infrastrukturen kunne afsløre data, som aldrig burde have været tilgængelige for en anden konto.
| Risiko ved cloudkameraer | Timmys alternative design |
|---|---|
| Backenden lagrer eller distribuerer billedhændelser. | Timmy har intet cloudarkiv med billeder fra børneværelset; medier overføres live via WebRTC. |
| En broker eller bucket skal autorisere hver enhed helt korrekt. | Firestore bruges kun til parrings- og signaleringsdata; SDP/ICE krypteres, før dataene skrives til Firestore. |
| Statiske nøgler kan påvirke en hel flåde. | Hver parring opretter sin egen P-256 ECDH-afledte nøgle på enhederne. |
| En relæforbindelse kan forveksles med adgang til medierne. | TURN videresender krypterede SRTP-pakker, men får ikke adgang til medienøglerne. |
Sådan etablerer Timmy hemmeligheden
Timmy-koden på fire tegn er bevidst ikke hemmeligheden. I programkoden fungerer den kun som et mødested: Appen udleder en meetingKey ud fra den, så begge enheder kan finde den samme Firestore-udveksling af offentlige nøgler. Private ECDH-nøgler forlader aldrig enhederne.
Begge enheder beregner derefter den samme delte P-256 ECDH-hemmelighed. Parringsnøglen udledes lokalt. Den tocifrede SAS udledes af den delte hemmelighed og begge offentlige nøgler i sorteret rækkefølge. Hvis nogen manipulerer med nøgleudvekslingen, viser enhederne forskellige tal. Det fortæller brugerne, at de ikke skal bekræfte parringen.
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
Forenklet oversigt over Timmys sikkerhedskæde: Firestore fungerer som mødested og transportvej for signalering; TURN er kun et relæ; medierne forbliver WebRTC-krypterede.
Hvorfor ingen ubemærket kan se med på WebRTC-medier
WebRTC er ikke bare at "sende video". Før medieoverførslen begynder, udfører enhederne et DTLS-handshake. SRTP-nøglerne til lyd og video udledes af denne sikre transport. Mediepakkerne krypteres derefter som SRTP. En TURN-server kan videresende pakkerne, men den modtager ikke de nøgler, der er nødvendige for at afkode lyden eller videoen.
Timmy tilføjer et ekstra lag inden da: Signaleringsdata såsom SDP-tilbud, SDP-svar og ICE-kandidater krypteres med AES-256-GCM, før de når Firestore. Firestore hjælper enhederne med at etablere forbindelsen; det er ikke meningen, at ukrypteret video, lyd eller signalering skal befinde sig der.
Hvad Timmy stadig ikke påstår
Ingen seriøs babyalarm bør påstå at være umulig at hacke. Hvis en telefon kompromitteres, kan enhver app angribes. En skadelig version af appen ændrer risikomodellen. Serverkonfigurationen skal fortsat være korrekt. Timmys mere afgrænsede påstand handler om arkitekturen: Timmy undgår medieartefakter fra børneværelset, som backenden kan læse, og gør den sikkerhedskritiske parringslogik mulig at efterprøve i det offentligt tilgængelige kerneprojekt.
Spørgsmål du bør stille om ethvert babykamera
- Gemmer leverandøren billeder eller klip?
- Er medie-URL'er private, kun gyldige i kort tid og autoriserede for hver enhed?
- Genereres nøgler pr. enhed eller parring frem for at være statiske i en app?
- Kan en broker kun levere beskeder til den enhed, du rent faktisk ejer?
- Gør parringen det muligt for et menneske at opdage et man-in-the-middle-forsøg?
Læs koden
- ECDH og SAS i Timmy Core
- Mødenøgle, dokumentnøgle og AES-GCM
- Firestore-regler for sessioner og parring
- Sikkerhedsdokumentation i kerneprojektet
Kilder
- Optagelser fra babykameraer frit tilgængelige · Galaxus
- En million babyalarmer og sikkerhedskameraer kunne nemt ses af hackere · The Verge
- ingen sætter babyen i et hjørne · Sammy Azdoufal
- Forældreguide til samme hændelse · Baby Monitor Timmy