ความสมบูรณ์ของระบบปฏิบัติการ
ซอฟต์แวร์ระบบปฏิบัติการของ Apple ได้รับการออกแบบมาโดยยึดถือความปลอดภัยเป็นสิ่งสำคัญ การออกแบบนี้ประกอบไปด้วยรากของความเชื่อถือฮาร์ดแวร์ซึ่งถูกนำมาใช้เพื่อเปิดใช้งานการเริ่มต้นระบบอย่างปลอดภัยและกระบวนการอัปเดตซอฟต์แวร์ที่ปลอดภัยซึ่งรวดเร็วและปลอดภัย ระบบปฏิบัติการของ Apple ยังใช้ความสามารถของฮาร์ดแวร์ที่ใช้ Silicon ที่สร้างขึ้นตามจุดประสงค์เพื่อช่วยป้องกันไม่ให้เกิดการใช้ประโยชน์ขณะที่ระบบทำงานอีกด้วย คุณสมบัติรันไทม์เหล่านี้จะปกป้องความสมบูรณ์ของโค้ดที่เชื่อถือแล้วในขณะที่โค้ดนั้นถูกเรียกใช้ สรุปแล้ว ซอฟต์แวร์ระบบปฏิบัติการของ Apple จะช่วยลดการโจมตีและเทคนิคการใช้ประโยชน์ต่างๆ ไม่ว่าจะมาจากแอปที่ประสงค์ร้าย จากเว็บ หรือผ่านช่องทางอื่นใดก็ตาม การปกป้องที่ระบุในที่นี้มีให้ใช้งานบนอุปกรณ์ที่มี SoC ที่ Apple ออกแบบและที่รองรับ ซึ่งรวมถึง iOS, iPadOS, tvOS, watchOS และตอนนี้รวมถึง macOS บน Mac ที่มี Apple Silicon
คุณสมบัติ | A10 | A11, S3 | A12, A13, A14 S4–S9 | A15, A16, A17 | M1, M2, M3 |
ดูหมายเหตุ 1 ด้านล่าง | |||||
ดูหมายเหตุ 2 ด้านล่าง |
หมายเหตุ 1: ระดับชั้นการปกป้องหน้า (PPL) กำหนดให้แพลตฟอร์มเรียกใช้เฉพาะรหัสที่ลงชื่อและเชื่อถือได้ นี่คือรูปแบบการรักษาความปลอดภัยที่ไม่สามารถใช้งานได้บน macOS
หมายเหตุ 2: การตรวจสอบ Page Table ที่ปลอดภัย (SPTM) รองรับบน A15, A16 และ A17 และแทนที่ระดับชั้นการปกป้องหน้าบนแพลตฟอร์มที่รองรับ
การปกป้องความสมบูรณ์ของเคอร์เนล
หลังจากที่เคอร์เนลของระบบปฏิบัติการเริ่มต้นทำงานแล้ว การปกป้องความสมบูรณ์ของเคอร์เนล (KIP) จะถูกเปิดใช้งานเพื่อช่วยป้องกันการแก้ไขโค้ดของเคอร์เนลและไดรเวอร์ ตัวควบคุมหน่วยความจำมอบพื้นที่หน่วยความจำทางกายภาพที่มีรหัสปกป้องซึ่ง iBoot ใช้ในการโหลดเคอร์เนลและส่วนขยายเคอร์เนล หลังจากที่การเริ่มต้นระบบเสร็จสมบูรณ์แล้ว ตัวควบคุมหน่วยความจำจะปฏิเสธการเขียนบนพื้นที่หน่วยความจำทางกายภาพที่มีรหัสปกป้อง หน่วยการจัดการหน่วยความจำ (MMU) ของหน่วยประมวลผลแอปพลิเคชันจะถูกกำหนดค่าเพื่อช่วยป้องกันการเทียบผังโค้ดที่มีสิทธิ์พิเศษจากหน่วยความจำทางกายภาพที่อยู่นอกพื้นที่หน่วยความจำที่มีรหัสปกป้อง และเพื่อช่วยป้องกันการเทียบผังแบบเขียนได้ของหน่วยความจำทางกายภาพภายในพื้นที่หน่วยความจำเคอร์เนล
ในการป้องกันไม่ให้กำหนดค่าอีกครั้ง ฮาร์ดแวร์ที่ใช้ในการเปิดใช้งาน KIP จะถูกล็อคหลังจากที่กระบวนการเริ่มการทำงานเสร็จสมบูรณ์
การจำกัดสิทธิ์อย่างรวดเร็ว
เริ่มต้นด้วย A11 Bionic SoC และ S3 SoC ของ Apple พื้นฐานฮาร์ดแวร์ใหม่ได้มีการนำมาใช้ โดยพื้นฐานนี้ ซึ่งเรียกว่าการจำกัดสิทธิ์อย่างรวดเร็ว จะมีรีจิสเตอร์ CPU ที่จำกัดสิทธิ์ต่อเธรดอย่างรวดเร็ว ด้วยการจำกัดสิทธิ์อย่างรวดเร็ว (หรือเรียกอีกอย่างว่ารีจิสเตอร์ APRR) ระบบปฏิบัติการที่รองรับสามารถเอาสิทธิ์การดำเนินการออกจากหน่วยความจำได้โดยไม่ต้องใช้โอเวอร์เฮดของการเรียกระบบและ Page Table Walk หรือ Page Table Flush รีจิสเตอร์เหล่านี้ให้การเยียวยาอีกขั้นสำหรับการโจมตีจากเว็บ โดยเฉพาะกับโค้ดที่รวบรวมในระหว่างรันไทม์ (การรวบรวมแบบ Just In Time) เนื่องจากหน่วยความจำไม่สามารถเรียกใช้ได้อย่างมีประสิทธิภาพขณะที่มีการอ่านและเขียนไปพร้อมกัน
การปกป้องความสมบูรณ์ของหน่วยประมวลผลร่วมของระบบ
เฟิร์มแวร์ของหน่วยประมวลผลร่วมจะจัดการงานที่สำคัญของระบบเป็นจำนวนมาก ตัวอย่างเช่น Secure Enclave, หน่วยประมวลผลเซ็นเซอร์ภาพ และหน่วยประมวลผลร่วมของการเคลื่อนไหว ดังนั้นความปลอดภัยของเฟิร์มแวร์นี้จึงถือเป็นส่วนสำคัญของความปลอดภัยของระบบโดยรวม ในการป้องกันการแก้ไขเฟิร์มแวร์ของหน่วยประมวลผลร่วม Apple จะใช้กลไกที่เรียกว่าการปกป้องความสมบูรณ์ของหน่วยประมวลผลร่วมของระบบ (SCIP)
SCIP ทำงานคล้ายกับการปกป้องความสมบูรณ์ของเคอร์เนล (KIP) มาก: ในระหว่างการเริ่มการทำงาน iBoot จะโหลดเฟิร์มแวร์ของหน่วยประมวลผลร่วมแต่ละรายการไปยังพื้นที่หน่วยความจำที่มีรหัสปกป้อง ซึ่งเก็บรักษาและแยกออกจากพื้นที่ KIP โดย iBoot จะกำหนดค่า Memory Management Unit ของหน่วยประมวลผลร่วมแต่ละรายการเพื่อช่วยป้องกันดังต่อไปนี้:
การเทียบผังที่สามารถเรียกใช้ได้นอกเหนือส่วนพื้นที่หน่วยความจำที่มีรหัสปกป้อง
การเทียบผังแบบเขียนได้ภายในส่วนพื้นที่หน่วยความจำที่มีรหัสปกป้อง
นอกจากนี้ในระหว่างการเริ่มการทำงาน ในการกำหนดค่า SCIP สำหรับ Secure Enclave ระบบปฏิบัติการ Secure Enclave จะถูกใช้งาน หลังจากที่กระบวนการเริ่มการทำงานเสร็จสมบูรณ์ ฮาร์ดแวร์ที่ใช้ในการเปิดใช้งาน SCIP จะถูกล็อค วิธีนี้ได้รับการออกแบบมาป้องกันการกำหนดค่าอีกครั้ง
รหัสการตรวจสอบสิทธิ์ตัวชี้
รหัสการตรวจสอบสิทธิ์ตัวชี้ (PAC) จะใช้เพื่อป้องกันการใช้ประโยชน์จากข้อผิดพลาดที่ทำให้หน่วยความจำเสียหาย ซอฟต์แวร์ระบบและแอปในตัวจะใช้ PAC เพื่อช่วยป้องกันการแก้ไขตัวชี้ฟังก์ชั่นและที่อยู่ส่งกลับ (ตัวชี้รหัส) PAC จะใช้ค่าลับแบบ 128 บิตห้าค่าเพื่อลงชื่อคำสั่งเคอร์เนลและข้อมูล และกระบวนการพื้นที่ผู้ใช้แต่ละกระบวนการจะมีกุญแจ B ของตัวเอง รายการจะได้รับการ salt และลงชื่อตามที่ระบุด้านล่างนี้
รายการ | กุญแจ | Salt |
---|---|---|
ที่อยู่ส่งกลับฟังก์ชั่น | IB | ที่อยู่พื้นที่จัดเก็บข้อมูล |
ตัวชี้ฟังก์ชั่น | IA | 0 |
ฟังก์ชั่นปิดกั้นการเรียกใช้ | IA | ที่อยู่พื้นที่จัดเก็บข้อมูล |
แคชวิธี Objective-C | IB | ที่อยู่พื้นที่จัดเก็บข้อมูล + คลาส + ตัวเลือก |
รายการ C++ V-Table | IA | ที่อยู่พื้นที่จัดเก็บข้อมูล + แฮช (ชื่อวิธีไม่สมบูรณ์) |
ป้าย Goto ที่มีการคำนวณ | IA | แฮช (ชื่อฟังก์ชั่น) |
สถานะเธรดของเคอร์เนล | GA | • |
รีจิสเตอร์สถานะเธรดของผู้ใช้ | IA | ที่อยู่พื้นที่จัดเก็บข้อมูล |
ตัวชี้ C++ V-Table | DA | 0 |
ค่าลายเซ็นจะถูกจัดเก็บในบิตการเติมเต็มที่ไม่ได้ใช้ที่ด้านบนของตัวชี้ 64 บิต โดยลายเซ็นดังกล่าวจะได้รับการตรวจสอบยืนยันก่อนการใช้งาน และการเติมเต็มจะถูกกู้คืนเพื่อช่วยให้การรับรองที่อยู่ตัวชี้ฟังก์ชั่น การตรวจสอบยืนยันผลลัพธ์ในการยกเลิกไม่สำเร็จ การตรวจสอบยืนยันนี้จะทำให้การโจมตีในหลากหลายรูปแบบดำเนินการได้ยากขึ้น เช่น การโจมตีการเขียนโปรแกรมแบบย้อนกลับ (ROP) ซึ่งจะพยายามหลอกอุปกรณ์ให้เรียกใช้โค้ดที่มีอยู่โดยมีประสงค์ร้ายโดยการควบคุมที่อยู่ส่งกลับฟังก์ชั่นที่จัดเก็บอยู่บนสแต็ค
ระดับชั้นการปกป้องหน้า
ระดับชั้นการปกป้องหน้า (PPL) ใน iOS, iPadOS และ watchOS ได้รับการออกแบบมาเพื่อป้องกันไม่ให้มีการแก้ไขโค้ดพื้นที่ผู้ใช้หลังจากตรวจสอบยืนยันลายเซ็นโค้ดเสร็จ ด้วยการสร้างบนการปกป้องความสมบูรณ์ของเคอร์เนลและการจำกัดสิทธิ์อย่างรวดเร็ว PPL จัดการสิทธิ์การแทนที่ Page Table เพื่อให้แน่ใจว่ามีเพียง PPL เท่านั้นที่สามารถเปลี่ยนหน้าที่มีการปกป้องที่มีโค้ดผู้ใช้และ Page Table ระบบช่วยลดพื้นหน้าของการโจมตีเป็นอย่างมากด้วยการรองรับการบังคับใช้ความสมบูรณ์ของโค้ดทั้งระบบแม้ในขณะที่เคอร์เนลถูกโจมตี การปกป้องนี้จะไม่มีให้ใช้ใน macOS เนื่องจาก PPL สามารถใช้ได้บนระบบที่มีการลงชื่อโค้ดทั้งหมดที่เรียกใช้เท่านั้น
การตรวจสอบ Page Table ที่ปลอดภัยและการตรวจสอบการทำงานที่เชื่อถือแล้ว
การตรวจสอบ Page Table ที่ปลอดภัย (SPTM) และการตรวจสอบการทำงานที่เชื่อถือแล้ว (TXM) ออกแบบมาให้ทำงานร่วมกันเพื่อช่วยปกป้อง Page Table สำหรับทั้งผู้ใช้และกระบวนการเคอร์เนลจากการแก้ไข แม้ว่าผู้โจมตีจะมีความสามารถในการเขียนเคอร์เนลและสามารถข้ามการปกป้องโฟลว์การควบคุมได้ก็ตาม SPTM ดำเนินการนี้โดยใช้ประโยชน์จากระดับสิทธิ์ที่สูงกว่าเคอร์เนล และใช้ประโยชน์จาก TXM ที่มีสิทธิ์ต่ำกว่าเพื่อบังคับใช้นโยบายตามจริงที่ควบคุมการดำเนินการของโค้ด ระบบนี้ได้รับการออกแบบมาเพื่อให้ความเสี่ยงของ TXM ไม่แปลเป็นการข้าม SPTM โดยอัตโนมัติเนื่องจากการแยกสิทธิ์นี้และการควบคุมความเชื่อถือระหว่างกัน ใน A15 SoC, A16 SoC และ A17 SoC, SPTM (ร่วมกับ TXM) จะทดแทน PPL ที่มีพื้นหน้าการโจมตีที่เล็กลงซึ่งไม่พึ่งพาความเชื่อถือของเคอร์เนลเพียงอย่างเดียวแม้ในช่วงแรกของการเริ่มการทำงาน SPTM ยังพึ่งพา Silicon พื้นฐานแบบใหม่ที่เป็นวิวัฒนาการของการจำกัดสิทธิ์อย่างรวดเร็วที่ PPL ใช้