1 คะแนน โดย GN⁺ 2024-06-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เนื่องจาก CVE-2024-27867 ในเฟิร์มแวร์ AirPods ผู้ที่รู้ Bluetooth MAC address สามารถเชื่อมต่อกับอุปกรณ์เพื่อดักฟังไมโครโฟนหรือเล่นเพลงได้
  • ช่องโหว่นี้เกิดจากเส้นทาง Fast Connect ซึ่งเป็นโปรโตคอลเฉพาะของ Apple ไม่มีการตรวจสอบสถานะการยืนยันตัวตนและการเข้ารหัสอย่างชัดเจน
  • Bluetooth MAC address ที่ใช้ในการโจมตีไม่ใช่ข้อมูลปิดลับทั้งหมด และสามารถรับได้ผ่านสัญญาณวิทยุเมื่ออยู่ในโหมดจับคู่หรือเมื่อ AirPods กำลังทำงานอยู่
  • หาก AirPods อยู่ในเคสชาร์จที่ปิดอยู่ หรือ AirPods Max อยู่ใน Smart Case ฟังก์ชันไร้สายจะปิด ทำให้ไม่สามารถเชื่อมต่อได้เลย
  • Apple ได้ปล่อยอัปเดตเฟิร์มแวร์สำหรับ AirPods และ Beats บางรุ่นแล้ว แต่ผู้ใช้ Android, Windows, Linux ที่ใช้งานโดยไม่มี iOS หรือ macOS อาจอัปเดตได้ยุ่งยากกว่า

ช่องโหว่เฟิร์มแวร์ AirPods และขอบเขตผลกระทบ

  • มีช่องโหว่ความปลอดภัย CVE-2024-27867 ในเฟิร์มแวร์ Apple AirPods
  • ผู้ที่รู้ Bluetooth MAC address สามารถเชื่อมต่อกับ AirPods และทำสิ่งต่อไปนี้ได้
    • ดักฟัง ไมโครโฟน
    • เล่นเพลง
    • ตรวจสอบและหยุดชั่วคราวเพลงที่กำลังเล่นบนอุปกรณ์อื่นที่เชื่อมต่ออยู่
    • ทำงานบางอย่างผ่านโปรโตคอล AAP
    • ส่งข้อความที่มีรูปแบบไม่ถูกต้องเพื่อทำให้ AirPods แครช
  • แม้ AirPods จะเชื่อมต่อกับโทรศัพท์อยู่แล้ว ผู้โจมตีก็ยังเชื่อมต่อเพิ่มได้
    • อย่างไรก็ตาม หากผู้โจมตีเปิดไมโครโฟน การเล่นเพลงจะหยุด
  • หาก AirPods อยู่ในเคสชาร์จที่ปิดอยู่ หรือ AirPods Max อยู่ใน Smart Case ฟังก์ชันไร้สายจะปิด ทำให้ไม่สามารถเชื่อมต่อใดๆ ได้

เส้นทางการค้นพบช่องโหว่

  • AirPods 3 ทำงานหลายอย่างได้อย่างลื่นไหลเมื่อใช้ร่วมกับ macOS และอุปกรณ์ Apple แต่เมื่อบูตโน้ตบุ๊กเครื่องเดียวกันด้วย Linux กลับไม่สามารถเชื่อมต่อกับโทรศัพท์และโน้ตบุ๊กพร้อมกันได้
  • จากความต่างนี้จึงสันนิษฐานว่ามีการใช้ โปรโตคอลเฉพาะของ Apple ที่ไม่มีในหูฟัง Bluetooth ทั่วไป และเริ่มวิเคราะห์เพื่อพัฒนาความสามารถบางอย่างกลับมาบน Linux
  • ระหว่างการวิเคราะห์ได้พบช่องโหว่ในฟีเจอร์ Fast Connect ของ Apple ที่ใช้เชื่อมต่ออุปกรณ์ Bluetooth รอบข้าง

