Wyjaśnienie kwestii bezpieczeństwa

Luka w zabezpieczeniach kamer Meari: co Timmy robi inaczej

Przypadek Meari pokazuje, że dopracowany mechanizm logowania nie wystarczy. Bezpieczeństwo elektronicznej niani zależy od architektury, autoryzacji i zarządzania kluczami.

Galaxus poinformował o ogólnodostępnych nagraniach z kamer do monitorowania dzieci, a The Verge podał, że problem dotyczył około 1,1 mln urządzeń Meari. Dla mnie wniosek jest trzeźwy: logowanie nie chroni pokoju dziecka, jeśli stojąca za nim platforma nie rozdziela prawidłowo wiadomości, obrazów ani kluczy między poszczególne urządzenia. Timmy nie rozwiązuje wszystkich problemów związanych z bezpieczeństwem. Jednak kluczowe sekrety służące w Timmy do ochrony multimediów i parowania nie znajdują się na platformie obsługującej kamery chmurowe.

Co najprawdopodobniej zawiodło w przypadku Meari

Publiczne doniesienia opisują platformę oferowaną pod markami różnych sprzedawców. Wiele znanych marek sprzedawało kamery korzystające z tej samej infrastruktury Meari/CloudEdge. Dlatego ten incydent jest istotny: gdy współdzielona platforma błędnie wyznacza granice autoryzacji, skutkiem nie jest luka w jednej kamerze, lecz narażenie całej floty urządzeń.

Opisany schemat wykracza poza słabe hasła domyślne. Źródła wskazują na wiadomości MQTT bez wystarczającej kontroli subskrypcji na poziomie poszczególnych urządzeń, publicznie dostępne adresy URL obrazów, słabe maskowanie obrazów oraz klucze statyczne lub możliwe do wyodrębnienia z aplikacji. To awaria platformy: infrastruktura mogła ujawnić dane, które nigdy nie powinny być dostępne dla innego konta.

Ryzyko kamer chmurowychRozwiązanie zastosowane w Timmy
Backend przechowuje lub rozsyła zdarzenia zawierające obrazy.Timmy nie ma chmurowego archiwum obrazów z pokoju dziecka; multimedia są przesyłane na żywo przez WebRTC.
Broker lub zasobnik musi bezbłędnie autoryzować dostęp do każdego urządzenia.Firestore przenosi wyłącznie dane parowania i sygnalizacji; dane SDP/ICE są szyfrowane przed zapisaniem.
Klucze statyczne mogą narazić całą flotę urządzeń.Każde parowanie tworzy na urządzeniach własny klucz wyprowadzony z P-256 ECDH.
Przekazywanie danych przez serwer pośredniczący może zostać mylnie uznane za dostęp do multimediów.TURN przekazuje zaszyfrowane pakiety SRTP, ale nie otrzymuje kluczy do multimediów.

Jak Timmy tworzy sekret kryptograficzny

Czteroznakowy kod Timmy celowo nie jest sekretem. W kodzie źródłowym służy jedynie jako punkt koordynacyjny: aplikacja wyprowadza z niego meetingKey klucz, dzięki któremu oba urządzenia mogą odnaleźć tę samą sesję wymiany kluczy publicznych w Firestore. Prywatne klucze ECDH nigdy nie opuszczają urządzeń.

Następnie oba urządzenia obliczają ten sam wspólny sekret P-256 ECDH. Klucz parowania jest wyprowadzany lokalnie. Dwucyfrowy SAS jest wyprowadzany ze wspólnego sekretu oraz obu posortowanych kluczy publicznych. Jeśli ta wymiana kluczy zostanie zmanipulowana, urządzenia wyświetlą różne liczby, co informuje użytkowników, by nie potwierdzali parowania.

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
        

Uproszczony łańcuch zabezpieczeń Timmy: Firestore pełni funkcję punktu koordynacyjnego i kanału transportowego dla sygnalizacji; TURN jest wyłącznie przekaźnikiem; multimedia pozostają zaszyfrowane przez WebRTC.

Dlaczego transmisji WebRTC nie da się potajemnie podglądać

WebRTC to nie tylko „wysyłanie wideo”. Zanim rozpocznie się transmisja multimediów, urządzenia przeprowadzają uzgadnianie połączenia DTLS. Klucze SRTP dla dźwięku i obrazu są wyprowadzane z tego bezpiecznego kanału transportowego. Pakiety multimedialne są następnie szyfrowane za pomocą SRTP. Serwer TURN może je przekazywać, ale nie otrzymuje kluczy potrzebnych do odszyfrowania dźwięku ani obrazu.

Timmy dodaje przed tym jeszcze jedną warstwę: dane sygnalizacyjne, takie jak oferty SDP, odpowiedzi SDP i kandydaci ICE, są szyfrowane za pomocą AES-256-GCM, zanim trafią do Firestore. Firestore pomaga urządzeniom wynegocjować połączenie; nie służy do przechowywania niezaszyfrowanego obrazu, dźwięku ani danych sygnalizacyjnych w postaci jawnej.

Czego Timmy nadal nie obiecuje

Żadna odpowiedzialnie zaprojektowana elektroniczna niania nie powinna być reklamowana jako niemożliwa do zhakowania. Jeśli telefon zostanie przejęty, każda aplikacja może stać się celem ataku. Złośliwie zmodyfikowana kompilacja aplikacji zmienia model ryzyka. Konfiguracja serwera również musi pozostawać prawidłowa. Węższa deklaracja Timmy dotyczy architektury: Timmy nie tworzy na backendzie możliwych do odczytania materiałów multimedialnych z pokoju dziecka, a krytyczną dla bezpieczeństwa logikę parowania można skontrolować w publicznym projekcie Timmy Core.

Pytania, które warto zadać przed wyborem dowolnej kamery do monitorowania dziecka

  • Czy producent przechowuje zdjęcia lub nagrania?
  • Czy adresy URL multimediów są prywatne, mają krótki okres ważności, a dostęp do nich jest autoryzowany osobno dla każdego urządzenia?
  • Czy klucze są generowane osobno dla każdego urządzenia lub parowania, zamiast być zapisane statycznie w aplikacji?
  • Czy broker może dostarczać wiadomości wyłącznie dla urządzenia, które rzeczywiście posiadasz?
  • Czy podczas parowania użytkownik może zauważyć próbę ataku pośrednika?

Przeczytaj kod źródłowy

Źródła