لمنع تشغيل حمولات عشوائية داخل pVM ، يستخدم Android Virtualization Framework (AVF) نهج أمان متعدد الطبقات حيث تضيف كل طبقة إجراءات إنفاذ إضافية. فيما يلي قائمة بطبقات أمان AVF:
Android - يضمن Android أنه يُسمح فقط للتطبيقات التي لديها أذونات pVM بإنشاء أو فحص pVM.
Bootloader - يضمن برنامج bootloader أنه يُسمح فقط لصور pVM الموقعة من قِبل Google أو بائعي الأجهزة بالتمهيد واحترام إجراء التشغيل الذي تم التحقق منه من Android . تشير هذه البنية إلى أن التطبيقات التي تعمل بنظام pVM لا يمكنها تجميع نواتها الخاصة.
pVM - يوفر pVM دفاعًا في العمق ، كما هو الحال مع SELinux ، للحمولات التي يتم تشغيلها في pVM. لا يسمح الدفاع المتعمق بتعيين البيانات على أنها قابلة للتنفيذ (
neverallow execmem
) ويضمن أن W ^ X يحمل جميع أنواع الملفات.
نموذج الأمان
السرية والنزاهة والتوافر ، المعروف أيضًا باسم ثالوث وكالة المخابرات المركزية ، هو نموذج مصمم لتوجيه سياسات أمن المعلومات:
- السرية هي مجموعة من القواعد التي تحد من الوصول إلى المعلومات.
- النزاهة هي التأكيد على أن المعلومات جديرة بالثقة ودقيقة.
- التوفر هو ضمان وصول موثوق إلى المعلومات من قبل الكيانات المعتمدة.
لاحظ أن pKVM تم تصميمه للحفاظ على السرية والنزاهة ، ولكن ليس التوفر ، للضيوف. تؤثر هذه المبادئ على قرارات التصميم التي تغطي جميع جوانب البنية ، من برنامج Hypervisor إلى مكونات مساحة المستخدم.
السرية والنزاهة
تنبع السرية من خصائص عزل الذاكرة التي يفرضها pKVM hypervisor. يتتبع pKVM ملكية الذاكرة لصفحات الذاكرة المادية الفردية وأي طلبات من المالكين لمشاركة الصفحات. يضمن pKVM أن pVMs المعنونة فقط (المضيف والضيوف) لديهم الصفحة المحددة التي تم تعيينها في جداول صفحات المرحلة 2 الخاصة بهم والتي يتم التحكم فيها بواسطة برنامج Hypervisor. تحافظ هذه البنية على أن محتويات الذاكرة المملوكة لـ pVM تظل خاصة ما لم يشاركها المالك صراحةً مع pVM آخر.
تمتد قيود الحفاظ على السرية أيضًا إلى أي كيانات في النظام تقوم بوصول إلى الذاكرة نيابة عن pVMs ، أي الأجهزة والخدمات التي تدعم DMA والتي تعمل في طبقات أكثر امتيازًا . يجب على موردي SoC تلبية مجموعة جديدة من المتطلبات قبل أن يتمكنوا من دعم pKVM ، وإلا فلن يتم توفير السرية.
تنطبق النزاهة على كل من البيانات الموجودة في الذاكرة والحساب:
- لا تستطيع pVMs تعديل ذاكرة بعضها البعض دون موافقة.
- لا يمكن أن تؤثر pVMs على حالة وحدة المعالجة المركزية لبعضها البعض.
يتم فرض هذه المتطلبات من قبل برنامج Hypervisor. لكن المشاكل المتعلقة بسلامة البيانات تظهر أيضًا مع تخزين البيانات الافتراضية حيث يجب تطبيق حلول أخرى ، مثل dm-verity أو AuthFS.
لا تختلف هذه المبادئ عن عزل العملية الذي يوفره Linux حيث يتم التحكم في الوصول إلى صفحات الذاكرة من خلال جداول صفحة المرحلة 1 وتبديل سياق kernel بين العمليات. ومع ذلك ، فإن الجزء EL2 من pKVM ، الذي يفرض هذه الخصائص ، لديه ما يقرب من نصف سطح الهجوم مقارنة بنواة Linux بأكملها (ما يقرب من 10 آلاف مقابل 20 مليون سطر من التعليمات البرمجية) وبالتالي يوفر ضمانًا أقوى لاستخدام الحالات الحساسة للغاية بحيث لا يمكن الاعتماد عليها على عزل العملية.
نظرًا لحجمها ، فإن pKVM يفسح المجال للتحقق الرسمي. نحن ندعم بنشاط البحث الأكاديمي ، الذي يهدف إلى إثبات هذه الخصائص رسميًا على ثنائي pKVM الفعلي.
يغطي الجزء المتبقي من هذا المستند ضمانات السرية والنزاهة التي يوفرها كل مكون حول pKVM.
برنامج Hypervisor
pKVM هو برنامج Hypervisor يعتمد على KVM ويعزل pVMs و Android في بيئات تنفيذ غير موثوقة بشكل متبادل. يتم الاحتفاظ بهذه الخصائص في حالة وجود حل وسط داخل أي pVM ، بما في ذلك المضيف. تحتاج برامج Hypervisor البديلة التي تتوافق مع AVF إلى توفير خصائص مماثلة.
- لا يمكن لـ pVM الوصول إلى صفحة تنتمي إلى كيان آخر ، مثل pVM أو برنامج Hypervisor ، ما لم يشاركها مالك الصفحة بشكل صريح. تتضمن هذه القاعدة pVM المضيف وتنطبق على كل من وصول CPU و DMA.
- قبل إرجاع الصفحة المستخدمة بواسطة pVM إلى المضيف ، كما هو الحال عند إتلاف pVM ، يتم مسحها.
- يتم مسح ذاكرة جميع pVMs والبرامج الثابتة لـ pVM من تمهيد جهاز واحد قبل تشغيل أداة تحميل نظام التشغيل في تمهيد الجهاز التالي.
- عند توصيل مصحح أخطاء الأجهزة ، مثل SJTAG ، لا يمكن لـ pVM الوصول إلى المفاتيح التي تم سكها مسبقًا.
- لا يتم تشغيل برنامج pVM الثابت إذا لم يتمكن من التحقق من الصورة الأولية.
- لا يتم تشغيل برنامج
instance.img
الثابت إذا تم اختراق تكامل الملف .img. - يمكن اشتقاق سلسلة شهادة التمهيد (BCC) ومعرّفات الأجهزة المركبة (CDIs) المقدمة إلى مثيل pVM فقط من خلال هذا المثيل المحدد.
نظام تشغيل الضيف
يعد Microdroid مثالاً على نظام تشغيل يعمل داخل pVM. يتكون Microdroid من محمل إقلاع قائم على U-boot و GKI ومجموعة فرعية من مساحة مستخدمي Android وقاذفة الحمولة. يتم الاحتفاظ بهذه الخصائص في حالة وجود حل وسط داخل أي pVM ، بما في ذلك المضيف. يجب أن توفر أنظمة التشغيل البديلة التي تعمل في pVM خصائص مماثلة.
- لن يتم تشغيل
boot.img
إذا تعذر التحقق منvbmeta.img
أوsuper.img
أو vbmeta.img أوvbmeta\_system.img
. - لن يتم تشغيل Microdroid إذا فشل التحقق من ملف APK.
- لن يتم تشغيل مثيل Microdroid نفسه حتى إذا تم تحديث APK.
- لن يتم تشغيل Microdroid إذا فشل أي من APEX في التحقق.
- لن يتم تشغيل Microdroid (أو يتم تشغيله بحالة أولية نظيفة) إذا تم تعديل example.img خارج ملف الضيف
instance.img
. - يوفر Microdroid شهادة لسلسلة التمهيد.
- أي تعديل (غير موقع) على صور القرص التي تمت مشاركتها مع الضيف pVM يتسبب في حدوث خطأ I / O على جانب pVM.
- لا يمكن اشتقاق BCC و CDIs المقدمة إلى مثيل pVM إلا من خلال هذا المثال المحدد.
ذكري المظهر
هذه هي الخصائص التي يحتفظ بها Android كمضيف ولكنها لا تصح في حالة اختراق المضيف:
- لا يمكن للضيف pVM التفاعل مباشرة مع (على سبيل المثال ، إجراء اتصال vsock) ضيف pVMs الآخرين.
- يمكن فقط لخدمة
VirtualizationService
في مضيف pVM إنشاء قناة اتصال إلى pVM (ملاحظة: يمكنها تمرير القناة المحددة إلى الآخرين). - يمكن فقط للتطبيقات التي تم توقيعها باستخدام مفتاح النظام الأساسي طلب إذن لإنشاء أو امتلاك أو التفاعل مع pVMs.
- لا يتم إعادة استخدام المعرف ، المسمى بمعرف السياق (CID) ، المستخدم في إعداد اتصالات vsock بين المضيف و pVM أثناء تشغيل مضيف pVM. على سبيل المثال ، لا يمكن استبدال جهاز pVM قيد التشغيل بآخر.
التوفر
في سياق pVMs ، يشير التوافر إلى قيام المضيف بتخصيص موارد كافية للضيوف حتى يتمكن الضيوف من أداء المهام التي صُمموا للقيام بها.
تشمل مسؤوليات المضيف جدولة وحدات المعالجة المركزية الافتراضية الخاصة بـ pVM. KVM ، على عكس برامج Hypervisor التقليدية من النوع 1 ، مثل Xen ، يتخذ قرار التصميم الصريح لتفويض جدولة عبء العمل إلى نواة المضيف. نظرًا لحجم منظمي الجدولة وتعقيدهم ، فإن قرار التصميم هذا يقلل بشكل كبير من حجم قاعدة الحوسبة الموثوقة (TCB) ويمكّن المضيف من اتخاذ قرارات جدولة أكثر استنارة لتحسين الأداء. ومع ذلك ، يمكن للمضيف الضار اختيار عدم جدولة ضيف.
وبالمثل ، تفوض pKVM أيضًا معالجة المقاطعة المادية لنواة المضيف لتقليل تعقيد برنامج Hypervisor وترك المضيف مسؤولاً عن الجدولة. يتم بذل الجهود للتأكد من أن إعادة توجيه مقاطعات الضيف تؤدي فقط إلى رفض الخدمة (المقاطعات قليلة جدًا أو كثيرة جدًا أو خاطئة في التوجيه).
أخيرًا ، تكون عملية مراقبة الجهاز الظاهري للمضيف (VMM) مسؤولة عن تخصيص الذاكرة وتوفير الأجهزة الافتراضية ، مثل بطاقة الشبكة. يمكن لجهاز VMM الخبيث حجب الموارد عن الضيف.
على الرغم من أن pKVM لا يوفر الإتاحة للضيوف ، إلا أن التصميم يحمي توفر المضيف من الضيوف الخبثاء لأن المضيف يمكنه دائمًا استباق الضيف أو إنهائه واستعادة موارده.
الإقلاع الآمن
ترتبط البيانات بمثيلات pVM ، ويضمن التمهيد الآمن إمكانية التحكم في الوصول إلى بيانات المثيل. يوفر التمهيد الأول للمثيل ذلك عن طريق إنشاء ملح سري بشكل عشوائي لـ pVM واستخراج التفاصيل ، مثل التحقق من المفاتيح العامة والتجزئة ، من الصور المحملة. تُستخدم هذه المعلومات للتحقق من التمهيد اللاحق لمثيل pVM والتأكد من تحرير أسرار المثيل فقط للصور التي تمرر التحقق. تحدث هذه العملية لكل مرحلة تحميل داخل pVM: البرامج الثابتة pVM ، و pVM ABL ، و Microdroid ، وما إلى ذلك.
يوفر DICE لكل مرحلة تحميل زوجًا من مفاتيح التصديق ، يتم اعتماد الجزء العام منه في إدخال BCC لتلك المرحلة. يمكن أن يتغير زوج المفاتيح هذا بين الأحذية ، لذلك يتم أيضًا اشتقاق سر الختم المستقر لمثيل VM عبر عمليات إعادة التمهيد ، وعلى هذا النحو ، يكون مناسبًا لحماية الحالة المستمرة. يعتبر سر الختم ذا قيمة عالية لجهاز VM لذا لا ينبغي استخدامه بشكل مباشر. بدلاً من ذلك ، يجب اشتقاق مفاتيح الختم من سر الختم ويجب إتلاف سر الختم في أقرب وقت ممكن.
تقوم كل مرحلة بتسليم كائن CBOR مشفر بشكل حتمي إلى المرحلة التالية. يحتوي هذا الكائن على أسرار و BCC ، والذي يحتوي على معلومات الحالة المتراكمة ، مثل ما إذا تم تحميل المرحلة الأخيرة بشكل آمن.
أجهزة غير مقفلة
عند إلغاء قفل الجهاز باستخدام fastboot oem unlock
، يتم مسح بيانات المستخدم. تحمي هذه العملية بيانات المستخدم من الوصول غير المصرح به. يتم أيضًا إبطال البيانات الخاصة بـ pVM عند حدوث إلغاء قفل الجهاز.
بمجرد إلغاء القفل ، يكون مالك الجهاز حرًا في إعادة تحميل ملفات الأقسام المحمية عادةً بواسطة التمهيد الذي تم التحقق منه ، بما في ذلك الأقسام التي تحتوي على تنفيذ pKVM. لذلك ، لن يتم الوثوق بـ pKVM على جهاز غير مؤمن لدعم نموذج الأمان.
يمكن للأطراف البعيدة ملاحظة هذه الحالة غير الآمنة المحتملة عن طريق فحص حالة التمهيد التي تم التحقق منها للجهاز في شهادة تصديق المفتاح.