การขยายเคอร์เนลอย่างปลอดภัยใน macOS
นับตั้งแต่ macOS 11 เป็นต้นไป ถ้าส่วนขยายเคอร์เนลของบริษัทอื่น (kext) เปิดใช้งานอยู่ ระบบจะไม่สามารถโหลด kext ลงในเคอร์เนลตามคำร้องขอได้ แต่จะผสานกับคอลเลกชั่นเคอร์เนลเสริม (AuxKC) แทน ซึ่งโหลดระหว่างกระบวนการเริ่มการทำงาน สำหรับ Mac ที่มี Apple Silicon การวัดของ AuxKC จะลงชื่อเข้า LocalPolicy (สำหรับฮาร์ดแวร์ก่อนหน้า AuxKC จะอยู่บนดิสก์โวลุ่มข้อมูล) การสร้าง AuxKC ใหม่ต้องได้รับอนุญาตจากผู้ใช้และต้องเริ่มการทำงาน macOS ใหม่เพื่อโหลดการเปลี่ยนแปลงไปยังเคอร์เนล และต้องกำหนดค่าการเริ่มต้นระบบอย่างปลอดภัยเป็นความปลอดภัยแบบลดลง
สิ่งสำคัญ: ไม่แนะนำให้ใช้ kext กับ macOS อีกต่อไป kext มีความเสี่ยงต่อความสมบูรณ์และความน่าเชื่อถือของระบบปฏิบัติการ Apple แนะนำให้ผู้ใช้เลือกโซลูชั่นที่ไม่จำเป็นต้องขยายเคอร์เนล
ส่วนขยายเคอร์เนลใน Mac ที่มี Apple Silicon
kext ต้องถูกเปิดใช้งานอย่างชัดเจนสำหรับ Mac ที่มี Apple Silicon โดยการกดปุ่มเปิด/ปิดค้างไว้เมื่อเริ่มต้นระบบเพื่อเข้าสู่โหมด One True Recovery (1TR) จากนั้นดาวน์เกรดเป็นความปลอดภัยแบบลดลงและทำเครื่องหมายกล่องเพื่อเปิดใช้งานส่วนขยายเคอร์เนล การทำงานนี้ยังต้องป้อนรหัสผ่านของผู้ดูแลระบบเพื่ออนุญาตให้ดาวน์เกรดอีกด้วย การรวมกันของ 1TR และข้อกำหนดด้านรหัสผ่านทำให้ผู้โจมตีเฉพาะซอฟต์แวร์ที่เริ่มต้นจากภายใน macOS ส่ง kext เข้าไปยัง macOS ได้ยากขึ้น ซึ่งจากนั้นผู้โจมตีจะสามารถใช้ประโยชน์เพื่อรับสิทธิ์เคอร์เนลแบบพิเศษได้
หลังจากผู้ใช้อนุญาตให้โหลด kext โฟลว์การโหลดส่วนขยายเคอร์เนลที่ผู้ใช้อนุญาตข้างต้นจะถูกใช้เพื่ออนุญาตให้ติดตั้ง kext การอนุญาตที่ใช้สำหรับโฟลว์ข้างต้นจะยังถูกใช้เพื่อบันทึกแฮช SHA384 ของรายการ kext ที่ผู้ใช้อนุญาต (UAKL) ใน LocalPolicy อีกด้วย จากนั้นดีมอนการจัดการเคอร์เนล (kmd
) จะรับผิดชอบในการตรวจสอบความถูกต้องเฉพาะ kext ที่พบใน UAKL เท่านั้นเพื่อรวมเข้ากับ AuxKC
ถ้าเปิดใช้งานการปกป้องความสมบูรณ์ของระบบ (SIP) ลายเซ็นของ kext แต่ละรายการจะได้รับการตรวจสอบยืนยันก่อนถูกรวมเข้าใน AuxKC
ถ้า SIP ปิดใช้งานอยู่ ลายเซ็น kext จะไม่ถูกบังคับใช้
วิธีการนี้จะทำให้โฟลว์ความปลอดภัยที่อนุญาตที่นักพัฒนาหรือผู้ใช้ที่ไม่ได้เป็นส่วนหนึ่งของ Apple Developer Program สามารถทดสอบ kext ก่อนลงชื่อได้
หลังจากสร้าง AuxKC การวัดจะถูกส่งไปยัง Secure Enclave เพื่อลงชื่อและรวมไว้ในโครงสร้างข้อมูล Image4 ซึ่ง iBoot สามารถประเมินได้เมื่อเริ่มต้นระบบ คำขอ kext จะถูกสร้างในฐานะส่วนหนึ่งของการสร้าง AuxKC ด้วยเช่นกัน คำขอนี้ประกอบด้วยรายการของ kext ที่ถูกรวมอยู่ใน AuxKC จริงๆ เนื่องจากชุดดังกล่าวอาจเป็นชุดย่อยของ UAKL หากพบ kext ที่ถูกแบน แฮช SHA384 ของโครงสร้างข้อมูล Image4 ของ AuxKC และคำขอ kext จะรวมอยู่ใน LocalPolicy iBoot จะใช้แฮช Image4 ของ AuxKC สำหรับการตรวจสอบยืนยันเพิ่มเติมเมื่อเริ่มต้นระบบเพื่อช่วยให้การรับรองว่าไม่สามารถเริ่มต้นระบบไฟล์ Image4 ของ AuxKC ที่ลงชื่อด้วย Secure Enclave แบบเก่าด้วย LocalPolicy ใหม่ได้ ระบบย่อย เช่น Apple Pay จะใช้คำขอ kext เพื่อระบุว่ามี kext ที่กำลังโหลดซึ่งอาจรบกวนความน่าไว้วางใจของ macOS ถ้ามี แสดงว่าความสามารถของ Apple Pay อาจถูกปิดใช้งาน
ส่วนขยายระบบ
macOS 10.15 ช่วยให้นักพัฒนาขยายขีดความสามารถของ macOS ได้โดยการติดตั้งและจัดการส่วนขยายระบบที่ทำงานในพื้นที่ผู้ใช้มากกว่าที่ระดับเคอร์เนล ด้วยการทำงานในพื้นที่ผู้ใช้ นั่นหมายความว่าส่วนขยายของระบบจะขยายความเสถียรและความปลอดภัยของ macOS แม้ว่าตามปกติแล้ว kext มีการเข้าถึงระบบปฏิบัติการทั้งระบบแบบทั้งหมด แต่ส่วนขยายที่ทำงานในพื้นที่ผู้ใช้จะได้รับเฉพาะสิทธิ์ที่จำเป็นในการใช้งานฟังก์ชั่นที่ระบุเท่านั้น
นักพัฒนาสามารถใช้เฟรมเวิร์ค รวมถึง DriverKit, EndpointSecurity และ NetworkExtension เพื่อเขียนไดรเวอร์สำหรับอินเทอร์เฟซ USB และอินเทอร์เฟซมนุษย์ เครื่องมือรักษาความปลอดภัยปลายทาง (เช่น การป้องกันข้อมูลสูญหายหรือเอเจ็นต์ปลายทางอื่นๆ) และ VPN และเครื่องมือเครือข่าย ทั้งหมดนี้ทำได้โดยไม่ต้องเขียน kext เอเจนต์ความปลอดภัยของบริษัทอื่นควรใช้เฉพาะเมื่อเอเจนต์เหล่านั้นใช้ประโยชน์จาก API หรือมีแผนงานที่สมบูรณ์สำหรับเปลี่ยนไปใช้เอเจนต์และอยู่ห่างจากส่วนขยายเคอร์เนล
การโหลดส่วนขยายเคอร์เนลที่ได้รับอนุญาตจากผู้ใช้
ในการปรับปรุงความปลอดภัย ผู้ใช้ต้องให้ความยินยอมในการโหลดส่วนขยายเคอร์เนลที่ติดตั้งด้วยหรือหลังการติดตั้ง macOS 10.13 กระบวนการนี้เรียกว่าการโหลดส่วนขยายเคอร์เนลที่ได้รับอนุญาตจากผู้ใช้ โดยต้องได้รับอนุญาตจากผู้ดูแลระบบเพื่ออนุญาตให้ใช้ส่วนขยายเคอร์เนล ส่วนขยายเคอร์เนลจะไม่ต้องขออนุญาตใช้งานหากเป็นกรณีดังต่อไปนี้:
ติดตั้งอยู่บน Mac เมื่อเรียกใช้ macOS 10.12 หรือก่อนหน้านี้
มาแทนที่ส่วนขยายที่ได้รับอนุญาตก่อนหน้านี้
ได้รับอนุญาตให้โหลดได้โดยไม่ได้รับความยินยอมจากผู้ใช้โดยใช้เครื่องมือบรรทัดคำสั่ง
spctl
ซึ่งจะใช้ได้เมื่อเริ่มการทำงาน Mac จาก recoveryOSได้รับอนุญาตให้โหลดได้โดยใช้การกำหนดค่าการจัดการอุปกรณ์เคลื่อนที่ (MDM)
เมื่อเริ่มต้นใช้งานด้วย macOS 10.13.2 ผู้ใช้สามารถใช้ MDM เพื่อระบุรายการส่วนขยายเคอร์เนลที่โหลดโดยไม่ได้รับความยินยอมจากผู้ใช้ได้ ตัวเลือกนี้ต้องใช้กับ Mac ที่ใช้ macOS 10.13.2 ซึ่งได้รับการลงทะเบียนใน MDM ผ่าน Apple School Manager, Apple Business Manager หรือการลงทะเบียน MDM ที่ทำโดยผู้ใช้