الأمان

لمنع تنفيذ حمولات عشوائية داخل آلة افتراضية محمية، يستخدم إطار عمل المحاكاة الافتراضية على Android (AVF) نهج أمان متعدد الطبقات، حيث تضيف كل طبقة عمليات تنفيذ إضافية. في ما يلي قائمة بطبقات الأمان في AVF:

  • يضمن نظام التشغيل Android أنّه لا يُسمح بإنشاء أو فحص الأجهزة الافتراضية المحمية إلا للتطبيقات التي لديها أذونات pVM.

  • برنامج تحميل التشغيل: يضمن برنامج تحميل التشغيل عدم السماح بتشغيل سوى صور pVM الموقّعة من Google أو مورّدي الأجهزة، كما يلتزم بإجراءات التحقّق من صحة تشغيل Android. تعني هذه البنية أنّ التطبيقات التي تعمل على أجهزة pVM لا يمكنها تجميع أنظمة التشغيل الخاصة بها.

  • توفّر الأجهزة الافتراضية المحمية دفاعًا شاملاً، مثل SELinux، للحِملات التي يتم تنفيذها في الأجهزة الافتراضية المحمية. تمنع استراتيجية الدفاع المتعمّق ربط البيانات كملفات قابلة للتنفيذ (neverallow execmem) وتضمن تطبيق W^X على جميع أنواع الملفات.

نموذج الأمان

تتألف السرية والسلامة ومدى التوفُّر (مثلث CIA) من نموذج مُصمَّم لتوجيه سياسات أمان المعلومات:

  • السرية هي مجموعة من القواعد التي تحدّ من الوصول إلى المعلومات.
  • السلامة هي ضمان موثوقية المعلومات ودقتها.
  • التوفّر هو ضمان إمكانية وصول الجهات المصرَّح لها إلى المعلومات بشكل موثوق.

السرية والسلامة

تنشأ السرية من خصائص عزل الذاكرة التي يفرضها برنامج pKVM للإشراف. يتتبّع pKVM ملكية الذاكرة لصفحات الذاكرة الفعلية الفردية وأي طلبات من المالكين لمشاركة الصفحات. يضمن pKVM أنّ الأجهزة الافتراضية المحمية (المضيف والضيوف) فقط هي التي يمكنها الوصول إلى الصفحة المحدّدة في جداول صفحات المرحلة الثانية التي يتحكّم فيها برنامج الإشراف. تؤكّد هذه البنية أنّ محتوى الذاكرة التي تملكها آلة افتراضية خاصة (pVM) يظل خاصًا ما لم يشاركه المالك صراحةً مع آلة افتراضية خاصة أخرى.

وتسري القيود المفروضة للحفاظ على السرية أيضًا على أي كيانات في النظام تنفّذ عمليات الوصول إلى الذاكرة نيابةً عن الأجهزة الافتراضية المحمية، أي الأجهزة المتوافقة مع الوصول المباشر إلى الذاكرة (DMA) والخدمات التي تعمل في طبقات أكثر امتيازًا. على مورّدي "الأنظمة المتكاملة على شريحة واحدة" (SoC) استيفاء مجموعة جديدة من المتطلبات قبل أن يتمكّنوا من توفير ميزة pKVM. وفي حال عدم توفّرها، لا يمكن توفير السرية.

تنطبق سلامة البيانات على البيانات في الذاكرة وعلى العمليات الحسابية. ولا يمكن لآلات pVM الافتراضية إجراء ما يلي:

  • تعديل ذكريات بعضكما البعض بدون موافقة
  • التأثير في حالة وحدة المعالجة المركزية لدى بعضهما البعض

يفرض المشرف هذه المتطلبات. ومع ذلك، تظهر أيضًا مشاكل تتعلّق بسلامة البيانات عند تخزين البيانات افتراضيًا، حيث يجب تطبيق حلول أخرى، مثل dm-verity أو AuthFS.

