
تكامل نظام التشغيل
تُصمم Apple برمجيات أنظمة التشغيل الخاصة بها مع وضع الأمان في جوهرها. يتضمن هذا التصميم جذرًا للثقة في المكونات المادية يُمكِّن التمهيد الآمن وعملية تحديث برامج آمنة تتميز بالسرعة والأمان. تستخدم أنظمة التشغيل في Apple أيضًا إمكانات المكونات المادية المزودة بالسيليكون المصممة لهذا الغرض للمساعدة في منع الاستغلال أثناء تشغيل نظام التشغيل. تعمل ميزات وقت التشغيل هذه على حماية سلامة التعليمات البرمجية الموثوق بها أثناء تنفيذها. تساعد برامج أنظمة التشغيل في Apple في الحد من الهجمات وتقنيات الاستغلال سواء كانت ناشئة عن تطبيق ضار أو من الويب أو من خلال أي قناة أخرى. تتوفر هذه الحمايات على الأجهزة المزودة بأنظمة SoC المدعومة من تصميم Apple، بما في ذلك iOS، و iPadOS، و macOS على أجهزة Mac المزودة بسيليكون Apple، و tvOS، و visionOS، و watchOS.
الميزة | A10 | A11, S3 | A12-A14 S4-S10 | A15-A18 | M1 | M2-M4 | A19 M5 |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1 |
2 |
|
| |
|
|
|
|
|
2 |
2 | |
|
|
|
|
|
|
|
1: Secure Page Table Monitor (SPTM) مدعوم في A15 أو أحدث و M2 أو SOCs الأحدث، ويُستخدَم بدلًا من طبقة حماية الصفحة على الأنظمة الأساسية المدعومة.
2: تعمل طبقة حماية الصفحة (PPL) و Secure Page Table Monitor (SPTM) على فرض تنفيذ التعليمات البرمجية الموقّعة والموثوق بها على جميع الأنظمة الأساسية باستثناء macOS (نظرًا لأن macOS مصمم لتشغيل أي تعليمات برمجية). جميع الخصائص الأمنية الأخرى، بما في ذلك حماية جداول الصفحات، متوفرة على جميع الأنظمة الأساسية المدعومة.
حماية تكامل Kernel
بعد اكتمال تهيئة مكونات kernel في نظام التشغيل، يتم تمكين حماية تكامل Kernel (KIP) للمساعدة على منع تعديلات kernel والتعليمات البرمجية لبرنامج التشغيل. توفر وحدة تحكم الذاكرة منطقة ذاكرة فعلية محمية يستخدمها iBoot لتحميل kernel وملحقات kernel. بعد اكتمال بدء التشغيل، ترفض وحدة تحكم الذاكرة الكتابة إلى منطقة الذاكرة الفعلية المحمية. ويتم تكوين وحدة إدارة الذاكرة (MMU) الخاصة بمعالج التطبيقات للمساعدة على منع تعيين التعليمات البرمجية المميزة من الذاكرة الفعلية خارج منطقة الذاكرة المحمية وللمساعدة على منع تعيينات الذاكرة الفعلية القابلة للكتابة داخل منطقة ذاكرة kernel.
لمنع إعادة التكوين، يتم قفل المكونات المادية المستخدمة لتمكين KIP بعد اكتمال عملية التمهيد.
قيود الأذونات السريعة
بدءًا من شريحة بايونك A11 من Apple و S3 SoCs، تم تقديم مجموعة أولية جديدة للمكونات المادية. تتضمن قيود الأذونات السريعة الأولية هذه سجل وحدة معالجة مركزية يقيّد الأذونات لكل سلسلة بسرعة. باستخدام قيود الأذونات السريعة (المعروفة أيضًا باسم سجلات APRR)، يمكن لأنظمة التشغيل المدعومة إزالة أذونات التنفيذ من الذاكرة دون تكلفة إضافية لاستدعاء النظام وتمرير صفحة من الجدول أو محاذاتها. توفر هذه السجلات مستوى إضافيًا للحد من الهجمات من الويب، خاصةً بالنسبة إلى التعليمات البرمجية التي يتم تجميعها في وقت التشغيل (يتم تجميعها في الوقت المحدد تمامًا) - لأن الذاكرة لا يمكن تنفيذها بفاعلية في الوقت نفسه الذي تجري فيه القراءة منها والكتابة إليها.
حماية تكامل المعالج الثانوي للنظام
يتعامل البرنامج الثابت الخاص بالمعالج الثانوي مع العديد من مهام النظام الهامة — على سبيل المثال، Secure Enclave ومعالج مستشعر الصور ومعالج الحركة الثانوي. وبالتالي يعد أمنه جزءًا أساسيًا من أمن النظام ككل. لمنع تعديل البرامج الثابتة للمعالج الثانوي، تستخدم Apple آلية تسمى حماية تكامل المعالج الثانوي للنظام (SCIP).
يعمل SCIP بشكل مشابه لـ 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 | عنوان التخزين |
Block Descriptor Pointer | DA | عنوان التخزين + 0xC0BB |
Objective-C Method Cache | IB | عنوان التخزين + الفئة + المحدِّد |
Objective-C Isa Pointer | DA | عنوان التخزين + 0x6AE1 |
Objective-C Super Pointer | DA | عنوان التخزين + 0xB5AB |
Selector Typed Objective-C ivars | DB | عنوان التخزين + 0x57C2 |
Objective-C Read-only Class Data Pointer | DA | عنوان التخزين + 0x61F8 |
C++ V-Table Entries | IA | عنوان التخزين + التجزئة (اسم أسلوب مشوّه) |
C++ V-Table Pointers | DA | عنوان التخزين + قيمة التجزئة (اسم V-Table الأساسي المرمّز) |
Computed Goto Label | IA | التجزئة (اسم الوظيفة) |
Kernel Thread State | GA | • |
User Thread State Registers | IA | عنوان التخزين |
يتم تخزين قيمة التوقيع في وحدات بت المساحة المتروكة غير المستخدمة في الجزء العلوي من مؤشر 64 بت. ويتم التحقق من التوقيع قبل الاستخدام، وتتم استعادة المساحة المتروكة للمساعدة على ضمان الحصول على عنوان مؤشر يعمل بكفاءة. ويؤدي عدم نجاح التحقّق إلى إحباط العملية. يزيد هذا التحقق من الصعوبة التي تواجه العديد من الهجمات، مثل هجوم البرمجة الموجهة للإرجاع (ROP)، الذي يحاول خداع الجهاز لتنفيذ التعليمات البرمجية الموجودة بشكل ضار من خلال معالجة عناوين إرجاع الوظائف المخزنة على المكدس.
طبقة حماية الصفحة
تم تصميم طبقة حماية الصفحة (PPL) في iOS و iPadOS و visionOS و watchOS لمنع تعديل التعليمات البرمجية لمساحة المستخدم بعد اكتمال التحقق من توقيع التعليمات البرمجية. وبناءً على KIP وقيود الأذونات السريعة، تُدير PPL تجاوزات أذونات جداول الصفحات للتأكد من أن PPL وحدها يمكنها تغيير الصفحات المحمية التي تحتوي على تعليمات المستخدم البرمجية وجداول الصفحات. يوفر النظام انخفاضًا كبيرًا في عدد الأجزاء المعرضة للهجوم من خلال دعم فرض تكامل التعليمات البرمجية على مستوى النظام، حتى في مواجهة kernel مخترقة. لا تتوفر هذه الحماية في macOS لأن PPL تنطبق فقط على الأنظمة التي يجب أن يتم فيها توقيع جميع التعليمات البرمجية المنفذة.
مراقبة جدول الصفحات الآمنة ومراقبة التنفيذ الموثوقة
صُمِّم كلٌّ من مراقبة جدول الصفحات الآمنة (SPTM) ومراقبة التنفيذ الموثوقة (TXM) و iOS و iPadOS و macOS و visionOS للعمل معًا للمساعدة في منع إجراء تعديل على جداول الصفحات لعمليات كل من المستخدم و kernel. يشمل ذلك الحالات التي يمتلك فيها المهاجمون قدرات الكتابة في kernel ويمكنهم تجاوز حمايات تدفق التحكم. ينفِّذ SPTM ذلك عن طريق استخدام مستوى امتياز أعلى من kernel، واستخدام TXM بمستوى امتياز أقل لإنفاذ السياسات التي تحكم تنفيذ التعليمات البرمجية فعليًا. صُمِّم هذا النظام بحيث لا تتحول تسوية TXM تلقائيًا إلى تجاوز SPTM بسبب فصل الامتيازات وإدارة الثقة بينهما. في A15 أو أحدث وM2 أو SOCs الأحدث، يُستخدم SPTM (مع TXM) بدلًا من PPL، ما يعمل على تقليل الأجزاء المعرضة للهجوم ومن دون الاعتماد على ثقة kernel، حتى خلال تمهيد مبكر. يعتمد SPTM على أوليات الرقاقات الجديدة التي تمثل تطورًا لقيود الأذونات السريعة التي تستخدمها PPL، وهي متوفرة فقط على المعالجات المذكورة في الجدول أعلاه.
فرض سلامة الذاكرة
فرض سلامة الذاكرة (MIE)، هو دفاع شامل لسلامة الذاكرة لمنصات Apple، يتوفر في معالجات A19 و M5 أو الإصدارات الأحدث. بُنِيَ MIE على الأساس القوي الذي توفره مخصصات الذاكرة الآمنة من Apple، مقترنًا بملحق علامات الذاكرة المحسّن (EMTE) في الوضع المتزامن، ومدعومًا بسياسات شاملة لفرض سرية العلامات. تم دمج MIE في رقاقات Apple ويوفر حماية لسلامة الذاكرة لا مثيل لها ودائمة التشغيل أمام أسطح الهجوم الرئيسية بما في ذلك kernel، مع الحفاظ على القوة والأداء اللذين يتوقعهما المستخدمون. للمزيد من المعلومات، راجع فرض سلامة الذاكرة: رؤية شاملة لأمن الذاكرة في أجهزة Apple على مدونة الأبحاث الأمنية من Apple.
ملحق وضع العلامات على الذاكرة
نشرت شركة Arm مواصفات ملحق وضع العلامات على الذاكرة (MTE) في عام 2019 كأداة للأجهزة للمساعدة في العثور على أخطاء تلف الذاكرة. MTE هو نظام لوضع علامات على الذاكرة وفحصها، حيث يتم وضع علامة على كل عملية تخصيص للذاكرة وتمييزها بسرٍّ خاص. يضمن الجهاز أن طلبات الوصول إلى الذاكرة اللاحقة لا تُمنح إلا إذا كان الطلب يحتوي على السر الصحيح. في حال عدم تطابق الأسرار، يتعطل التطبيق، ويتم تسجيل الحدث. يتيح هذا للمطورين تحديد أخطاء تلف الذاكرة فور حدوثها.
الملحق المُحسّن لوضع العلامات على الذاكرة
يغلق EMTE الثغرات التي تمنع MTE من أن يكون دفاعًا نشطًا، بما في ذلك دعم الوضع المتزامن الأكثر أمانًا فقط. بالإضافة إلى ذلك، يتطلب الوصول إلى الذاكرة غير المعلَّمة من منطقة ذاكرة ذات علامة معرفة علامة تلك المنطقة، مما يجعل من الصعب بشكل كبير على المهاجمين تحويل أخطاء "خارج الحدود" في الذاكرة ذات العلامات الديناميكية إلى طريقة لتجاوز EMTE عبرَ التعديل المباشرِ للتخصيصات غيرِ المعلَّمة.
فرض سرية العلامات
يحمي فرض سرية العلامات تنفيذ مخصصات الذاكرة الآمنة من التهديدات التقنية، ويحمي سرية علامات EMTE—بما في ذلك الحماية من هجمات القنوات الجانبية وهجمات التنفيذ التخميني. يقوم برنامج مراقبة جدول الصفحات الآمنة بحماية مخزن دعم مُخصِّص kernel وتخزين العلامات. كما يضمن النظام أنه عند وصول kernel إلى الذاكرة نيابةً عن تطبيق ما، فإنها تخضع لنفس قواعد فحص العلامات المطبقة على مساحة المستخدم. تم تصميم فرض سرية العلامات أيضًا للحد من تسريب العلامات الناتج عن هجمات التوقيت أو الهجمات التخمينية، كما يتضمن حماية ضد ثغرة Spectre V1.