הסבר על אבטחה

פגיעות אבטחה במצלמות תינוק של Meari: מה Timmy עושה אחרת

המקרה של Meari מראה שמסך כניסה מעוצב לא מספיק. אבטחת מוניטור תינוק תלויה בארכיטקטורה, בהרשאות ובניהול מפתחות.

Galaxus דיווחה על הקלטות ממצלמות תינוק שהיו נגישות לכל; The Verge דיווח על כ־1.1 מיליון מכשירי Meari שנפגעו. מבחינתי, הלקח ברור: התחברות לחשבון לא מגינה על חדר התינוק אם הפלטפורמה שמאחוריה לא מפרידה כראוי בין הודעות, תמונות או מפתחות לכל מכשיר. Timmy לא פותרת כל בעיית אבטחה בעולם. אבל סודות המדיה והצימוד הקריטיים של Timmy לא נמצאים בתוך פלטפורמת מצלמות ענן.

מה כנראה השתבש במקרה של Meari

הדיווחים הפומביים מתארים פלטפורמת white-label. מותגים רבים מכרו מצלמות שהתבססו על אותה תשתית Meari/CloudEdge. לכן האירוע חשוב: כשפלטפורמה משותפת מגדירה לא נכון גבול הרשאות, התוצאה אינה מצלמה חלשה אחת, אלא חשיפה של צי מכשירים שלם.

הדפוס שדווח חורג מסיסמאות ברירת מחדל חלשות. המקורות מתארים הודעות MQTT ללא בקרת הרשמה מספקת לכל מכשיר, כתובות URL של תמונות שהיו נגישות לציבור, הסוואת תמונות חלשה ומפתחות סטטיים או מפתחות שאפשר לחלץ מהאפליקציה. זהו כשל פלטפורמה: התשתית יכלה לחשוף נתונים שלעולם לא היו אמורים להיות זמינים לחשבון אחר.

הסיכון במצלמות ענןהגישה הנגדית של Timmy
ה־backend שומר או מפיץ אירועי תמונה.ל‑Timmy אין ארכיון ענן לתמונות מחדר התינוק; המדיה מועברת בשידור חי באמצעות WebRTC.
מתווך או מאגר חייבים לאמת בצורה מושלמת את ההרשאות של כל מכשיר.Firestore מעביר רק נתוני צימוד ואיתות; SDP/ICE מוצפנים לפני הכתיבה.
מפתחות סטטיים עלולים להשפיע על צי מכשירים שלם.כל צימוד יוצר במכשירים מפתח משלו, הנגזר מ‑P-256 ECDH.
נתיב ממסר עלול להיראות בטעות כגישה למדיה.TURN מעביר חבילות SRTP מוצפנות, אבל לא מקבל את מפתחות המדיה.

איך Timmy יוצרת את הסוד

קוד Timmy בן ארבעת התווים אינו הסוד בכוונה. בקוד, הוא רק נקודת מפגש: האפליקציה גוזרת ממנו meetingKey מפתח פגישה, כדי ששני המכשירים יוכלו למצוא את אותה החלפת מפתחות ציבוריים ב‑Firestore. מפתחות ECDH פרטיים לעולם אינם עוזבים את המכשירים.

לאחר מכן שני המכשירים מחשבים את אותו סוד משותף של P-256 ECDH. מפתח הצימוד נגזר מקומית. קוד ה‑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 מוצפנים ב‑AES-256-GCM לפני שהם מגיעים ל‑Firestore. Firestore עוזרת למכשירים לנהל משא ומתן; היא לא המקום שבו אמורים להימצא וידאו, אודיו או נתוני איתות לא מוצפנים.

מה Timmy עדיין לא טוענת

שום מוניטור תינוק רציני לא אמור לטעון שאי אפשר לפרוץ אליו. אם טלפון נפרץ, אפשר לתקוף כל אפליקציה. גרסת אפליקציה זדונית משנה את מודל הסיכון. גם תצורת השרת חייבת להישאר נכונה. הטענה המצומצמת יותר של Timmy היא ארכיטקטונית: היא נמנעת מארטיפקטים של מדיה מחדר התינוק שה־backend יכול לקרוא, והופכת את לוגיקת הצימוד הקריטית לאבטחה לניתנת לבדיקה בפרויקט הליבה הציבורי.

שאלות שכדאי לשאול על כל מצלמת תינוק

  • האם היצרן שומר תמונות או קטעי וידאו?
  • האם כתובות ה‑URL של המדיה פרטיות, קצרות־מועד ומורשות לכל מכשיר?
  • האם המפתחות נוצרים לכל מכשיר או צימוד, במקום להיות סטטיים בתוך האפליקציה?
  • האם מתווך יכול למסור הודעות רק למכשיר שבאמת בבעלותכם?
  • האם הצימוד מאפשר לאדם להבחין בניסיון תקיפת אדם־באמצע?

קריאת הקוד

מקורות