
ความสมบูรณ์ของระบบปฏิบัติการ
Apple ออกแบบซอฟต์แวร์ระบบปฏิบัติการโดยมีหัวใจสำคัญคือความปลอดภัย การออกแบบนี้ประกอบไปด้วยรากของความเชื่อถือฮาร์ดแวร์ที่ทำให้สามารถเริ่มต้นระบบอย่างปลอดภัยและดำเนินกระบวนการอัปเดตซอฟต์แวร์ที่ปลอดภัยซึ่งรวดเร็วและปลอดภัย ระบบปฏิบัติการของ Apple ยังใช้ความสามารถของฮาร์ดแวร์ที่ใช้ Silicon ที่สร้างขึ้นตามจุดประสงค์เพื่อช่วยป้องกันไม่ให้เกิดการใช้ประโยชน์ขณะที่ระบบปฏิบัติการทำงานอีกด้วย คุณสมบัติรันไทม์เหล่านี้จะปกป้องความสมบูรณ์ของโค้ดที่เชื่อถือแล้วในขณะที่โค้ดนั้นถูกเรียกใช้ ซอฟต์แวร์ระบบปฏิบัติการของ Apple จะช่วยลดการโจมตีและเทคนิคการใช้ประโยชน์ต่างๆ ไม่ว่าจะมาจากแอปที่ประสงค์ร้าย จากเว็บ หรือผ่านช่องทางอื่นใดก็ตาม การปกป้องเหล่านี้มีให้ใช้งานบนอุปกรณ์ที่มี SoC ที่ Apple ออกแบบและที่รองรับ ซึ่งรวมถึง iOS, iPadOS, macOS บน Mac ที่มี Apple Silicon, tvOS, visionOS และ watchOS
คุณสมบัติ | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
Memory Integrity Enforcement ที่มีส่วนขยายการติดแท็กหน่วยความจำที่ได้รับการปรับปรุง |
|
|
|
|
|
|
|
1: Secure Page Table Monitor (SPTM) รองรับใน SOC เวอร์ชั่น A15 ขึ้นไปและ M2 ขึ้นไป และแทนที่ระดับชั้นการปกป้อง Page บนแพลตฟอร์มที่รองรับ
2: ระดับชั้นการปกป้อง Page (PPL) และ Secure Page Table Monitor (SPTM) จะบังคับใช้การทำงานของโค้ดที่ลงชื่อและโค้ดที่เชื่อถือแล้วบนแพลตฟอร์มทั้งหมด ยกเว้น macOS (เนื่องจาก macOS ได้รับการออกแบบมาเพื่อเรียกใช้โค้ดใดก็ได้) คุณสมบัติความปลอดภัยอื่นๆ ทั้งหมด รวมถึงการปกป้อง Page Table จะมีอยู่ในทุกแพลตฟอร์มที่รองรับ
การปกป้องความสมบูรณ์ของเคอร์เนล
หลังจากที่เคอร์เนลของระบบปฏิบัติการเริ่มต้นทำงานแล้ว การปกป้องความสมบูรณ์ของเคอร์เนล (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 | ที่อยู่พื้นที่จัดเก็บข้อมูล |
ตัวชี้ตัวอธิบายบล็อก | DA | ที่อยู่พื้นที่จัดเก็บข้อมูล + 0xC0BB |
แคชวิธี Objective-C | IB | ที่อยู่พื้นที่จัดเก็บข้อมูล + คลาส + ตัวเลือก |
ตัวชี้ Objective-C Isa | DA | ที่อยู่พื้นที่จัดเก็บข้อมูล + 0x6AE1 |
ตัวชี้ Objective-C Super | DA | ที่อยู่พื้นที่จัดเก็บข้อมูล + 0xB5AB |
Objective-C ivars ประเภทตัวเลือก | DB | ที่อยู่พื้นที่จัดเก็บข้อมูล + 0x57C2 |
ตัวชี้ข้อมูลคลาสอ่านอย่างเดียว Objective-C | DA | ที่อยู่พื้นที่จัดเก็บข้อมูล + 0x61F8 |
รายการ C++ V-Table | IA | ที่อยู่พื้นที่จัดเก็บข้อมูล + แฮช (ชื่อวิธีไม่สมบูรณ์) |
ตัวชี้ C++ V-Table | DA | ที่อยู่พื้นที่จัดเก็บข้อมูล + แฮช (ชื่อ V-Table ฐานไม่สมบูรณ์) |
ป้าย Goto ที่มีการคำนวณ | IA | แฮช (ชื่อฟังก์ชั่น) |
สถานะเธรดของเคอร์เนล | GA | • |
ทะเบียนสถานะเธรดของผู้ใช้ | IA | ที่อยู่พื้นที่จัดเก็บข้อมูล |
ค่าลายเซ็นจะถูกจัดเก็บในบิตการเติมเต็มที่ไม่ได้ใช้ที่ด้านบนของตัวชี้ 64 บิต โดยลายเซ็นดังกล่าวจะได้รับการตรวจสอบยืนยันก่อนการใช้งาน และการเติมเต็มจะถูกกู้คืนเพื่อช่วยให้การรับรองที่อยู่ตัวชี้ฟังก์ชั่น การตรวจสอบยืนยันผลลัพธ์ในการยกเลิกไม่สำเร็จ การตรวจสอบยืนยันนี้จะทำให้การโจมตีในหลากหลายรูปแบบดำเนินการได้ยากขึ้น เช่น การโจมตีการเขียนโปรแกรมแบบย้อนกลับ (ROP) ซึ่งจะพยายามหลอกอุปกรณ์ให้เรียกใช้โค้ดที่มีอยู่โดยมีประสงค์ร้ายโดยการควบคุมที่อยู่ส่งกลับฟังก์ชั่นที่จัดเก็บอยู่บนสแต็ค
ระดับชั้นการปกป้อง Page
ระดับชั้นการปกป้องหน้า (PPL) ใน iOS, iPadOS, visionOS และ watchOS ได้รับการออกแบบมาเพื่อป้องกันไม่ให้มีการแก้ไขโค้ดพื้นที่ผู้ใช้หลังจากตรวจสอบยืนยันลายเซ็นโค้ดเสร็จ การต่อยอดจาก KIP และการจำกัดสิทธิ์อย่างรวดเร็วช่วยให้ PPL จัดการสิทธิ์การแทนที่ Page Table เพื่อให้แน่ใจว่ามีเพียง PPL เท่านั้นที่สามารถเปลี่ยนหน้าที่มีการปกป้องที่มีโค้ดผู้ใช้และ Page Table ได้ ระบบช่วยลดช่องทางการโจมตีเป็นอย่างมากด้วยการรองรับการบังคับใช้ความสมบูรณ์ของโค้ดทั้งระบบแม้ในขณะที่เคอร์เนลถูกโจมตี การปกป้องนี้จะไม่มีให้ใช้ใน macOS เนื่องจาก PPL สามารถใช้ได้บนระบบที่มีการลงชื่อโค้ดทั้งหมดที่เรียกใช้เท่านั้น
Secure Page Table Monitor และการตรวจสอบการทำงานที่เชื่อถือแล้ว
Secure Page Table Monitor (SPTM) และการตรวจสอบการทำงานที่เชื่อถือแล้ว (TXM) ใน iOS, iPadOS, macOS และ visionOS ได้รับการออกแบบมาให้ทำงานร่วมกันเพื่อช่วยปกป้อง Page Table สำหรับทั้งผู้ใช้และกระบวนการเคอร์เนลจากการแก้ไข ซึ่งรวมถึงกรณีที่ผู้โจมตีจะมีความสามารถในการเขียนเคอร์เนลและสามารถข้ามการปกป้องโฟลว์การควบคุมได้ด้วย SPTM ดำเนินการนี้โดยใช้ประโยชน์จากระดับสิทธิ์ที่สูงกว่าเคอร์เนล และใช้ประโยชน์จาก TXM ที่มีสิทธิ์ต่ำกว่าเพื่อบังคับใช้นโยบายตามจริงที่ควบคุมการดำเนินการของโค้ด ระบบนี้ได้รับการออกแบบมาเพื่อให้ความเสี่ยงของ TXM ไม่แปลเป็นการข้าม SPTM โดยอัตโนมัติเนื่องจากการแยกสิทธิ์นี้และการควบคุมความเชื่อถือระหว่างกัน ใน SOC เวอร์ชั่น A15 ขึ้นไปและ M2 ขึ้นไป SPTM (ร่วมกับ TXM) จะทดแทน PPL ที่มีช่องทางการโจมตีที่เล็กลงซึ่งไม่พึ่งพาความเชื่อถือของเคอร์เนลเพียงอย่างเดียวแม้ในช่วงแรกของการเริ่มการทำงาน SPTM จะใช้ Silicon Primitive ใหม่ซึ่งเป็นการพัฒนาของการจำกัดสิทธิ์อย่างรวดเร็วที่ PPL ใช้ และมีบนหน่วยประมวลผลที่ระบุในตารางด้านบนเท่านั้น
Memory Integrity Enforcement
Memory Integrity Enforcement (MIE) คือการป้องกันความปลอดภัยของหน่วยความจำที่ครอบคลุมสำหรับแพลตฟอร์ม Apple ที่มีบนหน่วยประมวลผล A19 และ M5 ขึ้นไป MIE ต่อยอดจากรากฐานที่แข็งแกร่งที่ได้มาจากตัวจัดสรรหน่วยความจำที่ปลอดภัยของ Apple จับคู่กับส่วนขยายการติดแท็กหน่วยความจำที่ได้รับการปรับปรุง (EMTE) ในโหมดซิงโครนัส และรองรับโดยนโยบายการบังคับใช้การรักษาความลับแท็กที่ครอบคลุม MIE มาพร้อมกับ Apple Silicon และให้การรักษาความปลอดภัยหน่วยความจำแบบตลอดเวลาที่ไม่มีใครเทียบได้สำหรับช่องทางการโจมตีที่สำคัญ รวมถึงเคอร์เนล ในขณะที่ยังคงรักษาพลังงานและประสิทธิภาพได้ตามความคาดหวังของผู้ใช้ โปรดดูที่ Memory Integrity Enforcement: มุมมองฉบับสมบูรณ์สำหรับความปลอดภัยของหน่วยความจำในอุปกรณ์ Apple ในบล็อกการวิจัยด้านความปลอดภัยของ Apple สำหรับข้อมูลเพิ่มเติม
ส่วนขยายการติดแท็กหน่วยความจำ
Arm ได้เผยแพร่ข้อกำหนดของส่วนขยายการติดแท็กหน่วยความจำ (MTE) ในปี 2562 เพื่อเป็นเครื่องมือสำหรับฮาร์ดแวร์ในการช่วยค้นหาข้อผิดพลาดที่ทำให้หน่วยความจำเสียหาย MTE คือระบบติดแท็กหน่วยความจำและตรวจสอบแท็กที่การจัดสรรหน่วยความจำทั้งหมดถูกติดแท็กด้วยข้อมูลลับ ฮาร์ดแวร์รับประกันว่าคำขอในภายหลังเพื่อเข้าถึงหน่วยความจำจะได้รับอนุญาตก็ต่อเมื่อคำขอมีข้อมูลลับที่ถูกต้องเท่านั้น ถ้าข้อมูลลับไม่ตรงกัน แอปจะปิดตัวลงโดยไม่ทราบสาเหตุและเหตุการณ์จะถูกบันทึก วิธีนี้ช่วยให้นักพัฒนาระบุข้อผิดพลาดที่ทำให้หน่วยความจำเสียหายได้ทันทีที่เกิดขึ้น
ส่วนขยายการติดแท็กหน่วยความจำที่ได้รับการปรับปรุง
EMTE ปิดช่องโหว่ที่ป้องกันไม่ให้ MTE ได้รับการป้องกันเชิงรุก รวมถึงการรองรับเฉพาะโหมดซิงโครนัสที่ปลอดภัยมากขึ้นเท่านั้นด้วย นอกจากนั้น ยังต้องทราบแท็กของพื้นที่เพื่อเข้าถึงหน่วยความจำที่ไม่ได้ติดแท็กจากพื้นที่หน่วยความจำที่ติดแท็กนั้นด้วย ซึ่งทำให้ผู้โจมตีดำเนินการได้ยากขึ้นในการเปลี่ยนข้อบกพร่อง Out-of-bound ในหน่วยความจำที่ติดแท็กแบบไดนามิกให้เป็นวิธีเลี่ยง EMTE โดยแก้ไขการจัดสรรหน่วยความจำที่ไม่ได้ติดแท็กโดยตรง
การบังคับใช้การรักษาความลับแท็ก
การบังคับใช้การรักษาความลับแท็กปกป้องการปรับใช้ตัวจัดสรรที่ปลอดภัยจากภัยคุกคามทางเทคนิคและปกป้องการรักษาความลับของแท็ก EMTE รวมถึงปกป้องจากการโจมตีแบบ Side-channel และ Speculative-execution Secure Page Table Monitor ปกป้องพื้นที่จัดเก็บข้อมูลเบื้องหลังของตัวจัดสรรเคอร์เนลและพื้นที่จัดเก็บแท็ก ระบบยังช่วยให้แน่ใจว่าเมื่อเคอร์เนลเข้าถึงหน่วยความจำในฐานะแอปพลิเคชัน เคอร์เนลต้องทำตามกฎการตรวจสอบแท็กแบบเดียวกับพื้นที่ผู้ใช้ การบังคับใช้การรักษาความลับแท็กยังออกแบบมาเพื่อลดการรั่วไหลของแท็กเนื่องจากการโจมตีแบบกำหนดเวลาหรือแบบคาดการณ์ล่วงหน้า และยังรวมการปกป้องจาก Spectre V1 ไว้ด้วย