لزيادة الثقة في نظام التشغيل Android، نلتزم بإدراج كل وحدة من وحدات نظام التشغيل Android (المعروفة باسم Mainline) التي يتم توفيرها كتحديث عبر Google Play في سجلّ الشفافية. ننشر سجلّ الشفافية للتحقّق من صحة الادعاءات التي نقدّمها بشأن هذه الوحدات. لا يتم إدراج الوحدات المثبَّتة مسبقًا بشكلٍ صريح لأنّها مشمولة حاليًا بميزة الشفافية الثنائية على أجهزة Pixel.
نموذج التهديد
يمكن استخدام أنظمة الشفافية لرصد هجمات سلسلة الإمداد وردعها. نوضّح ذلك ببعض الأمثلة.
لنفترض أنّ مهاجمًا يعدّل بشكلٍ ضارّ إحدى وحدات Mainline (التي يمكن أن تكون إما ملف APEX أو APK) ويتمكّن حتى من توقيعها باستخدام مفتاح التوقيع المستخدَم للتوزيع عبر Google Play. يمكن لأيّ مستخدم يتلقّى وحدة مشبوهة الاستعلام عن سجلّ الشفافية الثنائية للتحقّق من صحة الوحدة. سيلاحظ المستخدم أنّ Google لم تُضِف بيانات وصفية للوحدة المقابلة إلى السجلّ، وسيعرف أنّه لا يجب الوثوق بوحدة نظام التشغيل المخترَقة.
بما أنّ عملية النشر في السجلّ منفصلة عن عملية الإصدار مع التوقيع، فإنّ ذلك يرفع مستوى التحدّي للمهاجم إلى ما هو أبعد من مجرد اختراق المفتاح.
في الوقت الذي نخطّط فيه أيضًا لدمج هذا السجلّ في شبكة عامة من الشهود باستخدام بروتوكول شهود موحّد، ننصح الجهات الخارجية المستقلة بمراقبة سلامة هذا السجلّ المتاح للجميع. يمكن لهذه الجهات إثبات خاصية الإضافة فقط في السجلّ والإبلاغ عن أيّ تلاعب.
إنّ وجود نظام شفافية من هذا النوع وإمكانية اكتشاف الهجمات بشكلٍ إضافي يثنيان عن النشاط الضار. إذا تم اختراق إحدى وحدات نظام التشغيل، ولكنّ المستخدمين يثقون فقط بالوحدات المدرَجة في السجلّ، يجب الكشف عن الوحدة المخترَقة للجميع. يزيد ذلك من احتمالية اكتشاف وجود الوحدات المخترَقة، ويمكن اتّخاذ إجراء لإزالة توزيعها.
نموذج المدّعي
نموذج المدّعي هو إطار عمل يُستخدَم لتحديد الأدوار والبيانات في نظام يمكن التحقّق منه. في حالة شفافية وحدات Android Mainline، فإنّ الادعاء الذي نقدّمه هو أنّ تجزئة ملف وحدة مسجّلة في هذا السجلّ تمثّل إصدارًا معيّنًا من وحدة Android رسمية مخصّصة للاستخدام العام.
- ClaimMainlineModule: (أنا Google، أزعم أنّ
$hashModuleمخصّصة لـ$mainlineModule)، حيث:
يمكن لأيّ مستخدم لديه نسخة من $mainlineModule التحقّق من هذا الادعاء.
تقدّم صفحة التحقّق تعليمات مفصّلة
لهذه العملية.
تنطبق هذه الخطوات على كلّ من ملفات APK العادية ووحدات Mainline (التي يمكن أن تكون ملفات APK أو APEX).
محتوى السجلّ
عندما تطرح Google إصدارًا جديدًا من إحدى وحدات Mainline، فإنّها تُضيف إدخالاً مطابقًا إلى سجلّ شفافية وحدات Mainline.
يحتوي كل إدخال في هذا السجلّ على أربعة أنواع من البيانات الوصفية:
- تجزئة ملف APK أو APEX لوحدة Android Mainline موقَّعة وهي سلسلة سداسية عشرية من ملخّص SHA256 للملف بأكمله.
- وصف لنوع التجزئة أعلاه وهو عبارة عن سلسلة.
- اسم حزمة الوحدة وهو عبارة عن سلسلة.
- رقم إصدار الوحدة (versionCode) وهو عدد صحيح غير صفري.
تنسيق إدخال في السجلّ هو دمج المعلومات الأربعة مع حرف سطر جديد (\n)، كما هو موضّح أدناه:
hash\nhash_description\npackage_name\npackage_version\n
بما أنّ وحدة Mainline يمكن أن تكون ملف APK أو APEX، يمكن أن يكون وصف التجزئة SHA256(APK) أو SHA256(APEX).