W związku z przejściem Androida na ciągłe wydawanie i kwartalne biuletyny w ramach aktualizacji zabezpieczeń opartych na ryzyku producenci OEM mogą chcieć naprawiać luki między wydaniami, zamiast czekać cały kwartał. Funkcja dodatkowego pliku XML z poprawkami zabezpieczeń umożliwia producentom OEM zgłaszanie luk CVE, które zostały załatane poza zadeklarowanym poziomem aktualizacji zabezpieczeń (SPL), przez udostępnienie standardowego pliku XML. Dzięki temu producenci OEM otrzymują uznanie za ciągłe łatanie.
Przepływ zadań wysokiego poziomu
Rysunek 1. Architektura i przepływ danych dodatkowych poprawek zabezpieczeń.
Producenci OEM mogą umieścić plik XML w wielu partycjach urządzenia (/system, /vendor lub /product), co zapewni uwzględnienie poprawek zabezpieczeń zarówno z platformy, jak i komponentów specyficznych dla sprzętu. Plik XML należy zainstalować w ścieżce /etc/security/supplemental_security_patches.xml w odpowiedniej partycji.
Platforma agreguje dane CVE w tych partycjach urządzenia i udostępnia je w interfejsach API platformy oraz bibliotekach Jetpack. Więcej informacji znajdziesz w sekcjach Interfejs API platformy (Android 17 i nowszy) oraz Przenoszenie do starszych wersji Androida.
Ten przykład pokazuje przykładowy dodatkowy plik XML z poprawkami zabezpieczeń zainstalowany na urządzeniu z Androidem:
<?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>
Interfejs API platformy (Android 17 i nowszy)
W Androidzie 17 (poziom interfejsu API 37) i nowszym usługa
SecurityStateManager obsługuje analizowanie dodatkowych poprawek ze wszystkich
obsługiwanych lokalizacji partycji i udostępnia je w zwróconym pakiecie z
getGlobalSecurityState za pomocą kluczy KEY_SYSTEM_SUPPLEMENTAL_PATCHES
i KEY_VENDOR_SUPPLEMENTAL_PATCHES.
Usługa systemowa SecurityStateManagerService agreguje pliki XML partycji w tych 2 zbiorczych zasobnikach raportowania:
KEY_SYSTEM_SUPPLEMENTAL_PATCHES: agreguje poprawki ze ścieżek partycji/system,/system_exti/product.KEY_VENDOR_SUPPLEMENTAL_PATCHES: agreguje poprawki ze ścieżek partycji/vendori/odm.
Przenoszenie do starszych wersji Androida
W Androidzie 16 i starszym nie ma obsługi interfejsu API platformy. Zamiast tego biblioteka Jetpack
androidx.security:security-state (SecurityStateManagerCompat)
ręcznie odczytuje pliki XML za pomocą XmlPullParser. Aby umożliwić domenie untrusted_app odczytywanie plików w Androidzie 16 i starszym, producenci OEM muszą wprowadzić te zmiany w SELinux we wszystkich ścieżkach partycji, w których zainstalowany jest plik 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 };
Reguły kompilacji i sprawdzanie schematu
Aby zainstalować dodatkowy plik XML z poprawkami w ścieżce /vendor/etc/security/,
/system/etc/security/, lub /product/etc/security/, dodaj regułę prebuilt_etc
w Android.bp. Ponieważ usługa SecurityStateManagerService oczekuje, że plik na urządzeniu będzie miał dokładnie nazwę supplemental_security_patches.xml, użyj właściwości filename, gdy używasz nazw modułów specyficznych dla partycji:
// 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,
}
Projekt Android Open Source Project (AOSP) zawiera schemat XSD w
supplemental_security_patches.xsd
i sprawdza format pliku XML podczas procesu kompilacji za pomocą reguły kompilacji xsdc
w pliku 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
}
Możesz też sprawdzić plik XML lokalnie pod kątem schematu XSD za pomocą narzędzia xmllint:
xmllint --schema frameworks/base/services/core/xsd/supplemental_security_patches/supplemental_security_patches.xsd --noout supplemental_security_patches.xml
Testowanie i integracja z pakietem
Pakiet Security Test Suite (STS) i analiza oprogramowania układowego (BTS) używają
danych z pliku supplemental_security_patches.xml do rozszerzenia analizy
poprawek pod kątem luk w zabezpieczeniach występujących w pliku XML. Dzięki temu oprócz odzwierciedlania stanu zabezpieczeń urządzenia prawidłowa integracja tego pliku umożliwia producentom OEM przeprowadzanie proaktywnej analizy poprawek pod kątem luk w zabezpieczeniach załatanych powyżej poziomu SPL urządzenia, zamiast czekać na oficjalne ogłoszenie kwartalnego poziomu SPL.