รหัสผ่านรั่วไหลและปัญหาอื่น ๆ บน macOS
(wts.dev)รหัสผ่านรั่วไหล (และอีกมากมาย!) บน 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News
เขียนได้ดีมาก ทำให้นึกถึงเหตุการณ์ zero-day ที่ Apple ดูเหมือนจะพยายามปกปิดอยู่บ้าง เป็นกรณีที่สามารถข้ามการล็อกอิน root ได้ด้วยการ "ลองใช้รหัสผ่านว่างสองครั้ง" เหตุการณ์นี้น่าจะเกิดราวปี 2017 หรือ 2018
"ACLs don’t": <a href="https://waterken.sourceforge.net/aclsdont/current.pdf" rel="nofollow">https://waterken.sourceforge.net/aclsdont/current.pdf</a>
หากเปิดเผยกลไกที่ทำให้โปรเซสหนึ่งสามารถพร็อกซีคำขอ keychain ให้กับอีกโปรเซสได้ ก็อาจทำให้ความปลอดภัยของทั้งระบบอ่อนแอลง
มีการแก้ไขเล็กน้อยในบทความ
ใช้เวลาไป 8 ชั่วโมง แต่ตอนนี้โพสต์นี้ไม่อยู่ใน 5 อันดับแรกของหน้าแรกแล้ว (ตอนนี้อยู่ที่ #27 ยังอยู่หน้าแรกแต่ลงไปด้านล่าง) ขอบคุณสำหรับทุกความคิดเห็น
สงสัยว่าผู้เขียนได้ให้โค้ด PoC จริงมาด้วยหรือไม่ อยากทดสอบมาตรการบรรเทาผลกระทบ ดูตัวอย่างโค้ดแล้วแต่เหมือนยังไม่สมบูรณ์
เป็นบทความที่น่าสนใจมาก ไม่เคยรู้มาก่อนว่าการสร้าง Mach และ Darwin kernel มีเรื่องราวอยู่เบื้องหลังมากขนาดนี้
ตอนนี้ Mach ให้ความรู้สึกเหมือนเป็นแหล่งที่มาของบั๊กที่เชื่อถือได้ใน macOS รู้ว่า Apple กำลังพยายามอย่างหนักที่จะปิดล็อกทั้งหมดนี้ แต่ก็สงสัยว่ามีเส้นทางที่จะหลุดพ้นจาก Mach ได้อย่างสมบูรณ์หรือไม่
[dead]