fs-verity — это функция ядра Linux, которая позволяет системе постоянно проверять файлы APK с помощью доверенных цифровых сертификатов. Когда платформа предоставляет этот механизм проверки при доступе с доверенным сертификатом из поддерживаемого магазина, такого как Play, магазин может устанавливать файлы APK с подписью fs-verity для постоянной проверки. Файлы, защищенные с помощью fs-verity, неизменяемы, и запросы на чтение выполняются только в том случае, если содержимое подтверждается.
Как только ядро поддерживает fs-verity, партнеры могут поместить новый тип сертификата из своих доверенных хранилищ в раздел /product/etc/security/fsverity
, сертификаты загружаются в связку ключей ядра во время загрузки. На устройстве, поддерживающем эту функцию, доверенный магазин может установить APK с соответствующей подписью fs-verity.
Реализация
Устройства, запускаемые с Android R
fs-verity — это функция ядра Linux , вышедшая из версии 5.4 и перенесенная в обычное ядро Android 4.14 и выше. Новым устройствам, использующим обычное ядро 4.14 или выше и использующим ext4 или f2fs для разделов пользовательских данных, не нужно предпринимать никаких действий, поскольку они уже поддерживают fs-verity через ядро Linux .
Устройства, обновляющиеся до Android R
Патчи fs-verity должны быть перенесены в ядро устройства. Для ext4 добавьте fsverity
к флагу fs_mgr
в fstab
. Затем эту функцию можно включить со следующей настройкой:
ro.apk_verity.mode=2
API
Был введен новый общедоступный API для запроса состояния поддержки устройства и определения того, является ли сертификат доверенным на устройстве.
public final class FileIntegrityManager { public boolean isApkVeritySupported(); @RequiresPermission(anyOf={ android.Manifest.permission.INSTALL_PACKAGES, android.Manifest.permission.REQUEST_INSTALL_PACKAGES}) public boolean isAppSourceCertificateTrusted(@NonNull java.security.cert.X509Certificate) throws java.security.cert.CertificateEncodingException; }
Проверка
Запустите следующие тесты VTS, CTS и GTS, чтобы проверить реализацию.
- [ВТС] ApkVerityTest
- [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest
- [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
- [GTS] GtsPlayFsiTestCases и GtsPlayFsiHostTestCases