อธิบายเรื่องความปลอดภัย

ช่องโหว่ความปลอดภัยของกล้องเด็ก Meari: Timmy ทำต่างอย่างไร

กรณีของ Meari แสดงให้เห็นว่าหน้าเข้าสู่ระบบที่ดูดีอย่างเดียวไม่พอ ความปลอดภัยของเบบี้มอนิเตอร์ขึ้นอยู่กับสถาปัตยกรรม การกำหนดสิทธิ์ และการจัดการคีย์

Galaxus รายงานว่าสามารถเข้าถึงภาพบันทึกจากกล้องเด็กได้โดยไม่มีข้อจำกัด ส่วน The Verge รายงานว่าอุปกรณ์ Meari ได้รับผลกระทบราว 1.1 ล้านเครื่อง สำหรับผม บทเรียนจากเรื่องนี้ชัดเจนว่า การเข้าสู่ระบบไม่อาจปกป้องห้องของลูกได้ หากแพลตฟอร์มเบื้องหลังไม่ได้แยกข้อความ รูปภาพ หรือคีย์ของอุปกรณ์แต่ละเครื่องออกจากกันอย่างรัดกุม Timmy ไม่ได้แก้ปัญหาความปลอดภัยได้ทุกอย่าง แต่ข้อมูลสื่อที่สำคัญและข้อมูลลับสำหรับการจับคู่ของ Timmy ไม่ได้อยู่ในแพลตฟอร์มกล้องบนคลาวด์

สิ่งที่ดูเหมือนจะผิดพลาดในกรณี Meari

รายงานที่เผยแพร่ต่อสาธารณะระบุว่าแพลตฟอร์มนี้เป็นแบบไวต์เลเบล โดยมีแบรนด์จำนวนมากจำหน่ายกล้องที่ใช้โครงสร้างพื้นฐาน Meari/CloudEdge ร่วมกัน นี่คือเหตุผลที่เหตุการณ์ดังกล่าวมีความสำคัญ เพราะเมื่อแพลตฟอร์มที่ใช้ร่วมกันกำหนดขอบเขตการอนุญาตผิดพลาด ผลกระทบไม่ได้จำกัดอยู่ที่กล้องที่ไม่ปลอดภัยเพียงตัวเดียว แต่อาจทำให้อุปกรณ์ทั้งกลุ่มเสี่ยงต่อการเปิดเผยข้อมูล

รูปแบบที่รายงานไม่ได้มีแค่รหัสผ่านเริ่มต้นที่อ่อนแอ แหล่งข้อมูลระบุถึงข้อความ MQTT ที่ไม่มีการควบคุมการสมัครรับข้อมูลรายอุปกรณ์อย่างเพียงพอ URL รูปภาพที่เข้าถึงได้สาธารณะ การพรางรูปภาพที่อ่อนแอ และคีย์แบบคงที่หรือคีย์ที่ดึงออกจากแอปได้ นี่คือความล้มเหลวของแพลตฟอร์ม: โครงสร้างพื้นฐานอาจเปิดเผยข้อมูลที่ไม่ควรมีให้บัญชีอื่นเข้าถึงได้

ความเสี่ยงของกล้องบนคลาวด์แนวทางออกแบบที่ต่างของ Timmy
แบ็กเอนด์จัดเก็บหรือเผยแพร่อีเวนต์รูปภาพ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 offer, SDP answer และ ICE candidate ด้วย AES-256-GCM ก่อนส่งไปยัง Firestore Firestore ช่วยให้อุปกรณ์เจรจาการเชื่อมต่อกัน แต่ไม่ได้มีไว้เก็บวิดีโอ เสียง หรือข้อมูลการส่งสัญญาณในรูปแบบที่ไม่ได้เข้ารหัส

สิ่งที่ Timmy ไม่ได้กล่าวอ้าง

ผู้ให้บริการเบบี้มอนิเตอร์ที่จริงจังไม่ควรอ้างว่าผลิตภัณฑ์ของตนไม่มีทางถูกแฮ็ก หากโทรศัพท์ถูกเจาะระบบ แอปใด ๆ ก็อาจถูกโจมตีได้ บิลด์ของแอปที่เป็นอันตรายย่อมทำให้รูปแบบความเสี่ยงเปลี่ยนไป และการตั้งค่าเซิร์ฟเวอร์ต้องถูกต้องอยู่เสมอ สิ่งที่ Timmy ยืนยันในขอบเขตที่แคบกว่าคือเรื่องสถาปัตยกรรม โดยหลีกเลี่ยงการสร้างข้อมูลสื่อจากห้องของลูกที่แบ็กเอนด์สามารถอ่านได้ และเปิดให้ตรวจสอบตรรกะการจับคู่ที่สำคัญต่อความปลอดภัยได้ในโปรเจกต์แกนหลักสาธารณะ

คำถามที่ควรถามเกี่ยวกับกล้องเด็กทุกยี่ห้อ

  • ผู้ขายจัดเก็บรูปภาพหรือคลิปหรือไม่?
  • URL สื่อเป็นส่วนตัว มีอายุสั้น และกำหนดสิทธิ์รายอุปกรณ์หรือไม่?
  • คีย์ถูกสร้างสำหรับแต่ละอุปกรณ์หรือการจับคู่ แทนที่จะเป็นคีย์คงที่ในแอปหรือไม่?
  • โบรกเกอร์ส่งข้อความได้เฉพาะสำหรับอุปกรณ์ที่คุณเป็นเจ้าของจริงหรือไม่?
  • ขั้นตอนการจับคู่ช่วยให้ผู้ใช้สังเกตเห็นความพยายามโจมตีแบบคนกลาง (man-in-the-middle) ได้หรือไม่?

อ่านโค้ด

แหล่งข้อมูล