تكامل نظام التشغيل
تم تصميم برامج أنظمة التشغيل في Apple مع توفير الأمان في صميمها. يتضمن هذا التصميم جذرًا للثقة في المكونات المادية - تم تعزيزه لتمكين التمهيد الآمن - وعملية تحديث برامج آمنة تتميز بالسرعة والأمان. تستخدم أنظمة التشغيل في Apple أيضًا إمكانات المكونات المادية المزودة بالسيليكون المصممة لهذا الغرض للمساعدة في منع الاستغلال أثناء تشغيل النظام. تعمل ميزات وقت التشغيل هذه على حماية سلامة التعليمات البرمجية الموثوق بها أثناء التنفيذ. وباختصار، فإن برامج أنظمة التشغيل في Apple تساعد في الحد من الهجمات وتقنيات الاستغلال سواء كانت ناشئة عن تطبيق ضار أو من الويب أو من خلال أي قناة أخرى. تتوفر وسائل الحماية المذكورة هنا على الأجهزة التي تحتوي على أنظمة SoC المصمم بواسطة Apple المدعوم، بما في ذلك iOS و iPadOS و tvOS و watchOS والآن macOS على Mac مزود برقاقات Apple.
الميزة | A10 | A11, S3 | A12 و A13 و A14 S4 إلى S9 | A15 و A16 و A17 | M1 و M2 و M3 |
راجع الملاحظة 1 أدناه. | |||||
راجع الملاحظة 2 أدناه. |
الملاحظة 1: تتطلب طبقة حماية الصفحة (PPL) تنفيذ النظام الأساسي للتعليمات البرمجية المُوقّعة والموثوق بها فقط، وهذا نموذج أمن لا ينطبق على macOS.
الملاحظة 2: Secure Page Table Monitor (SPTM) مدعوم على A15 و A16 و A17 ويُستخدَم بدلًا من طبقة حماية الصفحة على الأنظمة الأساسية المدعومة.
حماية تكامل Kernel
بعد اكتمال تهيئة مكونات kernel في نظام التشغيل، يتم تمكين حماية تكامل Kernel (KIP) للمساعدة على منع تعديلات kernel والتعليمات البرمجية لبرنامج التشغيل. توفر وحدة تحكم الذاكرة منطقة ذاكرة فعلية محمية يستخدمها iBoot لتحميل kernel وملحقات kernel. بعد اكتمال بدء التشغيل، ترفض وحدة تحكم الذاكرة الكتابة إلى منطقة الذاكرة الفعلية المحمية. ويتم تكوين وحدة إدارة الذاكرة (MMU) الخاصة بمعالج التطبيقات للمساعدة على منع تعيين التعليمات البرمجية المميزة من الذاكرة الفعلية خارج منطقة الذاكرة المحمية وللمساعدة على منع تعيينات الذاكرة الفعلية القابلة للكتابة داخل منطقة ذاكرة kernel.
لمنع إعادة التكوين، يتم قفل المكونات المادية المستخدمة لتمكين KIP بعد اكتمال عملية التمهيد.
قيود الأذونات السريعة
بدءًا من شريحة بايونك A11 من Apple و S3 SoCs، تم تقديم مجموعة أولية جديدة للمكونات المادية. تتضمن قيود الأذونات السريعة الأولية هذه سجل وحدة معالجة مركزية يقيّد الأذونات لكل سلسلة بسرعة. باستخدام قيود الأذونات السريعة (المعروفة أيضًا باسم سجلات APRR)، يمكن لأنظمة التشغيل المدعومة إزالة أذونات التنفيذ من الذاكرة دون تكلفة إضافية لاستدعاء النظام وتمرير صفحة من الجدول أو محاذاتها. توفر هذه السجلات مستوى إضافيًا للحد من الهجمات من الويب، خاصةً بالنسبة إلى التعليمات البرمجية التي يتم تجميعها في وقت التشغيل (يتم تجميعها في الوقت المحدد تمامًا) - لأن الذاكرة لا يمكن تنفيذها بفاعلية في الوقت نفسه الذي تجري فيه القراءة منها والكتابة إليها.
حماية تكامل المعالج الثانوي للنظام
يتعامل البرنامج الثابت الخاص بالمعالج الثانوي مع العديد من مهام النظام الهامة — على سبيل المثال، Secure Enclave ومعالج مستشعر الصور ومعالج الحركة الثانوي. وبالتالي يعد أمنه جزءًا أساسيًا من أمن النظام ككل. لمنع تعديل البرامج الثابتة للمعالج الثانوي، تستخدم Apple آلية تسمى حماية تكامل المعالج الثانوي للنظام (SCIP).
تعمل SCIP بطريقة تشبه كثيرًا حماية تكامل Kernel (KIP): في وقت التمهيد، يقوم iBoot بتحميل البرنامج الثابت لكل معالج ثانوي في منطقة ذاكرة محمية، وهي منطقة محجوزة ومنفصلة عن منطقة KIP. ثم يقوم iBoot بتكوين وحدة ذاكرة كل معالج ثانوي للمساعدة على منع:
التعيينات القابلة للتنفيذ خارج الجزء الخاص به من منطقة الذاكرة المحمية
التعيينات القابلة للكتابة داخل الجزء الخاص به من منطقة الذاكرة المحمية
أيضًا في وقت التمهيد، لتكوين SCIP لـ Secure Enclave، يتم استخدام نظام تشغيل Secure Enclave. بعد اكتمال عملية التمهيد، يتم قفل المكونات المادية المستخدمة لتمكين SCIP. وقد تم تصميم ذلك لمنع إعادة التكوين.
رموز مصادقة المؤشر
تُستخدم رموز مصادقة المؤشر (PACs) للحماية من استغلال أخطاء تلف الذاكرة. وتستخدم برامج النظام والتطبيقات المضمنة PAC للمساعدة على منع تعديل مؤشرات الوظائف وعناوين الإرجاع (مؤشرات التعليمات البرمجية). يستخدم PAC خمس قيم 128 بت سرية للتوقيع على تعليمات وبيانات kernel، وتوجد لكل عملية في مساحة المستخدم مفاتيح B الخاصة بها. وتكون العناصر عشوائية وموقَّعة كما هو موضح أدناه.
العنصر | المفتاح | القيمة العشوائية |
---|---|---|
Function Return Address | IB | عنوان التخزين |
Function Pointers | IA | 0 |
Block Invocation Function | IA | عنوان التخزين |
Objective-C Method Cache | IB | عنوان التخزين + الفئة + المحدِّد |
C++ V-Table Entries | IA | عنوان التخزين + التجزئة (اسم أسلوب مشوّه) |
Computed Goto Label | IA | التجزئة (اسم الوظيفة) |
Kernel Thread State | GA | • |
User Thread State Registers | IA | عنوان التخزين |
C++ V-Table Pointers | DA | 0 |
يتم تخزين قيمة التوقيع في وحدات بت المساحة المتروكة غير المستخدمة في الجزء العلوي من مؤشر 64 بت. ويتم التحقق من التوقيع قبل الاستخدام، وتتم استعادة المساحة المتروكة للمساعدة على ضمان الحصول على عنوان مؤشر يعمل بكفاءة. ويؤدي عدم نجاح التحقّق إلى إحباط العملية. يزيد هذا التحقق من الصعوبة التي تواجه العديد من الهجمات، مثل هجوم البرمجة الموجهة للإرجاع (ROP)، الذي يحاول خداع الجهاز لتنفيذ التعليمات البرمجية الموجودة بشكل ضار من خلال معالجة عناوين إرجاع الوظائف المخزنة على المكدس.
طبقة حماية الصفحة
تم تصميم طبقة حماية الصفحة (PPL) في iOS و iPadOS و watchOS لمنع تعديل التعليمات البرمجية لمساحة المستخدم بعد اكتمال التحقق من توقيع التعليمات البرمجية. وبناءً على حماية تكامل Kernel وقيود الأذونات السريعة، تُدير PPL تجاوزات أذونات جداول الصفحات للتأكد من أن PPL وحدها يمكنها تغيير الصفحات المحمية التي تحتوي على تعليمات المستخدم البرمجية وجداول الصفحات. يوفر النظام انخفاضًا كبيرًا في عدد الأجزاء المعرضة للهجوم من خلال دعم فرض تكامل التعليمات البرمجية على مستوى النظام، حتى في مواجهة kernel مخترقة. لا تتوفر هذه الحماية في macOS لأن PPL تنطبق فقط على الأنظمة التي يجب أن يتم فيها توقيع جميع التعليمات البرمجية المنفذة.
Secure Page Table Monitor و Trusted Execution Monitor
صُمِّم كلٌّ من Secure Page Table Monitor (SPTM) و Trusted Execution Monitor (TXM) للعمل معًا للمساعدة في منع إجراء تعديل على جداول الصفحات لعمليات كلٍّ من المستخدم و kernel، حتى عندما يكون لدى المهاجمين إمكانات الكتابة في kernel ويمكنهم تجاوز حماية تدفق التحكم. ينفِّذ SPTM ذلك عن طريق استخدام مستوى امتياز أعلى من kernel، واستخدام TXM بمستوى امتياز أقل لإنفاذ السياسات التي تحكم تنفيذ التعليمات البرمجية فعليًا. صُمِّم هذا النظام بحيث لا تتحول تسوية TXM تلقائيًا إلى تجاوز SPTM بسبب فصل الامتيازات وإدارة الثقة بينهما. في أنظمة SOC لدى A15 و A16 و A17، يُستخدم SPTM (مع TXM) بدلاً من PPL، ما يعمل على تقليل الأجزاء المعرضة للهجوم ومن دون الاعتماد على ثقة kernel، حتى خلال تمهيد مبكر. يعتمد SPTM أيضًا على أوليات الرقاقات الجديدة التي تمثل تطورًا لقيود الأذونات السريعة التي تستخدمها PPL.