ولا تختلف هذه المبادئ عن عزل العمليات الذي يوفّره نظام التشغيل Linux، حيث يتم التحكّم في الوصول إلى صفحات الذاكرة باستخدام جداول صفحات المرحلة الأولى، كما أنّ نواة النظام تبدّل السياق بين العمليات. ومع ذلك، فإنّ جزء EL2 من pKVM، الذي يفرض هذه الخصائص، يوفّر مساحة أقل بثلاث مراتب من حيث الحجم مقارنةً بنواة Linux بأكملها (حوالي 10 آلاف سطر مقابل 20 مليون سطر من الرمز البرمجي)، وبالتالي يوفّر ضمانًا أقوى لحالات الاستخدام التي تكون حساسة جدًا بحيث لا يمكن الاعتماد على عزل العمليات.

وبالنظر إلى حجمه، يتيح pKVM إمكانية التحقّق الرسمي. نحن ندعم بنشاط الأبحاث الأكاديمية التي تهدف إلى إثبات هذه الخصائص رسميًا في رمز pKVM الثنائي الفعلي.

يتناول الجزء المتبقي من هذه الصفحة ضمانات السرية والتكامل التي يقدّمها كل مكوّن من مكوّنات pKVM.

Hypervisor

‫pKVM هو برنامج مراقبة يستند إلى KVM ويعزل الأجهزة الافتراضية المحمية ونظام التشغيل Android في بيئات تنفيذ لا يثق بعضها ببعض. وتظل هذه الخصائص سارية في حال حدوث أي اختراق داخل أي آلة افتراضية خاصة، بما في ذلك المضيف. يجب أن توفّر برامج الإشراف البديلة المتوافقة مع AVF خصائص مشابهة.

  • لا يمكن لجهاز VM خاص الوصول إلى صفحة تابعة لكيان آخر، مثل جهاز VM خاص أو برنامج مراقبة الأجهزة الافتراضية، ما لم يشاركها مالك الصفحة بشكل صريح. تشمل هذه القاعدة الجهاز الظاهري pVM المضيف وتنطبق على عمليات الوصول إلى وحدة المعالجة المركزية (CPU) والوصول المباشر إلى الذاكرة (DMA).

  • قبل إعادة صفحة مستخدَمة من قِبل آلة افتراضية محمية إلى المضيف، مثلاً عند إيقاف الآلة الافتراضية المحمية، يتم محو الصفحة.

  • يتم محو ذاكرة جميع الأجهزة الافتراضية المحمية (pVM) والبرامج الثابتة الخاصة بها من عملية تشغيل جهاز واحدة قبل تشغيل برنامج إقلاع نظام التشغيل في عملية تشغيل الجهاز اللاحقة.

  • عند توصيل أداة لتصحيح الأخطاء في الأجهزة، مثل SJTAG، لا يمكن لجهاز pVM الوصول إلى المفاتيح التي تم إنشاؤها سابقًا.

  • لا يتم تشغيل البرامج الثابتة لـ pVM إذا تعذّر التحقّق من الصورة الأولية.

  • لا يتم تشغيل البرامج الثابتة لآلة pVM إذا تم اختراق سلامة instance.img.

  • لا يمكن استخلاص سلسلة شهادات DICE ومعرّفات الأجهزة المركّبة (CDI) المقدَّمة إلى مثيل جهاز افتراضي محمي (pVM) إلا من خلال هذا المثيل تحديدًا.

نظام التشغيل الضيف

