ว่าด้วย Apple Exclaves
(medium.com/@randomaugustine)- Exclaves ของ Apple เป็นฟีเจอร์แยกกักกันที่พยายามคงทรัพยากรอ่อนไหวบางส่วนไว้ในพื้นที่แยกต่างหาก แม้เคอร์เนล XNU จะถูกเจาะก็ตาม และการเปิดซอร์ส XNU สำหรับ M4·A18 ทำให้โครงสร้างบางส่วนถูกเปิดเผย
- แม้ XNU จะมีพื้นฐานจาก Mach แต่ฟังก์ชันของระบบจริง ๆ ถูกรวมไว้ในขอบเขตสิทธิ์เดียวกัน จึงทำงานคล้าย monolithic kernel และ Exclaves อยู่บนแนวทางการเพิ่มชั้นการป้องกันที่ต่อเนื่องมาจาก Secure Enclave, PPL และ SPTM
- Exclaves ประกอบด้วยโดเมนและทรัพยากรที่ถูกกำหนดตอนบูต โดยปกป้อง shared memory buffer, audio buffer, เซนเซอร์, Conclave, service ฯลฯ จาก XNU ด้วย page type ใหม่ของ SPTM
- Secure Kernel(SK) ทำงานบน application processor เดียวกับ XNU และจากเบาะแสในซอร์ส มีความเป็นไปได้ว่าจะใช้สายตระกูล seL4 และ ARM TrustZone secure world แต่รายละเอียดภายในส่วนใหญ่ยังไม่ถูกเปิดเผย
- ผลด้านความปลอดภัยจริงขึ้นอยู่กับว่าคอมโพเนนต์ใดถูกย้ายไปอยู่ใน Exclaves โดย build image ปัจจุบันบ่งชี้ถึงการใช้งานกับตัวแสดงสถานะความปลอดภัยของกล้อง·ไมโครโฟน, บางส่วนของ Apple Neural Engine, ไดรเวอร์บางตัว และคอมโพเนนต์สื่อสารกับ Secure Enclave
Monolithic kernel และแนวทางเพิ่มการแยกกักกันของ Apple
- ระบบปฏิบัติการสมัยใหม่โดยทั่วไปทำงานด้วยโดเมนการป้องกัน 2 แบบคือ user mode และ kernel mode
- แอปพลิเคชันไม่สามารถทำงานที่ต้องใช้สิทธิ์สูง เช่น การเข้าถึงไฟล์หรือการสื่อสารเครือข่าย ได้โดยตรง แต่ต้องร้องขอผ่าน system call ไปยังเคอร์เนล
- เคอร์เนลตรวจสอบสิทธิ์การเข้าถึงแล้วส่งผลลัพธ์ เช่น handle ที่แทนไฟล์ที่เปิดอยู่ กลับไปยัง user mode
- ระบบปฏิบัติการส่วนใหญ่ใช้โครงสร้าง monolithic kernel โดยเคอร์เนลมีสิทธิ์เข้าถึงฮาร์ดแวร์ หน่วยความจำ และข้อมูลผู้ใช้ทั้งหมดได้อย่างไม่จำกัด
- ยิ่งเคอร์เนลมีขนาดใหญ่ โอกาสเกิดช่องโหว่ก็ยิ่งมากขึ้น
- การใช้ประโยชน์จากช่องโหว่ของเคอร์เนลอาจนำไปสู่การเจาะระบบทั้งหมด
- microkernel สามารถลดฟังก์ชันภายในเคอร์เนล และย้ายงานส่วนใหญ่ไปเป็น process แยกที่ไม่มีสิทธิ์พิเศษ เพื่อปรับปรุงการแยกด้านความปลอดภัยได้
- ปัญหาด้านประสิทธิภาพและความซับซ้อนที่เพิ่มขึ้นของซอฟต์แวร์แอปพลิเคชันยังคงเป็นข้อเสีย
- XNU ที่ iOS, macOS, tvOS, visionOS, watchOS ใช้ร่วมกัน มีพื้นฐานจาก Mach microkernel แต่ในเชิง implementation ฟังก์ชันระบบหลายอย่างอยู่ในขอบเขตสิทธิ์เดียวกัน จึงทำงานแทบจะเหมือน monolithic kernel
การแยกกักกันด้านความปลอดภัยของ Apple ก่อน Exclaves
- ในปี 2013 iPhone 5s นำ Secure Enclave มาใช้
- OS ที่มีพื้นฐานจาก microkernel ชื่อ SepOS ทำงานบนคอร์ CPU เสริมความแข็งแกร่งเฉพาะทาง
- เคอร์เนลของ SepOS คือ cL4 ซึ่งเป็นเวอร์ชัน custom ของ L4-embedded โดย Apple
- ใช้ปกป้องกุญแจเข้ารหัสและข้อมูลชีวมิติอย่าง Face ID
- แม้เคอร์เนล iOS จะถูกเจาะ โดยทั่วไปก็จะไม่ได้รับผลกระทบ หากไม่มี exploit เพิ่มเติมที่เล็ง Secure Enclave เอง
- Secure Enclave และ Secure Exclaves เป็นคนละเป้าหมายกัน
- ในปี 2017 iPhone 8·iPhone X ที่ใช้ A11 นำ Page Protection Layer(PPL) มาใช้
- ให้สิทธิ์แก้ไข memory page table เฉพาะบางส่วนของเคอร์เนล และไม่ให้ส่วนที่เหลือของเคอร์เนลแก้ไขได้โดยตรง
- attack surface มีขนาดเล็กจึงถูก bypass ไม่บ่อย แต่ส่วนที่เหลือของเคอร์เนลยังคงมีสิทธิ์จำนวนมากที่จำเป็นต่อการละเมิดข้อมูล
- ในช่วงปี 2021~2023 A15 และ iOS 17 นำ Secure Page Table Monitor(SPTM) มาแทนและปรับปรุง PPL
- ปกป้องฟีเจอร์หน่วยความจำเพิ่มเติม และแยกกักกันในระดับคอมโพเนนต์เคอร์เนลขนาดเล็ก
- การตรวจสอบ code signing ที่ตรวจว่า Apple เซ็นหรือไม่ก็ถูกแยกออกมา
- ในช่วงนี้ ซอร์ส XNU ปรากฏการอ้างอิงทางอ้อมถึง exclaves และในตอนนั้นคาดว่าเป็น subsystem ที่ SPTM จัดการ
การปรากฏของ XNU Exclaves ในปี 2024
- การเปิดซอร์ส XNU ที่รองรับระบบบน M4·A18 ทำให้โครงสร้างบางส่วนของ Exclaves ถูกเปิดเผย
- เป้าหมายคือระบบอย่าง iPhone 16
- Exclaves ไม่ถูกเปิดใช้งานบนโปรเซสเซอร์รุ่นก่อนหน้า
- Exclaves หมายถึงทรัพยากรที่ถูกแยกออกจาก XNU และถูกออกแบบเป็นพื้นที่ที่ได้รับการปกป้องแม้เคอร์เนลจะถูกเจาะ
- ทรัพยากรถูกกำหนดล่วงหน้าตอน build OS
- ระบุด้วยชื่อหรือ ID
- มี type และถูก initialize ตอนบูต
- จัดเป็นโดเมนเฉพาะ
- SPTM ปกป้อง Exclave memory จาก XNU ด้วย page type เฉพาะสำหรับ Exclave
- resource type ที่ตรวจพบแสดงให้เห็นว่าเส้นแบ่งระหว่าง XNU กับ Exclave เกิดขึ้นที่ใด
- shared memory buffer ที่ XNU และ Exclave สามารถเข้าถึงร่วมกันได้
- จากมุมมอง XNU สามารถตั้งค่าเป็น read-only หรือ read-write ได้
- audio buffer และเซนเซอร์ที่ใช้กับความปลอดภัยของฟีเจอร์อย่างตัวแสดงการเข้าถึงกล้อง·ไมโครโฟน
- Conclave และ Conclave Manager ที่รวมทรัพยากรหลายรายการไว้ในโดเมนความปลอดภัยของตัวเอง
- service ที่สามารถรันโค้ดในพื้นที่ Exclave เมื่อ XNU thread เรียกใช้
- shared memory buffer ที่ XNU และ Exclave สามารถเข้าถึงร่วมกันได้
Secure Kernel และ secure world
- เพื่อให้ Exclave service ทำงานโดยแยกจาก XNU Apple ได้นำ Secure Kernel(SK) มาใช้
- ไฟล์ image ของ SK มี string เวอร์ชัน “cL4” อยู่
- โครงสร้าง IPC ดูใกล้เคียงกับ seL4 มากกว่า L4-embedded ของ SepOS cL4 เดิม
- string ใน SK ปรากฏคำศัพท์สาย seL4 บ่อย เช่น capability, frame, untyped memory, minting
- Apple เปิดเผยว่าเข้าร่วม seL4 Foundation ในเดือนเมษายน 2024
- ต่างจาก SepOS ที่ทำงานบนโปรเซสเซอร์เฉพาะ SK ทำงานบน application processor ความเร็วสูงเดียวกับ XNU/iOS
- โครงสร้างนี้ต้องมี privilege level ของโปรเซสเซอร์เพิ่มเติม และฐานที่เป็นไปได้ซึ่งถูกกล่าวถึง ได้แก่ virtualization extension, ฟีเจอร์เพิ่มเติมของ SPTM ของ Apple, และ ARM TrustZone
- ซอร์ส XNU มีการอ้างอิงเกี่ยวกับการสลับไปยัง secure world ของ TrustZone
- โครงสร้างถูกตีความว่า XNU และ iOS ทำงานใน insecure world ส่วน SK ทำงานใน secure world
- SK จัดเตรียมสภาพแวดล้อมปฏิบัติการที่จำกัดให้กับ Exclave, resource และ service
- แตกต่างจาก design pattern ของ Trusted Applications ที่ ARM เสนอ
- เนื่องจาก attack surface ของ Exclave service และ Secure Kernel มีขอบเขตจำกัด การหลุดออกจาก secure world เพื่อเจาะ XNU จึงอาจยากกว่าการโจมตี XNU โดยตรงจาก insecure world มาก
- ในซอร์ส XNU การสลับไปยัง secure world ถูกเรียกว่า RINGGATE
- ส่วนที่ว่า SPTM อาจจัดการการสลับนี้ยังเป็นเพียงการคาดเดา และพื้นที่ที่เกี่ยวข้องไม่ใช่โอเพนซอร์ส จึงต้องวิเคราะห์ไบนารี
โดเมน ทรัพยากร และ Conclave
- ระหว่างบูต XNU initialize โครงสร้างตารางเคอร์เนล 2 ชั้นเพื่อเก็บข้อมูล resource ของ Exclave ที่พบ
root_tableระบุโดเมนด้วยชื่อ- แต่ละโดเมนอ้างอิงตารางชั้นที่ 2 ที่เก็บ resource ของโดเมนนั้น
- โครงสร้างโดเมนที่ตรวจพบมีดังนี้
com.apple.kernel- รวมถึง Conclave launcher, debug service, ExclaveIndicatorController สำหรับไฟแสดงสถานะความปลอดภัย, log service, FrameMint ที่ใช้บูต ExclaveKit เป็นต้น
- รวมถึง shared memory buffer
com.apple.storage.backendที่ Exclave service ใช้ทำ file I/O ในพื้นที่ XNU ผ่าน upcall - รวมถึง resource ของ Conclave Manager ที่มีหนึ่งรายการต่อหนึ่ง Conclave
com.apple.darwin- ไม่พบกรณีใช้งานในคอมโพเนนต์โอเพนซอร์ส
com.apple.conclave.name- มีหนึ่งโดเมนต่อหนึ่ง Conclave
- อาจรวม service, audio buffer, shared memory buffer ฯลฯ
com.apple.driver.*name*- ถูกกล่าวถึงว่ามีอยู่เป็นโดเมนตาม device driver จากคอมเมนต์ แต่ยังไม่พบยืนยันจริงในโค้ดโอเพนซอร์ส
- Conclave เป็นทั้ง resource type ที่สามารถมีทรัพยากรหลายรายการ และเป็นหน่วยความปลอดภัยที่ให้ service และ resource มีการเข้าถึงร่วมกัน
- Mach task ถูกจำกัดว่าเรียก Conclave ใดได้บ้าง
- แต่ละ Conclave มี Conclave Manager อยู่ใน kernel domain
- Conclave มี lifecycle เช่น attach, launch, stop, detach
- ยังมีสถานะเปลี่ยนผ่าน เช่น launching, stopping
การสร้าง การเชื่อมต่อ และการรัน Conclave
posix_spawn()ของ XNU สามารถเรียกtask_add_conclave()เพื่อเชื่อม task กับ resource ของ Conclave Manager ได้- ความสัมพันธ์เป็นแบบ 1:1
- task หนึ่งเชื่อมได้กับ Conclave Manager เดียวเท่านั้น และในทางกลับกันก็เช่นกัน
- ผู้ที่ spawn Conclave ได้คือ launchd หรือ task ที่มี entitlement
com.apple.private.exclaves.conclave-spawn- entitlement
com.apple.private.exclaves.conclave-hostถูกตีความว่าใกล้เคียงกับสิทธิ์ในการ attach ตัวเอง มากกว่าการ spawn task ใหม่
- entitlement
- เคอร์เนลค้นหา resource ของ Conclave Manager ที่เชื่อมกับ Conclave เป้าหมายในโดเมน
com.apple.kernel- จากนั้นบันทึก endpoint ของ Tightbeam ที่ชี้ไปยัง Conclave Manager endpoint ไว้ใน struct resource ของ Conclave
- Tightbeam ดูเหมือนเป็น RPC framework สำหรับการสื่อสารระหว่างคอมโพเนนต์ Exclave
- การรัน Conclave ต้องทำจาก task ของ Conclave Manager ที่เชื่อมอยู่
- ความพยายาม launch จะรอจนกว่า Exclaves จะบูตสมบูรณ์ถึงสถานะ
EXCLAVES_BS_BOOTED_EXCLAVEKIT - Mach trap ใหม่จะเข้ามาที่ฟังก์ชัน
_exclaves_ctl_trap()และEXCLAVES_CTL_OP_LAUNCH_CONCLAVEใช้สำหรับรัน Conclave - ในสภาพแวดล้อม production Conclave host ที่ launch แล้วอาจกลายเป็นสถานะ tainted และหลังจากนั้น
exit()อาจทำให้เกิด kernel panic
- ความพยายาม launch จะรอจนกว่า Exclaves จะบูตสมบูรณ์ถึงสถานะ
Mach trap ใหม่สำหรับ Exclaves
_exclaves_ctl_trap()เป็น Mach trap ใหม่ที่จัดการฟีเจอร์ Exclave- ทำงานหลายแบบตามพารามิเตอร์ operation
- โดยทั่วไปจะตรวจสอบ entitlement ที่จำเป็นสำหรับ operation ที่ถูกเรียก
EXCLAVES_CTL_OP_BOOTถูกเรียกสองครั้งระหว่างบูตระบบ- เริ่ม Exclaves boot stage 2
- บูต ExclaveKit
- ผู้เรียกต้องเป็น launchd หรือมี entitlement
com.apple.private.exclaves.boot
- operation สำคัญอื่น ๆ อย่างน้อยต้องให้ task ปัจจุบันมี entitlement
com.apple.private.exclaves.kernel-domainหรือเป็น task ของ Conclave Manager ที่เกี่ยวข้องEXCLAVES_CTL_OP_LOOKUP_SERVICES: ค้นหา service ใน Exclave domain ของ task ปัจจุบัน และหากล้มเหลวจะตรวจโดเมน Darwin และ kernel ตามสิทธิ์EXCLAVES_CTL_OP_ENDPOINT_CALL: เรียก endpoint ของ Exclave service ในโดเมนของ task ปัจจุบัน ทำให้ thread ปัจจุบันสลับไปยัง secure world และรันโค้ดเฉพาะ- การสร้าง named buffer และ copyin/copyout
- การสร้าง audio buffer และ copyout
- การสร้าง sensor, start, stop, status
- notification resource lookup
Downcall และ Upcall
- Downcall คือการเรียก endpoint ของ Exclave service ที่อยู่ใน secure world และเป็นจุดที่การรันโค้ด secure world เริ่มต้น
- Downcall สลับ thread ปัจจุบันไปยัง secure world และเริ่มรันที่ entry point ของ secure code
- ไม่ใช่วิธีส่งงานให้ thread อื่น
- task ที่เรียกต้องมี kernel domain entitlement หรือเป็น task ของ Conclave Manager ที่เชื่อมกับ Conclave ของ service นั้น
- Conclave มี service ที่เรียกได้สูงสุด 128 รายการ
- ดูเหมือนว่า XNU schedule thread เข้าสู่ Secure Kernel ผ่าน
sk_enter()- มีความเป็นไปได้ว่า SK ไม่มี thread อิสระของตัวเอง และ XNU จัดการ thread scheduling ทั้งหมดของ secure world
- thread ที่กำลังรันใน secure world สามารถทำงาน scheduler ทั่วไป เช่น yield, wait, suspend, interrupt ได้
- ในกรณีนี้ thread จะออกจาก secure world กลับสู่ context ของเคอร์เนล XNU แล้วภายหลังถูก schedule กลับเข้า secure world อีกครั้งโดยโค้ด scheduling ของ Exclave
- โครงสร้าง IPC ของ Downcall ถูกตั้งเป็น request·response buffer ก่อนเข้าสู่ secure world
- ระหว่างเตรียมโครงสร้าง IPC request สุดท้ายและเรียก
sk_enter()interrupt และ preemption จะถูกปิด - เพราะโครงสร้างนี้มีเพียงหนึ่งชุดต่อ CPU core
- response ของ Downcall อาจกลับมาที่ per-core response buffer ของ CPU อื่นได้ เนื่องจากการหยุดชั่วคราว, upcall, yield, rescheduling
- ระหว่างเตรียมโครงสร้าง IPC request สุดท้ายและเรียก
- Upcall คือวิธีที่ thread ซึ่งกำลังรันใน secure world เรียก Exclaves upcall handler ผ่าน Tightbeam เมื่อจำเป็นต้องให้ XNU ช่วย
- จำกัดเฉพาะฟังก์ชัน XNU บางรายการที่อนุญาต
- thread ที่กำลัง upcall ไม่สามารถกลับไป user mode ได้
- ไม่อนุญาตให้ downcall กลับเข้าสู่ secure world ซ้ำเพื่อ re-enter ด้วย
- thread ต้องกลับไปยัง context ของ secure world ณ จุดที่ทำ upcall
- หมวด upcall ที่พบในซอร์ส ได้แก่ หน่วยความจำ, file storage, DriverKit, DriverKit Apple Neural Engine, การควบคุม Conclave
XNUProxy และขั้นตอนการบูต
- มีการอ้างอิงถึง XNUProxy จำนวนมาก แต่ตำแหน่งและบทบาทที่แน่นอนยังไม่ยืนยัน
- อาจเป็นโดเมน Exclave อิสระ
- อาจเป็น service หรือชุด service ในโดเมน
com.apple.kernelที่จัดการ downcall บางรายการ - อาจเป็น subsystem ของ SPTM ที่ทำ downcall ไปยัง secure world
- คอมเมนต์ใน
Exclaves_L4.hระบุว่า XNU Proxy ทำให้ Exclave หลายตัว reachable ได้- user app template
- audio driver
- ExclaveDriverKit
- SecureRTBuddy สำหรับ Always On Processor และ Display Coprocessor
- Conclave control, Conclave debug เป็นต้น
- การบูต Exclaves ต้องอาศัยการประสานงานระหว่าง insecure world และ secure world และเมื่อเกิดปัญหามักนำไปสู่
panic() - การบูตแบ่งเป็นสามขั้น
- Stage 1 ไม่ปรากฏในโอเพนซอร์ส และอาจเป็นกระบวนการ secure boot ที่โหลด SK ลงหน่วยความจำ ตรวจสอบ code signing แล้วทำให้รันได้
- Stage 2 ทำการ initialize upcall server, รวบรวมข้อมูลบูตของ secure kernel, initialize Exclave scheduler, initialize XrtHostedXNU kext, initialize multicore, initialize XNU Proxy, ค้นหา static Exclave resource, สร้าง Conclave Manager endpoint เป็นต้น
- Stage 3 ค้นหา service
com.apple.service.FrameMintแล้วทำการเรียกที่เกี่ยวข้องกับframemint_framemint__init(),framemint_framemint_populate()จากนั้นเข้าสู่สถานะEXCLAVES_BS_BOOTED_EXCLAVEKIT
SPTM memory type และข้อจำกัดที่เหลือ
- SPTM กำหนด type ให้ memory page เพื่อควบคุมการเข้าถึงตาม subsystem
- type เดิมมี
XNU_USER_EXEC,XNU_USER_DEBUG,XNU_USER_JIT,XNU_ROZONE,XNU_KERNEL_RESTRICTED, type ที่เกี่ยวกับ TXM·DART เป็นต้น
- type เดิมมี
- Exclaves เพิ่ม type ใหม่ที่เกี่ยวกับ SK
SK_DEFAULT: เฉพาะ SK, XNU เข้าถึงไม่ได้SK_IO: เฉพาะ SK, XNU เข้าถึงไม่ได้SK_SHARED_RO: SK และ XNU ใช้ร่วมกัน แต่ XNU อ่านได้อย่างเดียวSK_SHARED_RW: SK และ XNU ใช้ร่วมกัน และ XNU อ่าน·เขียนได้
- Exclaves อาจมองได้ว่าเป็นการลงทุนครั้งใหญ่เพื่อเพิ่ม defence in depth ให้ระบบปฏิบัติการของ Apple
- ลด attack surface ที่เป็นไปได้ด้วยการแยกทรัพยากรอ่อนไหว
- เป็นทิศทางที่ลดผลกระทบจากการเจาะเคอร์เนลเพียงจุดเดียว
- ยังไม่ได้วิเคราะห์โดยตรงว่าคอมโพเนนต์ใดถูกย้ายจากเคอร์เนลไปยัง Exclaves จริง ๆ
- build image บ่งชี้ถึงการใช้งานกับตัวแสดงสถานะกล้อง·ไมโครโฟนด้านความปลอดภัย, ฟังก์ชันบางส่วนของ Apple Neural Engine, device driver บางตัว, คอมโพเนนต์ที่สื่อสารกับ Secure Enclave
- ในอนาคตอาจมีคอมโพเนนต์มากขึ้นย้ายไปยัง Exclaves
- พื้นที่ XNU นอก Exclaves ยังคงเป็นเป้าหมายการโจมตี
- การวิเคราะห์อิงจาก Apple Open Source XNU build 11215
- ตำแหน่งที่แน่นอนของ ExclaveKit, ExclaveDriverKit, XNUProxy, วิธีสลับไปยัง secure world ของ XNU, Secure Kernel, secure world userspace ยังคงเป็นพื้นที่ที่ต้องวิเคราะห์เพิ่มเติม
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
SoC ในโทรศัพท์และแล็ปท็อปรุ่นล่าสุดของ Apple มี การรองรับฮาร์ดแวร์ nested virtualization รวมอยู่ด้วย และรวมถึง M4 iPad Pro ที่ใช้ exclave กับ LED ของกล้องด้วย
หวังว่าคู่มือ Apple Platform Security ฉบับปรับปรุงครั้งถัดไปจะกล่าวถึง SK exclave และมาตรการบรรเทาผลกระทบของเบสแบนด์สำหรับการตรวจจับเรดาร์ Wi‑Fi: https://help.apple.com/pdf/security/en_US/apple-platform-sec...
เกี่ยวกับฟังก์ชันเพิ่มเติมของ SPTM ของ Apple ก็มีบทความ reverse engineering ของ SPTM ด้วย: https://www.df-f.com/blog/sptm3
XNU กำลังถูกรีแฟกเตอร์ให้เป็นโครงสร้างที่ได้รับแรงบันดาลใจจาก microkernel โดยมีทิศทางที่จะลดฐานโค้ดและย้ายงานที่อ่อนไหวด้านความปลอดภัยออกไป การแยกพื้นที่หน่วยความจำได้รับการช่วยเหลือโดย Secure Page Table Monitor (SPTM) ส่วนงานอย่างการลงนามโค้ด การตรวจสอบสิทธิ์ Developer Mode และ Restricted Execution Mode นั้น Trusted eXecution Monitor (TXM) เป็นผู้รับผิดชอบ
CVE ที่เกี่ยวข้องกับ TrustZone มีมากกว่า 150 รายการ: https://www.cve.org/CVERecord/SearchResults?query=trustzone
Google เองก็เคยนำ pKVM ซึ่งใช้ฮาร์ดแวร์ nested virtualization มาใช้ใน Pixel เมื่อหลายปีก่อน และยังส่งโค้ดเข้า Linux mainline ที่ลดสิทธิ์ของ TrustZone แบบร่วมมือกันเมื่อเทียบกับ pKVM L0 ด้วย อย่างไรก็ดี นอกจาก VM “Linux Terminal” ของ Debian แล้ว ยังไม่ได้ประกาศฟีเจอร์ป้องกันที่ใช้ pKVM/AVF
ตอนแรกคาดเดาว่าใช้ TrustZone แต่ exclave ดูเหมือนอาจใช้ระดับสิทธิ์ของ SPTM เดิมและ GXF (Guarded Execution) ก็ได้ หากเป็นเช่นนั้น นอกจากข้อกำหนดเรื่อง RAM และความพยายามในการพัฒนาแล้ว อาจไม่มีเหตุผลพื้นฐานที่ทำให้รองรับบน iPhone 13 ขึ้นไปไม่ได้ แน่นอนว่าสำหรับ Apple แล้ว นี่ก็ยังเป็นงานมหาศาลอย่างไม่ต้องสงสัย
ดูเหมือนว่า Steve จะเชื่ออย่างจริงใจว่า “แล็ปท็อปคือไดอารีส่วนตัวของคนคนหนึ่ง” และ Apple มีหน้าที่ต้องปกป้องมัน
ผมคิดว่า Tim ก็คงไม่ได้เป็น CEO ถ้าเขาไม่มีความเชื่อแบบเดียวกับ Steve ฟังดูแปลก แต่ผมคิดถึง Steve จริง ๆ
https://www.youtube.com/watch?v=Ij-jlF98SzA
ผมก็ไม่ชอบวิธีที่ Apple ควบคุมตลาดอุปกรณ์และซอฟต์แวร์แม้หลังจากเจ้าของอุปกรณ์เปลี่ยนมือแล้ว ผมหลีกเลี่ยง ecosystem แบบนี้อย่างจริงจัง และไม่เข้าใจว่าทำไม “แฮ็กเกอร์” ที่เรียกกันจำนวนมากถึงหลงใหลระบบที่เชื่อมฝากระโปรงปิดตายไว้
หลายอย่างที่ Jobs เคยพูดยังสัมผัสใจอยู่จนถึงตอนนี้ เมื่อเร็ว ๆ นี้ Apple ออก screen saver “classic Mac” ซึ่งแสดงให้เห็นว่า GUI ของ Mac ดั้งเดิมถูกออกแบบอย่างประณีตแค่ไหน คงไม่มีใครคิดถึงยุคที่บั๊กของแอปทำให้ระบบปฏิบัติการล่ม แต่ผมก็อยากให้ Apple ยังคง หมกมุ่นกับรายละเอียด ได้เท่าตอนนั้น
พูดให้ตรงขึ้นหน่อย เหมือนว่ามันมีองค์ประกอบเชิงลึกลับหรือศาสนาอยู่ด้วย รู้สึกราวกับมีความโหยหาชายผู้ใจดีประดุจเทพ ที่จะมอบปาฏิหาริย์ คำทำนาย ผลิตภัณฑ์และพิธีกรรมอันงดงาม รวมถึงอนาคตที่ลื่นไหล มั่งคั่ง และเป็นนิรันดร์ให้ เป็นความรู้สึกเหมือน “รูโหว่” ทางจิตวิญญาณบางอย่างถูกเติมเต็ม
ไม่ได้ตั้งใจจะดูแคลนคนที่รู้สึกชอบ Jobs หรือ LLM แค่แบ่งปันสิ่งที่สังเกตเห็นเท่านั้น
เธรดที่เกี่ยวข้อง: “Apple rearranged its XNU kernel with exclaves” https://news.ycombinator.com/item?id=43314171
อีกทั้งการที่รีลีสย่อยระหว่างทางของ macOS ใส่ฟีเจอร์เพื่อเตรียมสำหรับเวอร์ชันเมเจอร์ถัดไปก็ไม่ใช่เรื่องแปลก โดยระบุว่า exclave อาจเป็นฟีเจอร์ที่พื้นฐานและสำคัญที่สุดที่ถูกเพิ่มเข้ามาใน Sonoma 14.4 และ iOS 17.4, iPadOS 17.4, watchOS 10.4
https://eclecticlight.co/2024/08/20/sonomas-unfinished-busin...
การใช้ secure exclave เพื่อควบคุม LED กล้องจริงนั้นค่อนข้างน่าประหลาดใจ และดูเหมือนเป็นการออกแบบที่ ซับซ้อนเกินจำเป็น สำหรับงานง่าย ๆ
แค่ใส่ลอจิกฮาร์ดแวร์เฉพาะขนาดเล็กมากไว้ในโมดูลกล้องก็น่าจะเพียงพอแล้ว เช่น gate สัญญาณดิจิทัล I/O หรือไฟเลี้ยงกล้อง และใส่ pulse stretcher ให้ LED ติดอย่างน้อยสองสามวินาทีทุกครั้ง เพื่อป้องกันการโจมตีที่เปิดปิดลอจิกกล้องอย่างรวดเร็ว
สำหรับไมโครโฟนก็ควรมีวงจรคล้ายกันและ LED จริงอีกสีหนึ่งแยกต่างหาก จุดที่แสดงด้วยซอฟต์แวร์บนหน้าจออย่างเดียวไม่เพียงพอ
ส่วนขับ LED ก็ต้องรู้ข้อมูลความสว่างหน้าจอหรือเซ็นเซอร์วัดแสงรอบข้างด้วย มันต้องสว่างพอให้มองเห็นได้แม้อยู่กลางแดดตรง ๆ แต่ความสว่างระดับนั้นในสภาพแวดล้อมมืดอาจน่ารำคาญและอาจรบกวนการใช้งานกล้องตามปกติได้
ถ้าเชื่อว่า SK ปลอดภัย การใช้มันก็น่าจะเรียบง่ายกว่าและทำได้ดีกว่า แต่ถ้ามองว่า SK ไม่ปลอดภัย สมมติฐานทั้งหมดก็พังอยู่ดี
โดยทั่วไป Apple ไม่ได้ตั้งใจทำให้ซับซ้อนโดยไม่มีเหตุผลอันสมควร
https://news.ycombinator.com/item?id=42260379
สงสัยว่าผู้เขียนบทความนี้เป็นใคร เขียนได้ประณีตและดีมาก และในฐานะคนที่ตามเรื่อง exclave อยู่ ก็ถือว่าสรุปได้ดี
สงสัยว่าสิ่งนี้เทียบกับ Virtualization Based Security ของ Linux อย่างไร
ตามหน้าที่มีวิดีโอ ฟีเจอร์ความปลอดภัยนี้สามารถเสริมความแข็งแกร่งให้เคอร์เนล และรับประกันว่าแม้เคอร์เนลจะถูกเจาะ ทรัพยากรสำคัญของเคอร์เนลก็จะไม่ถูกแก้ไขดัดแปลง VBS ใช้ hardware virtualization และ Hyper‑V ซึ่งเป็น hypervisor เพื่อสร้างสภาพแวดล้อมเสมือนที่แยกออกมาและทำงานในระดับความเชื่อถือที่สูงกว่า คือ Virtual Trust Level 1 (VTL1) และ VTL1 มีเคอร์เนลของตัวเองที่แยกจาก Guest kernel เรียกว่า Secure Kernel
https://lssna24.sched.com/event/1aIeD/linux-virtualization-b...
Exclave สำคัญ แต่ดูเหมือนเป็นขั้นกลาง Apple กำลังทำให้ XNU มีความเสี่ยงน้อยลง แต่ยังคงเคลื่อนไหวเชิงป้องกันมากกว่าจะยอมรับสถาปัตยกรรมแบบ microkernel อย่างเต็มตัว
ถ้าต้องเดิมพัน ผมว่า exclave น่าจะเป็นสะพานไปสู่การเปลี่ยนแปลงที่ใหญ่กว่า อาจเป็นระบบปฏิบัติการที่ modular มากขึ้นแบบ Fuchsia หรืออาจเป็น โมเดลความปลอดภัยแบบ CHERI ที่บังคับใช้ memory safety ในระดับฮาร์ดแวร์
Apple นำหน้าในด้านความปลอดภัยของระบบปฏิบัติการสำหรับผู้บริโภค แต่ exclave ดูใกล้เคียงกับการปรับปรุงแบบ patchwork มากกว่าผลลัพธ์ของการคิดใหม่ทั้งระบบ ถึงอย่างนั้นมันก็น่าจะเป็นการเปลี่ยนแปลงด้านความปลอดภัยที่ใหญ่ที่สุดในการออกแบบระบบปฏิบัติการกระแสหลักในรอบ 10 ปีที่ผ่านมา และคงต้องใช้เวลาอีกหลายปีกว่าผลกระทบทั้งหมดจะปรากฏชัด
ตอนที่ Mach ถูกสร้างขึ้น ความปลอดภัยยังไม่ใช่ประเด็นใหญ่เท่าตอนนี้ เครื่องในปัจจุบันมีประสิทธิภาพสูงมาก จน overhead ที่เกิดจากการสื่อสารระหว่างโปรเซสของ microkernel อาจกลายเป็นสิ่งที่มองข้ามได้แล้ว
ผมไม่คุ้นกับเนื้อหาระดับนี้ แต่ดูเหมือนว่าสามารถโจมตี enclave เองแล้วไต่สิทธิ์ขึ้นไปสูงกว่าเคอร์เนลได้ สงสัยว่าชิ้นส่วนฮาร์ดแวร์นี้เป็นอะไรคล้าย โปรเซสเซอร์ร่วม หรือเปล่า
ดังนั้นถ้า exploit มันได้ ก็จริงที่จะได้สิทธิ์เข้าถึงที่เคอร์เนลไม่มี แต่นั่นแหละคือเจตนา เป้าหมายคือแม้เคอร์เนลจะถูกเจาะ ก็ยังไม่ให้เข้าถึงพื้นที่อ่อนไหวนั้นได้
ตามเอกสารของ Apple ระบุว่าไม่ได้ใช้ SPTM เลยสงสัยว่าจะส่งผลต่อความปลอดภัยของ macOS อย่างไร: https://support.apple.com/guide/security/operating-system-in...
ตอนนี้สิ่งอย่าง exclave เดิมที่ใช้แสดงตัวบ่งชี้กล้องคงไม่ค่อยเกี่ยวกับ macOS มากนัก เพราะ MacBook มีฮาร์ดแวร์เฉพาะอยู่แล้ว แต่ในอนาคตอาจมี exclave ที่นำมาใช้กับ macOS ด้วย
กล่าวคือ ไม่ได้หมายความว่า macOS ไม่ใช้ SPTM แต่หมายความว่า macOS ไม่ได้ใช้ SPTM เพื่อบล็อกการรันโค้ดที่ไม่ได้ลงนาม เพราะ macOS ต้องเปิดให้ผู้ใช้รันโค้ดที่ไม่ได้ลงนามได้หลังผ่านขั้นตอนบางอย่าง
สงสัยว่านักพัฒนาแอปจะสามารถใช้ Exclave ได้หรือไม่ สิ่งที่ไม่พอใจคือ Apple มักสร้างฟีเจอร์ใหม่ที่น่าทึ่งไว้ใช้ภายใน แล้วปิดกั้นไม่ให้นักพัฒนาใช้โดยสิ้นเชิง ผลคือแอปธนาคาร กระเป๋าเงิน เมสเซนเจอร์ที่เน้นความปลอดภัย และอื่น ๆ ยังคงต้องทำงานในพื้นที่ผู้ใช้ที่มีความปลอดภัยอ่อนกว่า
ตัวอย่างง่าย ๆ คือ macOS รุ่นล่าสุดรันทุกแอปภายใน sandbox แม้แอปจะไม่ได้เลือกใช้อย่างชัดเจนก็ตาม sandbox นี้ป้องกันไม่ให้แอปต่าง ๆ แก้ไขไฟล์ของกันและกัน ซึ่งก่อนหน้านี้เป็นจุดอ่อนใหญ่ของระบบความปลอดภัย เพราะลายเซ็นของ bundle จะถูกตรวจสอบเฉพาะตอนรันครั้งแรกเท่านั้น ไม่ได้ตรวจทุกครั้งที่รัน
ตอนนี้ยังเป็นโครงสร้างแบบ kernel ต่อ kernel ด้วย ดังนั้นหากมีการรองรับบุคคลที่สาม ก็น่าจะจำกัดอยู่แค่ระดับการใช้งานอย่างไดรเวอร์อุปกรณ์ความปลอดภัยเท่านั้น แต่ Apple พยายามผลักดันไดรเวอร์ของบุคคลที่สามออกจาก hypervisor ไปอยู่ในพื้นที่ผู้ใช้ เมื่อดูว่าการเปลี่ยนผ่านนี้เกิดขึ้นควบคู่กับการพัฒนา exclave ก็ไม่น่าจะเปลี่ยนทิศทางไปให้นักพัฒนาไดรเวอร์บุคคลที่สามใช้ exclave
เป็นเรื่องปกติที่ Apple จะทำให้ฟีเจอร์แพลตฟอร์มระดับ kernel-enforced แบบนี้เสถียรมากขึ้นภายในก่อนจะเปิดเผยต่อภายนอก pointer authentication ของ arm64e ก็เป็นตัวอย่างที่คล้ายกัน