وصله‌های امنیتی تکمیلی

با تغییر رویکرد اندروید به سمت انتشار مداوم و بولتن‌های فصلی به عنوان بخشی از به‌روزرسانی‌های امنیتی مبتنی بر ریسک ، تولیدکنندگان اصلی تجهیزات (OEM) ممکن است بخواهند آسیب‌پذیری‌ها را بین انتشارها برطرف کنند، نه اینکه یک فصل کامل را منتظر بمانند. ویژگی XML وصله امنیتی تکمیلی به تولیدکنندگان اصلی تجهیزات اجازه می‌دهد تا با ارائه یک فایل XML استاندارد، CVEهای وصله شده فراتر از سطح وصله امنیتی اعلام شده (SPL) را گزارش دهند، بنابراین تولیدکنندگان اصلی تجهیزات از بابت وصله‌های مداوم اعتبار دریافت می‌کنند.

جریان سطح بالا

نموداری که جریان داده‌های XML وصله‌های امنیتی تکمیلی را از سیستم OEM، پارتیشن‌های فروشنده و محصول به API چارچوب AOSP نشان می‌دهد

شکل ۱. معماری و جریان داده‌های وصله‌های امنیتی تکمیلی

تولیدکنندگان اصلی تجهیزات (OEM) می‌توانند فایل XML را در چندین پارتیشن دستگاه ( /system ، /vendor یا /product ) قرار دهند و اطمینان حاصل کنند که وصله‌های امنیتی از هر دو بخش فریم‌ورک و اجزای خاص سخت‌افزار در نظر گرفته شده‌اند. فایل XML باید در /etc/security/supplemental_security_patches.xml برای پارتیشن مربوطه نصب شود.

این پلتفرم داده‌های CVE را در سراسر این پارتیشن‌های دستگاه جمع‌آوری کرده و آنها را در APIهای پلتفرم و کتابخانه‌های Jetpack قرار می‌دهد. برای جزئیات بیشتر، به Platform API Android نسخه ۱۷ و بالاتر و Backport برای نسخه‌های پایین‌تر اندروید مراجعه کنید.

مثال زیر یک نمونه فایل XML وصله امنیتی تکمیلی نصب شده روی یک دستگاه اندروید را نشان می‌دهد:

<?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>

API پلتفرم (اندروید ۱۷ و بالاتر)

برای اندروید ۱۷ (سطح API ۳۷) و بالاتر، SecurityStateManager پلتفرم، تجزیه پچ‌های تکمیلی را از تمام مکان‌های پارتیشن پشتیبانی‌شده مدیریت می‌کند و آن‌ها را با استفاده از کلیدهای KEY_SYSTEM_SUPPLEMENTAL_PATCHES و KEY_VENDOR_SUPPLEMENTAL_PATCHES در Bundle برگردانده شده از getGlobalSecurityState نمایش می‌دهد.

سرویس سیستمی SecurityStateManagerService فایل‌های XML پارتیشن را در این دو مخزن گزارش‌دهی چتری تجمیع می‌کند:

  • KEY_SYSTEM_SUPPLEMENTAL_PATCHES : پچ‌ها را از مسیرهای پارتیشن /system ، /system_ext و /product جمع‌آوری می‌کند.
  • KEY_VENDOR_SUPPLEMENTAL_PATCHES : پچ‌ها را از مسیرهای پارتیشن /vendor و /odm جمع‌آوری می‌کند.

بک‌پورت برای نسخه‌های پایین‌تر اندروید

برای اندروید ۱۶ و پایین‌تر، هیچ پشتیبانی از API پلتفرم وجود ندارد. در عوض، کتابخانه Jetpack androidx.security:security-state ( SecurityStateManagerCompat ) فایل‌های XML را به صورت دستی با استفاده از XmlPullParser می‌خواند. برای اینکه دامنه untrusted_app بتواند فایل‌ها را در اندروید ۱۶ و پایین‌تر بخواند، تولیدکنندگان اصلی تجهیزات (OEM) باید تغییرات 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,
}

پروژه متن‌باز اندروید (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 خود را به صورت محلی با استفاده از xmllint در برابر طرحواره XSD اعتبارسنجی کنید:

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 استفاده می‌کنند. بنابراین، جدا از انعکاس وضعیت امنیتی دستگاه، ادغام صحیح این فایل به تولیدکنندگان اصلی تجهیزات (OEM) اجازه می‌دهد تا به جای انتظار برای اعلام رسمی SPL فصلی، تحلیل وصله پیشگیرانه را روی آسیب‌پذیری‌های وصله شده بالاتر از SPL دستگاه انجام دهند.