Integracja z fs-verity

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

fs-verity to funkcja jądra Linux, która pozwala systemowi na ciągłą weryfikację plików APK z zaufanymi certyfikatami cyfrowymi. Gdy platforma zapewnia ten mechanizm weryfikacji na żądanie, z zaufanym certyfikatem z obsługiwanego sklepu, takiego jak Play, sklep może instalować pliki APK z podpisem fs-verity w celu ciągłej weryfikacji. Pliki chronione przez fs-verity są niezmienne, a żądania odczytu kończą się powodzeniem tylko wtedy, gdy zawartość zostanie zweryfikowana.

Gdy fs-verity jest obsługiwane w jądrze, partnerzy mogą umieścić nowy typ certyfikatu ze swoich zaufanych sklepów na partycji /product/etc/security/fsverity , certyfikaty są ładowane do pęku kluczy jądra podczas rozruchu. Na urządzeniu obsługującym tę funkcję zaufany sklep może zainstalować pakiet APK z odpowiednią sygnaturą fs-verity.

Realizacja

Urządzenia uruchamiające się z Androidem R

fs-verity to funkcja jądra Linuksa, która pojawiła się w wersji 5.4 i została przeniesiona do wspólnego jądra Androida 4.14 i nowszych. Nowe urządzenia używające zwykłego jądra 4.14 lub wyższego i używające ext4 lub f2fs dla partycji danych użytkownika nie muszą podejmować żadnych działań, ponieważ obsługują już fs-verity przez jądro Linux .

Aktualizacja urządzeń do Androida R

Łatki fs-verity muszą być przeniesione do jądra urządzenia. Dla ext4 dodaj fsverity do flagi fs_mgr w fstab . Następnie funkcję można włączyć z następującym ustawieniem:

ro.apk_verity.mode=2

API

Wprowadzono nowy publiczny interfejs API do sprawdzania stanu obsługi urządzenia i określania, czy certyfikat jest zaufany na urządzeniu.

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

Walidacja

Uruchom następujące testy VTS, CTS i GTS, aby sprawdzić poprawność implementacji.

  • [VTS] ApkVerityTest
  • [CTS] CtsAppSecurityHostTestCases:android.appsecurity.cts.ApkVerityInstallTest
  • [CTS] CtsSecurityHostTestCases#android.security.cts.KernelConfigTest
  • [GTS] Przypadki GtsPlayFsiTest i Przypadki GtsPlayFsiHostTest