Bản vá bảo mật bổ sung

Khi Android chuyển sang phát hành liên tục và bản tin hằng quý trong khuôn khổ các bản cập nhật bảo mật dựa trên rủi ro, các OEM có thể muốn khắc phục các lỗ hổng bảo mật giữa các bản phát hành thay vì chờ đợi cả một quý. Tính năng XML bản vá bảo mật bổ sung cho phép các OEM báo cáo các CVE đã được vá ngoài cấp bản vá bảo mật (SPL) đã khai báo bằng cách cung cấp một tệp XML tiêu chuẩn, nhờ đó các OEM sẽ được ghi nhận vì đã vá lỗi liên tục.

Luồng cấp cao

Biểu đồ minh hoạ luồng dữ liệu XML của bản vá bảo mật bổ sung từ hệ thống OEM, phân vùng nhà cung cấp và sản phẩm đến AOSP Framework API

Hình 1. Kiến trúc và luồng dữ liệu của các bản vá bảo mật bổ sung.

Các OEM có thể đặt tệp XML trên nhiều phân vùng thiết bị (/system, /vendor hoặc /product), đảm bảo rằng các bản vá bảo mật từ cả khung và các thành phần dành riêng cho phần cứng đều được tính đến. Bạn nên cài đặt tệp XML trong /etc/security/supplemental_security_patches.xml cho phân vùng tương ứng.

Nền tảng này tổng hợp dữ liệu CVE trên các phân vùng thiết bị này và hiển thị dữ liệu đó trong các API nền tảng và thư viện Jetpack. Để biết thông tin chi tiết, hãy xem API nền tảng Android 17 trở lênChuyển ngược về các phiên bản Android thấp hơn.

Ví dụ sau đây cho thấy một tệp XML bản vá bảo mật bổ sung mẫu được cài đặt trên một thiết bị chạy 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 nền tảng (Android 17 trở lên)

Đối với Android 17 (cấp độ API 37) trở lên, SecurityStateManager của nền tảng sẽ xử lý việc phân tích cú pháp các bản vá bổ sung từ tất cả các vị trí phân vùng được hỗ trợ và hiển thị các bản vá đó trong Bundle được trả về từ getGlobalSecurityState bằng cách sử dụng các khoá KEY_SYSTEM_SUPPLEMENTAL_PATCHESKEY_VENDOR_SUPPLEMENTAL_PATCHES.

Dịch vụ hệ thống SecurityStateManagerService tổng hợp các tệp XML phân vùng vào hai nhóm báo cáo chung sau:

  • KEY_SYSTEM_SUPPLEMENTAL_PATCHES: Tổng hợp các bản vá từ các đường dẫn phân vùng /system, /system_ext/product.
  • KEY_VENDOR_SUPPLEMENTAL_PATCHES: Tổng hợp các bản vá từ /vendor/odm đường dẫn phân vùng.

Chuyển ngược về các phiên bản Android thấp hơn

Đối với Android 16 trở xuống, không có sự hỗ trợ API nền tảng. Thay vào đó, thư viện Jetpack androidx.security:security-state (SecurityStateManagerCompat) sẽ đọc các tệp XML theo cách thủ công bằng cách sử dụng XmlPullParser. Để cho phép miền untrusted_app đọc các tệp trên Android 16 trở xuống, OEM phải triển khai các thay đổi sau đây đối với SELinux trên tất cả các đường dẫn phân vùng nơi tệp XML được cài đặt:

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 };

Xây dựng quy tắc và xác thực giản đồ

Để cài đặt tệp XML bản vá bổ sung vào /vendor/etc/security/, /system/etc/security/ hoặc /product/etc/security/, hãy thêm một quy tắc prebuilt_etc trong Android.bp. Vì SecurityStateManagerService dự kiến tệp trên thiết bị sẽ có tên chính xác là supplemental_security_patches.xml, hãy sử dụng thuộc tính filename khi dùng tên mô-đun dành riêng cho phân vùng:

// 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,
}

Dự án nguồn mở Android (AOSP) bao gồm lược đồ XSD trong supplemental_security_patches.xsd và xác thực định dạng tệp XML trong quá trình xây dựng bằng quy tắc xây dựng xsdc trong 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
}

Bạn cũng có thể xác thực tệp XML cục bộ dựa trên giản đồ XSD bằng cách sử dụng xmllint:

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

Tích hợp kiểm thử và bộ kiểm thử

Bộ kiểm thử bảo mật (STS)Phân tích phần mềm cơ sở (BTS) sử dụng dữ liệu từ tệp supplemental_security_patches.xml để mở rộng hoạt động phân tích bản vá đối với các lỗ hổng có trong tệp XML. Ngoài việc phản ánh trạng thái bảo mật của thiết bị, việc tích hợp chính xác tệp này còn cho phép các OEM thực hiện phân tích chủ động các bản vá đối với những lỗ hổng được vá ở trên SPL của thiết bị thay vì chờ SPL hằng quý được công bố chính thức.