1 คะแนน โดย GN⁺ 2025-03-21 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

รหัสผ่านรั่วไหล (และอีกมากมาย!) บน macOS

บทนำ

บทความนี้อธิบายช่องโหว่ CVE-2024-54471 ที่รวมอยู่ในการอัปเดตความปลอดภัยของ Apple ช่องโหว่นี้ได้รับการแพตช์แล้วใน macOS Sequoia 15.1, macOS Sonoma 14.7.1, macOS Ventura 13.7.1 หากคุณใช้อุปกรณ์ macOS ขอแนะนำให้อัปเดตเป็นเวอร์ชันล่าสุด

เคอร์เนลคืออะไร?

ในระบบปฏิบัติการ โค้ดที่สื่อสารกับฮาร์ดแวร์และจัดเตรียมโมเดลมัลติทาสก์ให้แอปพลิเคชันเรียกว่า เคอร์เนล เคอร์เนลของ macOS คือ XNU ซึ่งเป็นเคอร์เนลแบบไฮบริดที่รวมตัวแปรของเคอร์เนล BSD และเคอร์เนล Mach

ประวัติของ Mach

เคอร์เนล Mach มีความเกี่ยวพันอย่างลึกซึ้งกับสงคราม Unix ในช่วงทศวรรษ 1980 และ 1990 Mach เริ่มต้นจากโครงการวิจัยระบบปฏิบัติการที่มหาวิทยาลัย Carnegie Mellon และถูกนำไปใช้ในระบบปฏิบัติการ NeXTSTEP ซึ่งท้ายที่สุดได้กลายเป็นรากฐานของ macOS

ทำไมต้อง Mach?

Mach ถูกพัฒนาขึ้นเพื่อลดความซับซ้อนของการออกแบบและการใช้งานระบบ Unix Mach ประกอบด้วยนามธรรมพื้นฐาน 4 อย่าง ซึ่งยังคงถูกใช้งานอยู่ใน macOS สมัยใหม่

สถาปัตยกรรมของ Mach

นามธรรม 4 อย่าง

  • ทาสก์: สภาพแวดล้อมที่เธรดสามารถทำงานได้ และเป็นหน่วยพื้นฐานของการจัดสรรทรัพยากร
  • เธรด: หน่วยพื้นฐานของการใช้ CPU ซึ่งทำงานภายในทาสก์ด้วยโปรแกรมเคาน์เตอร์ที่เป็นอิสระ
  • พอร์ต: ช่องทางการสื่อสารสำหรับข้อความ ซึ่งได้รับการปกป้องโดยเคอร์เนล
  • ข้อความ: ชุดของอ็อบเจ็กต์ข้อมูลที่ใช้สำหรับการสื่อสารระหว่างเธรด

ทาสก์ พอร์ต และสิทธิ์ของพอร์ต

พอร์ตมีอยู่เฉพาะในพื้นที่เคอร์เนล และถูกเปิดเผยในพื้นที่ผู้ใช้ในรูปของสิทธิ์ของพอร์ต หลายทาสก์สามารถมีสิทธิ์ส่งไปยังพอร์ตเดียวกันได้ แต่สิทธิ์รับสามารถมีได้โดยทาสก์เดียวเท่านั้น

โครงสร้างของข้อความ

ข้อความ Mach แต่ละรายการประกอบด้วยส่วนหัว ตัวบรรยายเสริมที่เป็นทางเลือก เพย์โหลดตามอำเภอใจ และตัวตามท้ายที่เคอร์เนลเพิ่มเข้ามา

วิธีการได้รับสิทธิ์ส่ง

บน macOS มี bootstrap server ซึ่งถือสิทธิ์รับของพอร์ตที่ทุกทาสก์มีสิทธิ์ส่งอยู่ ไคลเอนต์สามารถร้องขอสิทธิ์ส่งสำหรับบริการ Mach ที่มีชื่อเฉพาะจาก bootstrap server ได้

Mach Interface Generator (MIG)

บทนำ

MIG เป็นเครื่องมือสำหรับสร้างอินเทอร์เฟซเชิงฟังก์ชันเพื่อส่งและรับข้อความของ Mach โดยมอบอินเทอร์เฟซแบบ RPC ที่อิงกับข้อความ ซึ่งช่วยเพิ่มความปลอดภัยของหน่วยความจำ

รายละเอียดทางเทคนิค

MIG เป็นตัวห่อหุ้มของข้อความ Mach โดยแต่ละฟังก์ชันจะถูกเรียกว่า routine และชุดของ routine จะถูกเรียกว่า subsystem subsystem จะถูกทำดัชนีในฟิลด์ message ID

ช่องโหว่ในเซิร์ฟเวอร์ MIG

ความปลอดภัยของเซิร์ฟเวอร์ MIG

หากเซิร์ฟเวอร์ MIG ไม่ตรวจสอบผู้ส่งข้อความ ทาสก์ที่มีสิทธิ์ส่งก็จะสามารถเรียกใช้ routine ของเซิร์ฟเวอร์ได้

การค้นหาเซิร์ฟเวอร์ MIG

สามารถใช้เครื่องมือ CLI ipsw เพื่อค้นหาไบนารีที่ใช้สัญลักษณ์ NDR_record ได้ ซึ่งมีประโยชน์สำหรับการค้นหาเซิร์ฟเวอร์และไคลเอนต์ของ MIG

ช่องโหว่ของ NetAuthAgent

แนะนำ NetAuthAgent

NetAuthAgent เป็นดีมอนที่จัดการข้อมูลรับรองของไฟล์เซิร์ฟเวอร์บน macOS ก่อนที่ช่องโหว่นี้จะถูกแพตช์ มันจะให้ข้อมูลรับรองของเซิร์ฟเวอร์เมื่อมีการร้องขอ

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