Microdroid هو مثال على نظام تشغيل يعمل ضمن آلة افتراضية محمية. يتألف Microdroid من برنامج تحميل إقلاع يستند إلى U-boot، وGKI، ومجموعة فرعية من مساحة مستخدم Android، ومشغّل حمولة. وتظل هذه الخصائص سارية في حال حدوث اختراق في أي آلة افتراضية خاصة، بما في ذلك المضيف. يجب أن توفّر أنظمة التشغيل البديلة التي تعمل في آلة افتراضية محمية (pVM) خصائص مشابهة.

  • لن يتم تشغيل Microdroid إذا تعذّر التحقّق من boot.img أو super.img أو vbmeta.img أو vbmeta\_system.img.

  • لن يتم تشغيل Microdroid إذا تعذّر إثبات صحة حزمة APK.

  • لن يتم تشغيل مثيل Microdroid نفسه حتى إذا تم تحديث حزمة APK.

  • لن يتم تشغيل Microdroid إذا تعذّر التحقّق من أي من حِزم APEX.

  • لن يتم تشغيل Microdroid (أو سيتم تشغيله بحالة أولية نظيفة) إذا تم تعديل instance.img خارج الجهاز الظاهري المحمي (pVM) للضيف.

  • توفّر Microdroid شهادة إثبات صحة لسلسلة التشغيل.

  • أي تعديل (غير موقّع) على صور القرص التي تتم مشاركتها مع الجهاز الظاهري الخاص بالضيف (pVM) يؤدي إلى حدوث خطأ في الإدخال/الإخراج من جهة الجهاز الظاهري الخاص بالضيف.

  • لا يمكن استخلاص سلسلة شهادات DICE ومعرّفات الجهاز المركّب (CDI) المقدَّمة إلى مثيل الجهاز الظاهري المحمي (pVM) إلا من خلال هذا المثيل تحديدًا.

  • تكون عمليات الكتابة في وحدة تخزين مشفّرة سرية، ولكن لا تتوفّر حماية من التراجع على مستوى دقة وحدة التشفير. بالإضافة إلى ذلك، يؤدي أي تلاعب خارجي عشوائي آخر في أحد أقسام البيانات إلى ظهور هذا القسم على أنّه غير صالح بالنسبة إلى Microdroid، بدلاً من رصده بشكل صريح على أنّه خطأ في الإدخال/الإخراج.

Android

في ما يلي الخصائص التي يحتفظ بها نظام التشغيل Android كمضيف، ولكن لا تنطبق في حال تعرّض المضيف للخطر:

  • لا يمكن لآلة افتراضية شخصية للضيف التفاعل مباشرةً مع آلات افتراضية شخصية أخرى للضيوف (مثل إنشاء vsock اتصال).

  • يمكن VirtualizationService في الجهاز الظاهري للمضيف فقط إنشاء قناة اتصال مع جهاز ظاهري.

  • يمكن للتطبيقات الموقَّعة باستخدام مفتاح النظام الأساسي فقط طلب الإذن بإنشاء أجهزة VM محمية أو امتلاكها أو التفاعل معها.

  • لا تتم إعادة استخدام المعرّف، الذي يُطلق عليه اسم معرّف السياق (CID)، والمستخدَم في إعداد vsockعمليات الربط بين الجهاز المضيف والجهاز الظاهري المحمي (pVM) عندما يكون الجهاز الظاهري المحمي (pVM) للمضيف قيد التشغيل. على سبيل المثال، لا يمكنك استبدال آلة افتراضية قيد التشغيل بآلة أخرى.

مدى التوفّر

في سياق الآلات الافتراضية الخاصة، يشير مصطلح التوفّر إلى تخصيص المضيف موارد كافية للضيوف حتى يتمكّنوا من تنفيذ المهام التي تم تصميمهم لتنفيذها.

تشمل مسؤوليات المضيف جدولة وحدات المعالجة المركزية الافتراضية الخاصة بالجهاز الظاهري المحمي. تتّخذ KVM، على عكس برامج Hypervisor التقليدية من النوع 1 (مثل Xen)، قرارًا تصميميًا واضحًا بتفويض جدولة أعباء العمل إلى نواة المضيف. بالنظر إلى حجم وتعقيد أدوات الجدولة الحالية، يقلّل قرار التصميم هذا بشكل كبير من حجم قاعدة الحوسبة الموثوقة (TCB) ويتيح للمضيف اتخاذ قرارات جدولة أكثر استنارة لتحسين الأداء. ومع ذلك، يمكن لمضيف ضار اختيار عدم جدولة أي ضيف.

وبالمثل، تفوّض ميزة pKVM أيضًا مهمة معالجة المقاطعات المادية إلى نواة المضيف للحدّ من تعقيد برنامج Hypervisor وترك المضيف مسؤولاً عن عملية الجدولة. يتم بذل جهد لضمان أنّ إعادة توجيه مقاطعات الضيف تؤدي فقط إلى رفض الخدمة (عدد قليل جدًا أو عدد كبير جدًا أو مقاطعات تم توجيهها بشكل خاطئ).