วิธีการทำงานของ Fast Connect

  • Fast Connect เป็นโปรโตคอลเฉพาะของ Apple และใช้ ฟังก์ชัน ping ในสเปก Bluetooth อย่างสร้างสรรค์
  • เป้าหมายคือการลดเวลาในการตั้งค่าการเชื่อมต่อระหว่างอุปกรณ์ Apple สองเครื่องจากราว 1 วินาทีเหลือประมาณ 0.5 วินาที
  • ก่อนยืนยันตัวตนกับอุปกรณ์ปลายทาง ทั้งสองอุปกรณ์จะแลกเปลี่ยน ข้อความ L2CAP ping กัน
    • Apple ใส่ข้อความโปรโตคอลไว้ใน payload ของ ping
    • วิธีนี้ช่วยตรวจสอบได้ว่าอีกฝั่งรองรับ Fast Connect หรือไม่ โดยไม่ขัดกับสเปก Bluetooth
  • หลังจากนั้นจะมีการแลกเปลี่ยนข้อความเพิ่มเติมอีก 3 รอบเพื่อเจรจาข้อมูลที่จำเป็นต่อการเชื่อมต่อ
  • รวมแล้วมีการรับส่งไปกลับเพียง 4 รอบ จึงเร็วกว่าการเชื่อมต่อ Bluetooth แบบทั่วไปที่ต้องแลกเปลี่ยน SDP descriptor และตั้งค่าช่องสัญญาณ

การขาดการตรวจสอบการยืนยันตัวตน

  • ปัญหาอยู่ที่เส้นทางโค้ดแยกต่างหากที่ใช้ทำงาน Fast Connect ซึ่งขาดการตรวจสอบสำคัญบางอย่าง
  • AirPods ไม่ได้ตรวจสอบว่าฝั่งที่เชื่อมต่อผ่านการยืนยันตัวตนจริงและเปิดการเข้ารหัสแล้วหรือไม่
  • iOS และ macOS ปกติจะทำขั้นตอนยืนยันตัวตนและเปิดการเข้ารหัสหลังข้อความ Fast Connect เริ่มต้น
  • แม้ผู้โจมตีจะข้ามขั้นตอนนี้ไป AirPods ก็ยังดำเนินกระบวนการ Fast Connect ต่อ
  • หากเชื่อมต่อกับ AirPods ผ่าน Bluetooth แบบทั่วไปโดยไม่ใช้ Fast Connect ขั้นตอนยืนยันตัวตนจะถูกรวมอยู่โดยปริยาย จึงเป็นไปได้ว่าทำให้เส้นทางโค้ด Fast Connect ขาดการตรวจสอบแบบชัดเจน

เงื่อนไขเรื่อง Bluetooth MAC address

  • ผู้โจมตีต้องรู้ Bluetooth MAC address แบบคงที่ ของ AirPods
  • ที่อยู่นี้ไม่ใช่ข้อมูลลับโดยสมบูรณ์
    • อุปกรณ์ Bluetooth จะประกาศค่านี้ผ่านสัญญาณวิทยุเมื่ออยู่ในโหมดจับคู่
    • เมื่อ AirPods อยู่ในสถานะใช้งาน ก็สามารถดักรับจากสัญญาณวิทยุได้ง่ายด้วยฮาร์ดแวร์อย่าง Ubertooth One

อัปเดตและปัญหาสำหรับผู้ใช้ที่ไม่ใช่ Apple

  • Apple ได้ปล่อยอัปเดตเฟิร์มแวร์หลายตัวในช่วงไม่กี่วันที่ผ่านมาเพื่อแก้ช่องโหว่นี้
  • รุ่นที่ได้รับผลมี AirPods 2, AirPods 3, AirPods Pro, AirPods Pro 2, AirPods Max และหูฟัง Beats บางรุ่น
  • ผู้ใช้ควรตรวจสอบว่าเฟิร์มแวร์ AirPods เป็นเวอร์ชันล่าสุดหรือไม่
  • เฟิร์มแวร์ AirPods จะอัปเดตอัตโนมัติ แต่จะอัตโนมัติเฉพาะเมื่อใช้งานร่วมกับ iPhone หรือ MacBook เท่านั้น
  • ผู้ใช้ที่ใช้งาน AirPods โดยไม่มีอุปกรณ์ iOS หรือ macOS เช่น ผู้ใช้ Android, Windows, Linux อาจอัปเดตเฟิร์มแวร์ได้ยาก
  • ผู้ใช้กลุ่มนี้ดูเหมือนจะสามารถรับการอัปเดตเฟิร์มแวร์ได้ที่ Apple Store