NetAuthAgent ใช้ keychain ของ macOS เพื่อจัดเก็บข้อมูลรับรอง keychain เป็นตัวจัดการความลับแบบรวมศูนย์ และแต่ละรายการจะมีรายการควบคุมการเข้าถึงของตัวเอง

เซิร์ฟเวอร์ MIG ของ NetAuthAgent

NetAuthAgent เปิดเผยเซิร์ฟเวอร์ MIG ที่ลงทะเบียนกับ bootstrap server ภายใต้ชื่อ com.apple.netauth.user.gui เซิร์ฟเวอร์นี้มี routine สำหรับอ่าน สร้าง และเขียนทับข้อมูลรับรองได้

ผลกระทบของช่องโหว่

การเปิดเผยโทเค็น iCloud API

ช่องโหว่นี้อาจเปิดเผยโทเค็น iCloud API ทำให้ผู้โจมตีสามารถขโมยข้อมูลผู้ใช้หรือติดตามตำแหน่งของอุปกรณ์อื่นได้

สิ่งที่ Apple ควรทำ

บทความนี้มีการอภิปรายว่า Apple ควรดำเนินมาตรการใดเพื่อแก้ไขช่องโหว่นี้

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

 
GN⁺ 2025-03-21
ความคิดเห็นจาก Hacker News
  • เขียนได้ดีมาก ทำให้นึกถึงเหตุการณ์ zero-day ที่ Apple ดูเหมือนจะพยายามปกปิดอยู่บ้าง เป็นกรณีที่สามารถข้ามการล็อกอิน root ได้ด้วยการ "ลองใช้รหัสผ่านว่างสองครั้ง" เหตุการณ์นี้น่าจะเกิดราวปี 2017 หรือ 2018

    • เมื่อป้อนชื่อผู้ใช้แอดมินแล้วพยายามล็อกอินด้วยรหัสผ่านว่าง ตอนแรกจะมีคำเตือนว่ารหัสผ่านไม่ถูกต้อง
    • หากเพิกเฉยต่อคำเตือนแล้วกดปุ่มล็อกอินเป็นครั้งที่สอง ก็จะล็อกอินเข้าเป็นผู้ใช้นั้นได้
    • ปัญหานี้ถูกแพตช์ไม่นานหลังจากแพร่กระจายบนโซเชียลมีเดีย ถึงอย่างนั้นก็ยังดูเป็นความผิดพลาดครั้งใหญ่
    • ดูเหมือนว่ากลไกการยืนยันตัวตนของ Mac ยังมีปัญหาอยู่ การที่มีการกล่าวถึงระบบพอร์ตก็น่าสนใจ เป็นข้อเท็จจริงเกี่ยวกับ Mach kernel ที่ไม่ค่อยมีคนรู้
  • "ACLs don’t": <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>;

  • หากเปิดเผยกลไกที่ทำให้โปรเซสหนึ่งสามารถพร็อกซีคำขอ keychain ให้กับอีกโปรเซสได้ ก็อาจทำให้ความปลอดภัยของทั้งระบบอ่อนแอลง

    • นี่ดูเหมือนเป็นตัวอย่างของปัญหา confused deputy: <a href="https://en.wikipedia.org/wiki/Confused_deputy_problem" rel="nofollow">https://en.wikipedia.org/wiki/Confused_deputy_problem</a>;
    • การออกแบบแบบ capability-based น่าจะสามารถป้องกันปัญหาแบบนี้ได้อย่างเป็นระบบ
  • มีการแก้ไขเล็กน้อยในบทความ

    • การตรวจสอบสิทธิ์ไม่ได้อยู่ใน Mach layer ของเคอร์เนล
    • <a href="https://github.com/nmggithub/wts/commit/2bdce1c0c76c7adc360e17a6a42ee547462b99d3" rel="nofollow">https://github.com/nmggithub/wts/…;
    • เป็นการเปลี่ยนคำเพียงคำเดียวเพื่อแก้ข้อผิดพลาดด้านข้อเท็จจริงเกี่ยวกับวิธีการทำงานของ XNU
  • ใช้เวลาไป 8 ชั่วโมง แต่ตอนนี้โพสต์นี้ไม่อยู่ใน 5 อันดับแรกของหน้าแรกแล้ว (ตอนนี้อยู่ที่ #27 ยังอยู่หน้าแรกแต่ลงไปด้านล่าง) ขอบคุณสำหรับทุกความคิดเห็น

  • สงสัยว่าผู้เขียนได้ให้โค้ด PoC จริงมาด้วยหรือไม่ อยากทดสอบมาตรการบรรเทาผลกระทบ ดูตัวอย่างโค้ดแล้วแต่เหมือนยังไม่สมบูรณ์

    • สงสัยว่าในทางปฏิบัติแล้วมีความเสี่ยงอะไรบ้าง
  • เป็นบทความที่น่าสนใจมาก ไม่เคยรู้มาก่อนว่าการสร้าง Mach และ Darwin kernel มีเรื่องราวอยู่เบื้องหลังมากขนาดนี้

  • ตอนนี้ Mach ให้ความรู้สึกเหมือนเป็นแหล่งที่มาของบั๊กที่เชื่อถือได้ใน macOS รู้ว่า Apple กำลังพยายามอย่างหนักที่จะปิดล็อกทั้งหมดนี้ แต่ก็สงสัยว่ามีเส้นทางที่จะหลุดพ้นจาก Mach ได้อย่างสมบูรณ์หรือไม่

  • [dead]