أخيرًا، تكون عملية مراقبة الجهاز الافتراضي (VMM) للمضيف مسؤولة عن تخصيص الذاكرة وتوفير الأجهزة الافتراضية، مثل بطاقة الشبكة. يمكن لبرنامج VMM ضار حجب الموارد عن الجهاز الضيف.

على الرغم من أنّ pKVM لا يوفّر إمكانية الوصول إلى الضيوف، إلا أنّ التصميم يحمي إمكانية الوصول إلى المضيف من الضيوف الضارين لأنّه يمكن للمضيف دائمًا إيقاف الضيف أو إنهاء عمله واستعادة موارده.

بروتوكول التشغيل الآمن

ترتبط البيانات بنسخ من الآلة الافتراضية المحمية، ويضمن التمهيد الآمن إمكانية التحكّم في الوصول إلى بيانات النسخة. عند تشغيل الجهاز الافتراضي لأول مرة، يتم توفير الموارد له من خلال إنشاء قيمة عشوائية سرية لـ pVM واستخراج التفاصيل، مثل مفاتيح التحقق العامة والتجزئة، من الصور التي تم تحميلها. تُستخدَم هذه المعلومات للتحقّق من عمليات إعادة التشغيل اللاحقة لمثيل الجهاز الظاهري المحمي (pVM) ولضمان عدم إتاحة أسرار المثيل إلا للصور التي تنجح في عملية التحقّق. تحدث هذه العملية في كل مرحلة تحميل ضمن الجهاز الظاهري المحمي (pVM): البرامج الثابتة للجهاز الظاهري المحمي، وABL للجهاز الظاهري المحمي، وMicrodroid، وما إلى ذلك.

يوفّر DICE لكل مرحلة تحميل زوج مفاتيح إثبات صحة، ويتم اعتماد الجزء العام منهما في شهادة DICE الخاصة بهذه المرحلة. يمكن أن يتغيّر زوج المفاتيح هذا بين عمليات إعادة التشغيل، لذا يتم أيضًا استخراج سرّ إغلاق يكون ثابتًا لمثيل الجهاز الافتراضي على مستوى عمليات إعادة التشغيل، وبالتالي يكون مناسبًا لحماية الحالة الثابتة. إنّ سر الختم مهم جدًا للجهاز الافتراضي، لذا يجب عدم استخدامه مباشرةً. بدلاً من ذلك، يجب استخلاص مفاتيح التشفير من سر التشفير، ويجب إتلاف سر التشفير في أقرب وقت ممكن.

تسلّم كل مرحلة كائن CBOR مشفّرًا بشكل حتمي إلى المرحلة التالية. يحتوي هذا العنصر على أسرار وسلسلة شهادات DICE، والتي تتضمّن معلومات الحالة المتراكمة، مثل ما إذا كانت المرحلة الأخيرة قد تم تحميلها بشكل آمن.

الأجهزة غير المقفلة

عند فتح قفل الجهاز باستخدام fastboot oem unlock، يتم محو بيانات المستخدم. وتحمي هذه العملية بيانات المستخدم من الوصول غير المصرَّح به. يتم أيضًا إبطال البيانات الخاصة بآلة افتراضية محمية عند فتح قفل الجهاز.

بعد إلغاء القفل، يمكن لمالك الجهاز إعادة فلاش الأقسام التي تكون عادةً محمية من خلال ميزة "التمهيد المُتحقّق منه"، بما في ذلك الأقسام التي تحتوي على pvmfw وتنفيذ pKVM. لذلك، لا يمكن الوثوق بجهاز غير مقفل للحفاظ على نموذج الأمان الخاص بآلة pVM.

يمكن للجهات البعيدة ملاحظة هذه الحالة غير الآمنة المحتملة من خلال فحص حالة التشغيل التي تم التحقّق منها للجهاز في شهادة مصادقة المفتاح.