การรายงานและเครื่องมือ

  • Jiska Classen จาก University of Potsdam ได้ช่วยเหลือเกี่ยวกับคำถามด้าน Bluetooth และขั้นตอนการเปิดเผยข้อมูล
  • เครื่องมือจากชุมชน Linux อย่าง BlueZ มีความจำเป็นต่อการค้นพบปัญหานี้

1 ความคิดเห็น

 
GN⁺ 2024-06-30
ความเห็นจาก Hacker News
  • ถ้าอุปกรณ์สองชิ้นที่อยู่ในห้องเดียวกันใช้เพียงส่วนที่แคบมากของสเปกตรัมแม่เหล็กไฟฟ้า ก็น่าจะแลกเปลี่ยนข้อความกันได้เป็นพันข้อความต่อวินาที แต่ใน Bluetooth ทำไมข้อความเดียวถึงใช้เวลาระดับหลายร้อยมิลลิวินาทีแทนที่จะเป็นไมโครวินาที
    อยากรู้ว่าปัจจัยอะไรเป็นตัวกำหนดสเกลเวลาของกระบวนการนี้
    • ตรงนี้ไม่แน่ใจนัก แต่โดยปกติมักเป็นผลจากหลายอย่างซ้อนกัน: อุปกรณ์โฆษณาส่ง beacon บ่อยแค่ไหน, มีหลาย advertising channel หรือไม่, beacon และ handshake ถูกส่งด้วยความเร็วต่ำสุดของโปรโตคอลเพื่อรองรับอุปกรณ์รุ่นเก่าหรือไม่, และมีการส่งซ้ำในชั้นกายภาพเพราะสัญญาณรบกวนรอบข้างหรือไม่
      สุดท้ายแล้ว handshake ที่ใช้ตรวจสอบว่าทั้งสองฝั่งรองรับความสามารถอะไร และจะสื่อสารกันด้วย physical layer protocol แบบใด เป็นส่วนที่กินเวลา
  • จำได้ว่าอุปกรณ์ Beats ที่ได้รับผลกระทบและใช้ชิปตัวเดียวกันนั้นอัปเดตผ่านแอป Beats บน Android ได้จริง
    • ผมใช้ AirPods Pro รุ่น 1 และ 2 กับโทรศัพท์ Android มาตลอด และบน Android ก็แทบไม่มีวิธีที่ใช้งานได้จริงในการ อัปเดตเฟิร์มแวร์, ตรวจสอบเวอร์ชัน, เลือกโหมด, เปลี่ยนการทำงานของการกดค้าง, หรือดูระดับแบตเตอรี่
      มีแอป third-party อยู่บ้างแต่เชื่อถือได้ไม่มาก โชคดีที่บน Mac ทำได้เกือบทั้งหมด แต่การทดสอบการสวมใส่ยังต้องใช้ iPhone เท่านั้น การอัปเกรดเฟิร์มแวร์ก็ไม่อยู่ในการควบคุมของผู้ใช้เลย และไม่มีข้อมูลสถานะหรือความคืบหน้าใดๆ ทำให้สับสนแบบสุดๆ
      ครั้งหนึ่งเจ้าหน้าที่ซัพพอร์ตที่ Apple Store บอกว่า “ให้เชื่อมต่อ AirPods กับ Mac แล้วใส่ไว้ในเคสที่เปิดฝาอยู่ จากนั้นเสียบเคสเข้ากับไฟแล้วปล่อยทิ้งไว้ประมาณ 30 นาที” แต่ในความเป็นจริงมันให้ความรู้สึกว่าสุ่มพอสมควรว่าจะอัปเดตเมื่อไร เจ้าหน้าที่ Apple Store เองก็ดูจะรู้รายละเอียดการทำงานร่วมกันระหว่างอุปกรณ์ Apple ที่ไม่ใช่ iPhone แบบคลุมเครืออยู่บ่อยๆ และยังแปลกใจถึงสองครั้งที่ผมใช้ AirPods กับ Mac และ Android โดยไม่มี iPhone
  • ลิงก์ Apple Support ที่อยู่ในบทความดูเหมือนจะเป็นเวอร์ชันอินเดีย ส่วนเวอร์ชันสหรัฐอยู่ที่นี่:
    https://support.apple.com/en-us/106340
    เวอร์ชันสหรัฐแสดงหมายเลขเฟิร์มแวร์ล่าสุดไม่เหมือนกัน เช่น AirPods Pro รุ่นที่ 2 เป็น 6F8 แต่เวอร์ชันอินเดียเป็น 6B34
  • ถ้ามีบทความที่ลงรายละเอียดการทำฟีเจอร์นี้บน Linux ด้วยก็คงน่าสนใจมาก
    รออ่านบทความภาคต่อเกี่ยวกับ การทำ implementation บน Linux
  • เฟิร์มแวร์ของ AirPods 2 ของผมยังเป็นเวอร์ชันเก่า และในฐานะผู้ใช้ก็ไม่มีทางสั่งให้อัปเดตบน iOS แบบชัดเจนได้เลย อีกทั้งยังไม่มีการแสดงด้วยว่าอัปเดตตอนไหน
    อยากมี สิทธิ์ควบคุมการอัปเดต มากกว่านี้
    • มีเขียนไว้ว่า “การอัปเดตเฟิร์มแวร์จะถูกส่งให้อัตโนมัติเมื่อ AirPods กำลังชาร์จและอยู่ในระยะ Bluetooth ของ iPhone, iPad หรือ Mac ที่เชื่อมต่อ Wi‑Fi”
      https://support.apple.com/en-us/106340
    • ยิ่ง AirPods ปัจจุบันและในอนาคตมีฟีเจอร์เพิ่มขึ้นมากเท่าไร ผมก็ยิ่งอยากให้มีวิธีสั่งอัปเดตเองได้ หรืออย่างน้อยมีการแจ้งเตือนว่าเกิดการอัปเดตขึ้นแล้ว
      สำหรับผู้ใช้ AirPods กว่า 95% อาจไม่จำเป็นต้องรู้เรื่องเฟิร์มแวร์อัปเดตเลยก็จริง แต่สำหรับคนที่ใส่ใจ ก็ควรมีวิธีให้ตรวจสอบได้ว่าเกิดอะไรขึ้น
      ปกติแล้วนี่ไม่ใช่ปัญหาใหญ่ แต่ผมเคยได้รับเฟิร์มแวร์ AirPods ช้ากว่าคนอื่นหลายวัน และในอนาคตอาจมีช่วงเวลาที่ การอัปเดตทันที สำคัญก็ได้
    • ถ้าคุณต้องการการควบคุมมากกว่านี้ ผลิตภัณฑ์ของ Apple อาจไม่เหมาะ
    • ผมอยากลองทุ่มเวลา reverse engineer เรื่องนี้ดู น่าจะสนุกดี
  • ช่องโหว่นั้นแน่นอนว่าไม่ดี แต่ผมอยากรู้ว่ามันร้ายแรงแค่ไหนในทางปฏิบัติ สิ่ง “น่ากลัว” ที่ผู้โจมตีทำได้คืออะไร
    ถ้าเป็นการตัดการเชื่อมต่อเดิม ก็ไม่น่าจะดักฟังการโทรหรือสตรีมเสียงโดยที่ผู้ใช้ไม่รู้ตัวได้ง่ายๆ ผมไม่แน่ใจว่าแย่สุดคือการสแกนหา MAC address ในระยะใกล้แล้วเชื่อมต่ออัตโนมัติเพื่อเล่นเสียงรบกวนเข้าหู หรือมันมีอะไรหนักกว่านั้น
    การแย่ง AirPods ของคนดังหรือนักการเมืองระหว่างวิดีโอคอลอาจพอเป็นไปได้ แต่ก็คงถูกสังเกตเห็นทันที เลยสงสัยว่ามีอะไรที่แย่กว่านั้นหรือไม่
    • ผู้โจมตีสามารถเล่นเสียงที่ ดังจนเป็นอันตราย ได้, แอบฟังเสียงรอบตัวของคนที่ใส่ AirPods อยู่แต่ไม่ได้ใช้งาน, และยังปลอมตัวเป็นผู้โทรได้โดยไม่ต้องผ่านบริการโทรหรือทิ้งประวัติการโทรไว้
      นอกจากนี้ การยึดการเชื่อมต่อ Bluetooth ได้ก็หมายถึงได้พื้นผิวการโจมตีที่กว้างพอสมควร ดังนั้นหากผู้โจมตีรู้ช่องโหว่อื่นอยู่แล้ว ก็อาจต่อยอดเป็นเชนของการโจมตีเพิ่มเติมได้
    • ในกรณีเลวร้ายที่สุด ใครสักคนอาจสร้างอุปกรณ์ที่สามารถโยนทิ้งไว้ในกระเป๋าแล้วบันทึกเสียงทุกอย่างจากหูฟังได้ อาจทำเป็นทรงคล้าย USB drive ก็ได้
      ดูเหมือนโปรโตคอล “Fast Connect” จะอนุญาตให้ “เชื่อมต่อ” กับหลายอุปกรณ์พร้อมกันได้ ผู้ใช้จึงอาจไม่สังเกตเห็น อีกแนวทางโจมตีหนึ่งคือเอาอุปกรณ์ทรง ที่รองแก้วกาแฟ ไปวางตามจุดต่างๆ ในออฟฟิศเหมือนเป็นของแม่บ้าน แล้วดักจับเสียงจาก AirPods แถวนั้น
      ส่วนที่ยากจริงๆ เหมือนจะถูกแก้ไปแล้ว เหลือแค่สร้างอุปกรณ์ที่มีแบตเตอรี่เล็กๆ ตัวส่ง Bluetooth และหน่วยเก็บข้อมูล เพื่อเก็บ เสียงคุณภาพสูง ใกล้ๆ บริเวณที่คนกำลังคุยกัน
    • หลายคนใส่ AirPods ค้างไว้ที่หูแม้ไม่ได้ใช้งานอยู่ ดังนั้นในกรณีแบบนั้นก็อาจใช้ไมโครโฟนแอบฟังบทสนทนาแบบเผชิญหน้าได้
      แต่ก็ยังต้องอยู่ในระยะ Bluetooth อยู่ดี ดังนั้นบางทีการแอบฟังแบบธรรมดาอาจง่ายกว่า
    • ในโลกความเป็นจริง สิ่งที่แย่ที่สุดก็น่าจะเป็นแค่การก่อกวนให้น่ารำคาญ
      ถ้ายังไม่ถูกแพตช์ ใครสักคนก็คงทำแอปก่อกวน AirPods สำหรับ Flipper Zero ขึ้นมาเพื่อทำให้เสียงใน AirPods ของทุกคนในที่สาธารณะหลุดแล้วสร้างความรำคาญ
  • ไปที่ Settings > Bluetooth > Your AirPods แล้วกด [i] ก็จะดูเวอร์ชันของ AirPods ได้ แม้ตอนนี้ AirPods จะไม่ได้เชื่อมต่ออยู่ก็ตาม
    ดูเหมือน 6A326 จะเป็นเวอร์ชันที่มีการแก้ไขนี้รวมอยู่
    https://support.apple.com/en-us/HT214111
    • มีเขียนว่า “AirPods Firmware Update 6A326, AirPods Firmware Update 6F8, and Beats Firmware Update 6F8” และอุปกรณ์ของผมเป็น 6F8
      น่าจะเป็นเวอร์ชันสำหรับ AirPods Pro รุ่นที่ 2
  • แม้จะรู้ว่าโอกาสน้อย แต่ก็หวังว่าเหตุการณ์นี้จะเป็นแรงผลักให้ Apple รองรับการ อัปเดต AirPods บน Android ได้ไม่ทางใดก็ทางหนึ่ง อย่างน้อยที่สุด
  • ไม่มีตัวเลือกให้อัปเดตแบบ manual มีแต่ อัปเดตอัตโนมัติ เท่านั้น และก็ไม่ชัดเจนด้วยว่าควรทำอย่างไรถึงจะกระตุ้นให้ระบบอัปเดตเอง
    • ถ้าจำไม่ผิด การลบ AirPods ออกหรือยกเลิกการจับคู่ แล้วบังคับจับคู่ใหม่ จะไป trigger การอัปเดตได้
  • นอกจากเรื่องแบตเตอรี่ไม่หมดแล้ว หูฟังมีสาย ก็มีข้อดีเพิ่มขึ้นมาอีกอย่าง
    • มันยังเชื่อมต่อได้เสถียรกว่าด้วย บน Linux นั้น Bluetooth คือหายนะ