Galaxus گزارش داد که ضبطهای دوربین کودک آزادانه در دسترس بودهاند؛ The Verge نیز از حدود 1.1 میلیون دستگاه Meari تحتتأثیر خبر داد. برداشت من واقعبینانه است: اگر پلتفرم پشت آن پیامها، تصاویر یا کلیدها را بهدرستی و برای هر دستگاه جدا نکند، ورود به حساب کاربری از اتاق کودک محافظت نمیکند. Timmy همهٔ مشکلات امنیتی دنیا را حل نمیکند. اما اسرار حیاتی رسانه و جفتسازی Timmy درون یک پلتفرم دوربین ابری نگهداری نمیشوند.
بهنظر میرسد در ماجرای Meari چه چیزی از کار افتاده است
گزارشهای عمومی یک پلتفرم وایتلیبل را توصیف میکنند. برندهای زیادی دوربینهایی فروختهاند که همگی به زیرساخت Meari/CloudEdge وابسته بودهاند. اهمیت این اتفاق همینجاست: وقتی یک پلتفرم مشترک مرز مجوزدهی را اشتباه تعیین کند، نتیجه فقط یک دوربین آسیبپذیر نیست، بلکه کل مجموعهٔ دستگاهها در معرض خطر قرار میگیرد.
الگوی گزارششده فراتر از گذرواژههای پیشفرض ضعیف است. منابع از پیامهای MQTT بدون کنترل کافی برای محدودکردن اشتراکها به هر دستگاه، نشانیهای تصویر در دسترس عموم، مبهمسازی ضعیف تصاویر و کلیدهای ثابت یا قابلاستخراج از اپ خبر میدهند. این یک نقص در سطح پلتفرم است: زیرساخت میتوانست دادههایی را آشکار کند که هرگز نباید در دسترس حساب دیگری قرار میگرفتند.
| ریسک دوربین ابری | راهکار Timmy در برابر این خطر |
|---|---|
| بکاند رویدادهای تصویری را ذخیره یا توزیع میکند. | Timmy هیچ آرشیو ابری برای تصاویر اتاق کودک ندارد؛ رسانه بهصورت زنده با WebRTC منتقل میشود. |
| یک بروکر یا باکت ذخیرهسازی باید برای هر دستگاه مجوزدهی کاملاً بینقصی داشته باشد. | Firestore فقط حاوی دادههای جفتسازی و سیگنالدهی است؛ SDP و ICE پیش از نوشتهشدن رمزگذاری میشوند. |
| کلیدهای ثابت میتوانند روی کل مجموعهٔ دستگاهها اثر بگذارند. | در هر جفتسازی، کلیدی ویژه با استفاده از ECDH منحنی P-256 روی دستگاهها مشتق میشود. |
| ممکن است مسیر رله با دسترسی به رسانه اشتباه گرفته شود. | TURN بستههای رمزگذاریشدهٔ SRTP را فقط فوروارد میکند و کلیدهای رسانه را دریافت نمیکند. |
Timmy چگونه راز مشترک را میسازد
کد چهارکاراکتری Timmy عمداً راز اصلی نیست. در کد برنامه، این کد فقط نقطهای برای برقراری ارتباط اولیه است: اپ مقداری را از آن مشتق میکند meetingKey تا هر دو دستگاه بتوانند همان محل تبادل کلید عمومی در Firestore را پیدا کنند. کلیدهای خصوصی ECDH هرگز از دستگاهها خارج نمیشوند.
سپس هر دو دستگاه راز مشترک یکسانی را با ECDH منحنی P-256 محاسبه میکنند. کلید جفتسازی بهصورت محلی مشتق میشود. SAS دودرقمی از راز مشترک بههمراه هر دو کلید عمومی مرتبشده مشتق میشود. اگر این تبادل کلید دستکاری شود، دستگاهها اعداد متفاوتی نشان میدهند و به کاربران هشدار میدهند که جفتسازی را تأیید نکنند.
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
زنجیرهٔ امنیتی سادهشدهٔ Timmy: Firestore برای هماهنگی و انتقال سیگنالدهی است؛ TURN فقط رله است؛ رسانه با WebRTC رمزگذاریشده باقی میماند.
چرا نمیتوان رسانهٔ WebRTC را بیسروصدا تماشا کرد
WebRTC فقط «فرستادن ویدیو» نیست. پیش از جریان رسانه، دستگاهها یک دستدهی DTLS انجام میدهند. کلیدهای SRTP صدا و ویدیو از این انتقال امن مشتق میشوند. سپس بستههای رسانه با SRTP رمزگذاری میشوند. سرور TURN میتواند این بستهها را فوروارد کند، اما کلید لازم برای باز کردن صدا یا ویدیو را دریافت نمیکند.
Timmy پیش از این مرحله لایهٔ دیگری اضافه میکند: دادههای سیگنالدهی مانند پیشنهادهای SDP، پاسخهای SDP و نامزدهای ICE پیش از رسیدن به Firestore با AES-256-GCM رمزگذاری میشوند. Firestore به دستگاهها کمک میکند ارتباط را هماهنگ کنند؛ قرار نیست ویدیو، صدا یا دادههای سیگنالدهی رمزنگارینشده در آن نگهداری شوند.
Timmy چه ادعایی ندارد
هیچ مانیتور کودک معتبری نباید ادعا کند که هکنشدنی است. اگر گوشی به خطر بیفتد، هر اپی میتواند هدف حمله قرار بگیرد. یک نسخهٔ مخرب از اپ، مدل ریسک را تغییر میدهد. پیکربندی سرور نیز باید همواره درست باقی بماند. ادعای محدودتر Timmy به معماری آن مربوط است: Timmy از ایجاد دادههای رسانهای اتاق کودک که بکاند بتواند آنها را بخواند پرهیز میکند و امکان بررسی منطق امنیتی و حیاتی جفتسازی را در پروژهٔ عمومی هسته فراهم میسازد.
پرسشهایی که باید دربارهٔ هر دوربین کودک بپرسید
- آیا فروشنده تصاویر یا کلیپها را ذخیره میکند؟
- آیا نشانیهای رسانه خصوصی و کوتاهعمرند و دسترسی به آنها برای هر دستگاه جداگانه مجاز میشود؟
- آیا کلیدها برای هر دستگاه یا جفتسازی ساخته میشوند، نه اینکه بهصورت ثابت داخل اپ باشند؟
- آیا یک بروکر فقط میتواند پیامهای دستگاهی را تحویل دهد که واقعاً مالک آن هستید؟
- آیا فرایند جفتسازی به کاربر امکان میدهد تلاش برای حملهٔ مرد میانی را تشخیص دهد؟
مشاهدهٔ کد
- ECDH و SAS در هستهٔ Timmy
- کلید جلسه، کلید سند و AES-GCM
- قوانین Firestore برای جلسهها و جفتسازی
- مستندات امنیتی در پروژهٔ هسته
منابع
- ضبطهای دوربین کودک با دسترسی آزاد · Galaxus
- یک میلیون مانیتور کودک و دوربین امنیتی بهآسانی توسط هکرها قابل مشاهده بودند · The Verge
- هیچکس بچه را در گوشه نمیگذارد · Sammy Azdoufal
- راهنمای والدین دربارهٔ همین اتفاق · Baby Monitor Timmy