You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
5.6 KiB
108 lines
5.6 KiB
7 months ago
|
## 9.10\. Device Integrity
|
||
|
|
||
|
The following requirements ensure there is transparency to the status of the
|
||
|
device integrity. Device implementations:
|
||
|
|
||
|
* [C-0-1] MUST correctly report through the System API method
|
||
|
`PersistentDataBlockManager.getFlashLockState()` whether their bootloader
|
||
|
state permits flashing of the system image. The `FLASH_LOCK_UNKNOWN` state is
|
||
|
reserved for device implementations upgrading from an earlier version of Android
|
||
|
where this new system API method did not exist.
|
||
|
|
||
|
* [C-0-2] MUST support Verified Boot for device integrity.
|
||
|
|
||
|
If device implementations are already launched without supporting Verified Boot
|
||
|
on an earlier version of Android and can not add support for this
|
||
|
feature with a system software update, they MAY be exempted from the
|
||
|
requirement.
|
||
|
|
||
|
Verified Boot is a feature that guarantees the integrity of the device
|
||
|
software. If device implementations support the feature, they:
|
||
|
|
||
|
* [C-1-1] MUST declare the platform feature flag
|
||
|
`android.software.verified_boot`.
|
||
|
* [C-1-2] MUST perform verification on every boot sequence.
|
||
|
* [C-1-3] MUST start verification from an immutable hardware key that is the
|
||
|
root of trust and go all the way up to the system partition.
|
||
|
* [C-1-4] MUST implement each stage of verification to check the integrity
|
||
|
and authenticity of all the bytes in the next stage before executing the code in
|
||
|
the next stage.
|
||
|
* [C-1-5] MUST use verification algorithms as strong as current
|
||
|
recommendations from NIST for hashing algorithms (SHA-256) and public key
|
||
|
sizes (RSA-2048).
|
||
|
* [C-1-6] MUST NOT allow boot to complete when system verification fails,
|
||
|
unless the user consents to attempt booting anyway, in which case the data from
|
||
|
any non-verified storage blocks MUST not be used.
|
||
|
* [C-1-7] MUST NOT allow verified partitions on the device to be modified
|
||
|
unless the user has explicitly unlocked the bootloader.
|
||
|
* [C-SR] If there are multiple discrete chips in the device (e.g. radio,
|
||
|
specialized image processor), the boot process of each of those chips is
|
||
|
STRONGLY RECOMMENDED to verify every stage upon booting.
|
||
|
* [C-1-8] MUST use tamper-evident storage: for storing whether the
|
||
|
bootloader is unlocked. Tamper-evident storage means that the bootloader can
|
||
|
detect if the storage has been tampered with from inside Android.
|
||
|
* [C-1-9] MUST prompt the user, while using the device, and
|
||
|
require physical confirmation before allowing a transition from bootloader
|
||
|
locked mode to bootloader unlocked mode.
|
||
|
* [C-1-10] MUST implement rollback protection for partitions used by Android
|
||
|
(e.g. boot, system partitions) and use tamper-evident storage for storing the
|
||
|
metadata used for determining the minimum allowable OS version.
|
||
|
* [C-SR] Are STRONGLY RECOMMENDED to verify all privileged app APK files with
|
||
|
a chain of trust rooted in partitions protected by Verified Boot.
|
||
|
* [C-SR] Are STRONGLY RECOMMENDED to verify any executable artifacts loaded by
|
||
|
a privileged app from outside its APK file (such as dynamically loaded code or
|
||
|
compiled code) before executing them or STRONGLY RECOMMENDED not to execute them
|
||
|
at all.
|
||
|
* SHOULD implement rollback protection for any component with persistent
|
||
|
firmware (e.g. modem, camera) and SHOULD use tamper-evident storage for
|
||
|
storing the metadata used for determining the minimum allowable version.
|
||
|
|
||
|
If device implementations are already launched without supporting C-1-8 through
|
||
|
C-1-10 on an earlier version of Android and can not add support for
|
||
|
these requirements with a system software update, they MAY be exempted from the
|
||
|
requirements.
|
||
|
|
||
|
The upstream Android Open Source Project provides a preferred implementation of
|
||
|
this feature in the [`external/avb/`](
|
||
|
http://android.googlesource.com/platform/external/avb/)
|
||
|
repository, which can be integrated into the bootloader used for loading
|
||
|
Android.
|
||
|
|
||
|
Device implementations:
|
||
|
|
||
|
* [C-0-3] MUST support cryptographically verifying file content against a
|
||
|
trusted key without reading the whole file.
|
||
|
* [C-0-4] MUST NOT allow the read requests on a protected file to succeed
|
||
|
when the read content do not verify against a trusted key.
|
||
|
* [C-0-5] MUST enable the above-described cryptographic file verification
|
||
|
protection for all files for the package that is installed
|
||
|
with trusted signature files as described [here](
|
||
|
https://developer.android.com/preview/security/features/apk-verity).
|
||
|
|
||
|
If device implementations are already launched without the ability to verify
|
||
|
file content against a trusted key on an earlier Android version and can not add
|
||
|
support for this feature with a system software update, they MAY be exempted
|
||
|
from the requirement. The upstream Android Open Source project provides a
|
||
|
preferred implementation of this feature based on the Linux kernel [fs-verity](
|
||
|
https://www.kernel.org/doc/html/latest/filesystems/fsverity.html) feature.
|
||
|
|
||
|
Device implementations:
|
||
|
|
||
|
* [C-R] Are RECOMMENDED to support the [Android Protected Confirmation API](
|
||
|
https://developer.android.com/preview/features/security.html#user-confirmation).
|
||
|
|
||
|
If device implementations support the Android Protected Confirmation
|
||
|
API they:
|
||
|
|
||
|
* [C-3-1] MUST report `true` for the [`ConfirmationPrompt.isSupported()`](
|
||
|
https://developer.android.com/reference/android/security/ConfirmationPrompt.html#isSupported%28android.content.Context%29)
|
||
|
API.
|
||
|
|
||
|
* [C-3-2] MUST ensure that code running in the Android OS including its
|
||
|
kernel, malicious or otherwise, cannot generate a positive response without
|
||
|
user interaction.
|
||
|
|
||
|
* [C-3-3] MUST ensure that the user has been able to review and approve the
|
||
|
prompted message even in the event that the Android OS, including its kernel,
|
||
|
is compromised.
|