Android がリスクベースのセキュリティ アップデートの一環として継続的なリリースと四半期ごとの公開情報に移行したため、OEM は四半期全体を待つのを待つのではなく、リリース間の脆弱性を修正したいと考えるかもしれません。補足的なセキュリティ パッチ XML 機能を使用すると、標準化された XML ファイルを提供することで、宣言されたセキュリティ パッチレベル(SPL)を超えてパッチが適用された CVE を報告できるため、OEM は継続的なパッチ適用に対する評価を得ることができます。
場合にのみ必要です。大まかな流れ
図 1.補足的なセキュリティ パッチのアーキテクチャとデータフロー。
OEM は、XML ファイルを複数のデバイス パーティション(/system、/vendor、/product)に配置して、フレームワークとハードウェア固有のコンポーネントの両方のセキュリティ
パッチが考慮されるようにすることができます。XML ファイルは、それぞれのパーティションの /etc/security/supplemental_security_patches.xml
にインストールする必要があります。
プラットフォームは、これらのデバイス パーティション間で CVE データを集約し、プラットフォーム API と Jetpack ライブラリで公開します。詳細については、 プラットフォーム API Android 17 以降 と下位の Android バージョンへのバックポートをご覧ください。
次の例は、Android 搭載デバイスにインストールされている補足的なセキュリティ パッチ 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(Android 17 以降)
Android 17(API レベル 37)以降では、プラットフォームの
SecurityStateManagerがサポートされているすべての
パーティションの場所から補足的なパッチの解析を処理し、
getGlobalSecurityStateから返された Bundle で、キーKEY_SYSTEM_SUPPLEMENTAL_PATCHES
とKEY_VENDOR_SUPPLEMENTAL_PATCHESを使用して公開します。
システム サービス SecurityStateManagerService は、パーティション XML ファイルを次の 2
つの包括的なレポート バケットに集約します。
KEY_SYSTEM_SUPPLEMENTAL_PATCHES:/system、/system_ext、/productのパーティション パスからパッチを集約します。KEY_VENDOR_SUPPLEMENTAL_PATCHES:/vendorと/odmのパーティション パスからパッチを集約します。
下位の Android バージョンへのバックポート
Android 16 以前では、プラットフォーム API はサポートされていません。代わりに、Jetpack
androidx.security:security-state ライブラリ(SecurityStateManagerCompat)
が XmlPullParser を使用して XML ファイルを手動で読み取ります。untrusted_app ドメインが Android 16
以前のファイルにアクセスできるようにするには、XML ファイルがインストールされているすべてのパーティション パスで、OEM は次の SELinux
の変更を実装する必要があります。
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
に含まれており、ビルドプロセス中に Android.bpxsdc
ビルドルールを使用して XML ファイル形式が検証されます。
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
}
xmllint を使用して、XSD スキーマに対して XML ファイルをローカルで検証することもできます。
xmllint --schema frameworks/base/services/core/xsd/supplemental_security_patches/supplemental_security_patches.xsd --noout supplemental_security_patches.xml
テストとスイートの統合
Security Test Suite(STS)とFirmware Analysis(BTS)は、
supplemental_security_patches.xmlファイルのデータを使用して、XML ファイルに存在する脆弱性のパッチ分析を拡張します。そのため、このファイルを正しく統合すると、デバイスのセキュリティ状態を反映するだけでなく、OEM
は四半期ごとの SPL が正式に宣言されるのを待つのではなく、デバイスの SPL を超えてパッチが適用された脆弱性に対してプロアクティブなパッチ分析を実行できます。