رموز تصحيح الأمان الإضافية

مع تحوّل Android نحو الإصدار المستمر والنشرات الفصلية كجزء من تحديثات الأمان المستندة إلى المخاطر، قد يرغب المصنّعون الأصليون للأجهزة في إصلاح الثغرات الأمنية بين الإصدارات بدلاً من الانتظار لمدة فصل كامل. تتيح ميزة ملف XML الخاص برقعة الأمان التكميلية للمصنّعين الأصليين للأجهزة الإبلاغ عن الثغرات الأمنية الشائعة التي تم إصلاحها بما يتجاوز مستوى رمز تصحيح الأمان (SPL) المعلَن عنه من خلال تقديم ملف XML موحّد، ما يمنحهم رصيدًا مقابل عملية الإصلاح المستمرة.

خطوات التنفيذ العالية المستوى

مخطّط بياني يوضّح تدفّق بيانات XML الخاصة بحِزم الأمان الإضافية من نظام الشركة المصنّعة الأصلية (OEM) وأقسام المورّد والمنتج إلى واجهة برمجة التطبيقات (API) لإطار عمل مشروع Android مفتوح المصدر (AOSP)

الشكل 1: بنية رقع الأمان التكميلية وتدفق البيانات

يمكن للمصنّعين الأصليين للأجهزة وضع ملف XML في أقسام متعددة من الجهاز (/system أو /vendor أو /product)، ما يضمن أخذ رقع الأمان من كلٍّ من إطار العمل والمكوّنات الخاصة بالأجهزة في الاعتبار. يجب تثبيت ملف XML في المسار /etc/security/supplemental_security_patches.xml للقسم المعنيّ.

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

يعرض المثال التالي نموذجًا لملف XML الخاص برقعة الأمان التكميلية الذي تم تثبيته على جهاز يعمل بنظام Android:

<?xml version="1.0" encoding="utf-8"?>
<security-patches xmlns="http://schemas.android.com/security/patches/1.0">
    <patch><id>CVE-2026-12345</id></patch>
</security-patches>

واجهة برمجة التطبيقات الخاصة بالنظام الأساسي (Android 17 والإصدارات الأحدث)

في Android 17 (مستوى واجهة برمجة التطبيقات 37) والإصدارات الأحدث، تعالج السمة SecurityStateManager تحليل الرقع التكميلية من جميع مواقع الأقسام المتوافقة وتعرضها في عنصر Bundle الذي يتم عرضه من getGlobalSecurityState باستخدام المفتاحَين KEY_SYSTEM_SUPPLEMENTAL_PATCHES و KEY_VENDOR_SUPPLEMENTAL_PATCHES.

تجمع خدمة تابعة لنظام التشغيل SecurityStateManagerService ملفات XML الخاصة بالأقسام في هذَين المجلّدَين الشاملَين لإعداد التقارير:

  • KEY_SYSTEM_SUPPLEMENTAL_PATCHES: يجمع الرقع من مسارات الأقسام /system و /system_ext و/product.
  • KEY_VENDOR_SUPPLEMENTAL_PATCHES: يجمع الرقع من مسارات الأقسام /vendor و/odm.

إعادة نقل الميزات إلى إصدارات Android السابقة

لا تتوفّر واجهة برمجة تطبيقات خاصة بالنظام الأساسي في Android 16 والإصدارات الأقدم. بدلاً من ذلك، تقرأ مكتبة Jetpack‏ androidx.security:security-state‏ (SecurityStateManagerCompat) ملفات XML يدويًا باستخدام XmlPullParser. للسماح للنطاق untrusted_app بقراءة الملفات على Android 16 والإصدارات الأقدم، يجب أن ينفّذ المصنّعون الأصليون للأجهزة تغييرات SELinux التالية على جميع مسارات الأقسام التي تم تثبيت ملف XML فيها:

file_contexts:

/(system|vendor|product|system_ext|odm)/etc/security/supplemental_security_patches\.xml u:object_r:supplemental_security_patches:s0

supplemental_security_patches.te:

allow untrusted_app supplemental_security_patches:file { getattr open read };

قواعد الإنشاء والتحقّق من صحة المخطط

لتثبيت ملف XML الخاص برقعة الأمان التكميلية في /vendor/etc/security/, /system/etc/security/, أو /product/etc/security/، أضِف قاعدة prebuilt_etc في Android.bp. بما أنّ SecurityStateManagerService يتوقّع أن يكون اسم الملف على الجهاز هو supplemental_security_patches.xml بالضبط، استخدِم السمة filename عند استخدام أسماء الوحدات الخاصة بالأقسام:

// For vendor partition (/vendor/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "vendor_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
    vendor: true,
}
// For system partition (/system/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "system_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
}
// For product partition (/product/etc/security/supplemental_security_patches.xml)
prebuilt_etc {
    name: "product_supplemental_security_patches.xml",
    src: "supplemental_security_patches.xml",
    filename: "supplemental_security_patches.xml",
    sub_dir: "security",
    product_specific: true,
}

يتضمّن مشروع Android مفتوح المصدر (AOSP) مخطط XSD في supplemental_security_patches.xsd ويتحقّق من صحة تنسيق ملف XML أثناء عملية الإنشاء باستخدام قاعدة الإنشاء xsdc في Android.bp:

xsdc {
    name: "supplemental_security_patches_xsd",
    srcs: ["supplemental_security_patches/supplemental_security_patches.xsd"],
    package_name: "android.security.patches", // Java package name for generated code
}

يمكنك أيضًا التحقّق من صحة ملف XML محليًا باستخدام مخطط XSD من خلال xmllint:

xmllint --schema frameworks/base/services/core/xsd/supplemental_security_patches/supplemental_security_patches.xsd --noout supplemental_security_patches.xml

الاختبار وعملية التكامل مع المجموعة

تستخدم مجموعة اختبار الأمان (STS) ومجموعة تحليل البرامج الثابتة (BTS) البيانات من ملف supplemental_security_patches.xml لتوسيع نطاق تحليل الرقع للثغرات الأمنية الموجودة في ملف XML. بالإضافة إلى عرض حالة أمان الجهاز، يتيح دمج هذا الملف بشكل صحيح للمصنّعين الأصليين للأجهزة إجراء تحليل استباقي للرقع على الثغرات الأمنية التي تم إصلاحها بما يتجاوز مستوى رقعة الأمان للجهاز بدلاً من انتظار الإعلان الرسمي عن مستوى رقعة الأمان الفصلي.