Galaxus melaporkan rakaman kamera bayi yang boleh diakses secara bebas; The Verge melaporkan kira-kira 1.1 juta peranti Meari terjejas. Bagi saya, pengajarannya jelas: log masuk tidak melindungi bilik bayi jika platform di belakangnya gagal memisahkan mesej, imej atau kunci dengan baik bagi setiap peranti. Timmy tidak menyelesaikan setiap masalah keselamatan di dunia. Namun, rahsia media dan penggandingan Timmy yang kritikal dari segi keselamatan tidak disimpan dalam platform kamera awan.
Apa yang nampaknya gagal dalam kes Meari
Laporan awam menerangkan platform label putih. Banyak jenama yang kelihatan berbeza menjual kamera yang bergantung pada infrastruktur Meari/CloudEdge yang sama. Itulah sebab insiden ini penting: apabila platform bersama menetapkan sempadan kebenaran akses dengan salah, hasilnya bukan satu kamera yang lemah, tetapi pendedahan pada tahap keseluruhan kumpulan peranti.
Corak yang dilaporkan melangkaui kata laluan lalai yang lemah. Sumber menerangkan mesej MQTT tanpa kawalan langganan yang mencukupi bagi setiap peranti, URL imej yang boleh dicapai secara terbuka, penyamaran imej yang lemah, serta kunci statik atau kunci yang boleh diekstrak daripada aplikasi. Ini ialah kegagalan platform: infrastruktur boleh mendedahkan data yang sepatutnya tidak pernah tersedia kepada akaun lain.
| Risiko kamera awan | Pendekatan reka bentuk Timmy |
|---|---|
| Sistem pelayan menyimpan atau mengedarkan peristiwa imej. | Timmy tidak mempunyai arkib awan untuk imej bilik bayi; media dihantar secara langsung melalui WebRTC. |
| Broker atau bekas storan mesti mengesahkan akses bagi setiap peranti dengan betul. | Firestore hanya membawa data penggandingan dan pensinyalan; SDP/ICE disulitkan sebelum ditulis. |
| Kunci statik boleh menjejaskan keseluruhan kumpulan peranti. | Setiap penggandingan menghasilkan kunci tersendiri yang diperoleh melalui P-256 ECDH pada peranti. |
| Laluan relai mungkin disalah anggap sebagai akses media. | TURN meneruskan paket SRTP yang disulitkan tetapi tidak menerima kunci media. |
Cara Timmy mencipta rahsia
Kod Timmy empat aksara itu memang sengaja tidak dijadikan rahsia. Dalam kod, ia hanya titik pertemuan: aplikasi memperoleh satu meetingKey daripadanya supaya kedua-dua peranti boleh mencari pertukaran kunci awam Firestore yang sama. Kunci ECDH peribadi tidak pernah meninggalkan peranti.
Kedua-dua peranti kemudian mengira rahsia bersama P-256 ECDH yang sama. Kunci penggandingan diperoleh secara setempat. SAS dua digit diperoleh daripada rahsia bersama serta kedua-dua kunci awam yang diisih. Jika pertukaran kunci itu diusik, peranti akan memaparkan nombor yang berbeza, yang memberitahu pengguna supaya tidak mengesahkan penggandingan.
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
Rantaian keselamatan Timmy yang dipermudah: Firestore ialah titik pertemuan dan saluran pensinyalan; TURN hanyalah relai; media kekal disulitkan melalui WebRTC.
Mengapa media WebRTC tidak boleh ditonton secara senyap
WebRTC bukan sekadar "hantar video". Sebelum media dihantar, peranti menjalankan jabat tangan DTLS. Kunci SRTP untuk audio dan video diperoleh daripada pengangkutan selamat itu. Paket media kemudian disulitkan sebagai SRTP. Pelayan TURN boleh meneruskan paket tersebut, tetapi tidak menerima kunci yang diperlukan untuk membuka audio atau video.
Timmy menambah satu lapisan sebelum itu: data pensinyalan seperti tawaran SDP, jawapan SDP dan calon ICE disulitkan dengan AES-256-GCM sebelum sampai ke Firestore. Firestore membantu peranti berunding; video, audio atau data pensinyalan dalam bentuk teks biasa tidak sepatutnya disimpan di situ.
Perkara yang tidak didakwa oleh Timmy
Tiada monitor bayi yang serius patut mendakwa bahawa produknya mustahil digodam. Jika telefon terjejas, mana-mana aplikasi boleh diserang. Versi aplikasi yang berniat jahat mengubah model risiko. Konfigurasi pelayan mesti kekal betul. Dakwaan Timmy lebih khusus dari segi seni bina: Timmy mengelakkan artifak media bilik bayi yang boleh dibaca oleh sistem pelayan dan membolehkan logik penggandingan yang kritikal dari segi keselamatan diperiksa dalam projek teras awam.
Soalan untuk ditanya tentang mana-mana kamera bayi
- Adakah pembekal menyimpan imej atau klip?
- Adakah URL media bersifat peribadi, sementara dan diberi kebenaran bagi setiap peranti?
- Adakah kunci dijana bagi setiap peranti atau penggandingan, bukannya kekal statik dalam aplikasi?
- Bolehkah broker hanya menghantar mesej untuk peranti yang benar-benar anda miliki?
- Adakah proses penggandingan membolehkan pengguna menyedari cubaan serangan pihak di tengah (man-in-the-middle)?
Baca kod
- ECDH dan SAS dalam Timmy Core
- Kunci mesyuarat, kunci dokumen dan AES-GCM
- Peraturan Firestore untuk sesi dan penggandingan
- Dokumentasi keselamatan dalam projek teras
Sumber
- Rakaman daripada kamera bayi boleh diakses secara bebas · Galaxus
- Sejuta monitor bayi dan kamera keselamatan mudah ditonton oleh penggodam · The Verge
- tiada siapa meletakkan bayi di sudut · Sammy Azdoufal
- Panduan ibu bapa untuk insiden yang sama · Baby Monitor Timmy