Дополнительные обновления безопасности

В связи с переходом Android к непрерывному выпуску обновлений и ежеквартальным выпускам бюллетеней в рамках обновлений безопасности, основанных на оценке рисков , производители оборудования могут предпочесть устранять уязвимости между выпусками, а не ждать целый квартал. Функция дополнительных XML-файлов с исправлениями безопасности позволяет производителям оборудования сообщать об исправленных CVE, выходящих за рамки заявленного уровня исправлений безопасности (SPL), предоставляя стандартизированный XML-файл, благодаря чему производители получают зачет за непрерывное обновление.

Поток высокого уровня

Диаграмма, демонстрирующая поток XML-данных дополнительных исправлений безопасности от системных, производственных и продуктовых разделов OEM к API фреймворка AOSP.

Рисунок 1. Архитектура и поток данных дополнительных исправлений безопасности.

Производители оборудования могут размещать XML-файл в нескольких разделах устройства ( /system , /vendor или /product ), обеспечивая учет исправлений безопасности как от самой платформы, так и от аппаратных компонентов. XML-файл должен быть установлен в файл /etc/security/supplemental_security_patches.xml для соответствующего раздела.

Платформа собирает данные CVE по всем этим разделам устройства и предоставляет к ним доступ через API платформы и библиотеки Jetpack. Подробности см. в разделах «API платформы 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>

API платформы (Android 17 и выше)

Для Android 17 (уровень API 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 и более ранних версий поддержка API платформы отсутствует. Вместо этого библиотека 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 Open Source Project (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-файле. Таким образом, помимо отражения состояния безопасности устройства, правильная интеграция этого файла позволяет производителям оборудования проводить упреждающий анализ исправлений уязвимостей, устраненных выше уровня безопасности устройства (SPL), вместо того, чтобы ждать официального объявления ежеквартального уровня безопасности (SPL).