Yeniden Başlatma Sırasında Devam Etme

Bir OTA indirildiğinde ve A / B güncellemesi , sanal A / B veya RecoverySystem sınıfı aracılığıyla kullanılabilen başka bir yöntemle uygulanmak üzere hazırlandığında, Resume-on-Reboot, cihazı yeniden başlattıktan sonra Credential Encrypted (CE) depolamanın kilidini açmaya çalışacaktır. OTA'yı uygulayın. Bu, cihazın boşta kalmasının beklendiği zamanlar gibi kullanıcı için daha uygun olduğunda güncellemeleri uygulayan bir OTA sistemi ile eşleştirilebilir.

Arka fon

Uygulama geliştiricileri için Android, uygulamaların Kimlik Bilgisi Şifreli (CE) depolamanın kilidi kullanıcı tarafından açılmadan önce başlatılmasını sağlayan Direct Boot'u destekler. Daha fazla uygulama geliştiricisi Doğrudan Önyükleme desteğini uyguladıkça, kullanıcı bir önyüklemeden sonra Kilit Ekranı Bilgi Faktörü (LSKF) girilmeden önce daha iyi bir deneyim yaşar.

Resume-on-Reboot, bir OTA tarafından başlatılan yeniden başlatmanın ardından Direct Boot'u henüz desteklemeyenler de dahil olmak üzere tüm uygulamaların CE depolamasının kilidini açmaya izin verir. Bu özellik, kullanıcıların yeniden başlatıldıktan sonra yüklü tüm uygulamalarından bildirim almasını sağlar.

Tehdit modeli

Yeniden Başlatma Sırasında Devam Ettirme uygulaması, bir aygıt saldırganın eline geçtiğinde, aygıt açık olsa bile, aygıt açık olsa bile bu saldırganın kullanıcının CE ile şifrelenmiş verilerini kurtarmasının son derece zor olduğu, CE depolamasının kilidi açıldığı özelliğini korumalıdır. ve kullanıcı bir OTA aldıktan sonra cihazın kilidini açtı; içeriden saldırıya karşı direnç için, saldırganın kriptografik imzalama anahtarlarını yayınlama erişimi kazandığını da varsayıyoruz.

Özellikle, CE depolamasının, aygıta fiziksel olarak sahip olan ve ardından şu yeteneklere ve sınırlamalara sahip bir saldırgan tarafından okunamamasını istiyoruz:

  • Herhangi bir satıcının veya şirketin imza anahtarını rastgele mesajları imzalamak için kullanabilir.
  • Cihazın bir OTA almasına neden olabilir.
  • Aşağıda ayrıntıları verilmedikçe herhangi bir donanımın (Uygulama İşlemcisi, flash vb.) Çalışmasını değiştirebilir, ancak bu tür bir değişiklik en az bir saatlik bir gecikme ve RAM içeriğini yok eden bir güç döngüsü içerir.
  • Kurcalamaya dayanıklı donanımın (örneğin Titan M) çalışmasını değiştiremez.
  • Canlı cihazın RAM'i okunamıyor.
  • Kullanıcının kimlik bilgilerini (PIN, desen, şifre) tahmin edemez veya başka bir şekilde girilmesine neden olamaz.

Uygulayıcı için yönergeler

Temmuz 2020 itibarıyla Yeniden Başlatma Sırasında Devam Ettirme HAL uygulamaları genel olarak iki kategoriye ayrılır:

  1. SoC donanımı yeniden başlatmalarda RAM kalıcılığını destekliyorsa, OEM'ler AOSP'de (Varsayılan RAM Escrow) varsayılan uygulamayı kullanabilir.
  2. Cihaz donanımı veya SoC, güvenli bir donanım bölgesini (kendi RAM ve ROM'una sahip ayrı bir güvenlik yardımcı işlemcisi) destekliyorsa, ek olarak şunları yapmalıdır:
    • Ana CPU'nun yeniden başlatılmasını algılayabilme.
    • Yeniden başlatma sırasında devam eden bir donanım zamanlayıcı kaynağına sahip olun; diğer bir deyişle, mahfaza, yeniden başlatmayı algılayabilmeli ve yeniden başlatmadan önce ayarlanan bir zamanlayıcıyı sona erdirebilmelidir.
    • Çevrimdışı saldırılarla kurtarılamayacak şekilde, emanet edilmiş bir anahtarı enklave RAM / ROM'da depolamayı destekler. Yeniden Başlatma Sırasında Devam Et anahtarını, içerideki kişilerin veya saldırganların kurtarmasını imkansız kılacak şekilde saklamalıdır.

Varsayılan RAM Emaneti

AOSP, RAM kalıcılığını kullanan Yeniden Başlatma Sırasında Devam Etme HAL uygulamasına sahiptir. Bunun çalışması için OEM'ler, SoC'lerinin yeniden başlatmalar sırasında RAM kalıcılığını desteklediğinden emin olmalıdır. Bazı SoC'ler, yeniden başlatma sırasında RAM içeriğini sürdüremez, bu nedenle OEM'lerin bu varsayılan HAL'yi etkinleştirmeden önce SoC ortaklarına danışmaları önerilir. Bunun için aşağıdaki bölümde kanonik referans.

Bir OTA indirildiğinde ve A / B güncellemesi , sanal A / B veya RecoverySystem sınıfı aracılığıyla kullanılabilen başka bir yöntemle uygulanmak üzere hazırlandığında, Resume-on-Reboot, cihazdan sonra Credential Encrypted (CE) depolamanın kilidini açmaya çalışır. OTA güncellemesini uygulamak için yeniden başlatılır. Bu, cihazın boşta kalmasının beklendiği zamanlar gibi kullanıcı için daha uygun olduğunda güncellemeleri uygulayan bir OTA sistemi ile eşleştirilebilir.

Yeniden Başlatma Sırasında Devam Etme kullanarak OTA güncellemesinin akışı

Telefondaki OTA istemci uygulaması, Yeniden Başlatma Sırasında Devam Etmeyi uygulamak için gerekli yöntemleri çağırmak için Manifest.permission.REBOOT ve Manifest.permisson.RECOVERY izinlerine sahip olmalıdır. Bu ön koşul yerine getirildiğinde, bir güncellemenin akışı şu şekildedir:

  1. OTA istemcisi uygulama indirme güncellemesi
  2. OTA istemci uygulaması, RecoverySystem#prepareForUnattendedUpdate çağırır ve bu, kullanıcıdan sonraki kilit açma sırasında kilit ekranında PIN, desen veya şifresinin istenmesini tetikler
  3. Kullanıcı kilitli ekranda cihazın kilidini bir sonraki kez açtığında, cihaz güncellemenin uygulanmasına hazırdır.
  4. OTA istemci uygulaması, RecoverySystem#rebootAndApply çağırır ve bu da hemen yeniden başlatmayı tetikler

Bu akışın sonunda, cihaz yeniden başlatılır ve Yeniden Başlatma Üzerine Devam Etme mekanizması, kimlik bilgileri şifreli (CE) depolamanın kilidini açar. Uygulamalarda bu, normal bir kullanıcı kilidi açma işlemi olarak görünür, böylece ACTION_LOCKED_BOOT_COMPLETED ve ACTION_BOOT_COMPLETED gibi tüm sinyalleri normalde olduğu gibi alırlar.

Ürün yapılandırmalarını değiştirme

Bir ürünün Yeniden Başlatıldığında Devam Et özelliğini desteklediği şeklinde işaretlenmesi için, RebootEscrow HAL'ın bir uygulamasını içermesi ve özellik işaretçisi XML dosyasını içermesi gerekir. Varsayılan uygulama, sıcak yeniden başlatma kullanan cihazlarda iyi çalışır (yani, yeniden başlatma sırasında DRAM'den güç kesilmez).

Emanet özelliği işaretleyicisini yeniden başlatın

Özellik işaretçisi de mevcut olmalıdır:

PRODUCT_COPY_FILES += \
    frameworks/native/data/etc/android.hardware.reboot_escrow.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.reboot_escrow.xml

Varsayılan yeniden başlatma emanet HAL uygulaması

Varsayılan uygulamayı kullanmak için, uygulama için 65536 (0x10000) bayt ayrılmalıdır. Bu baytlar, güvenlik özelliklerinin tutması için geçici olmayan depolamaya yazılmamalıdır.

Linux çekirdeği cihaz ağacı değişiklikleri

Linux çekirdeğinin aygıt ağacında, bir pmem bölgesi için bellek ayırmanız gerekir. Aşağıdaki örnekte 0x50000000 rezerve edilmiştir:

  reserved-memory {
    my_reservation@0x50000000 {
      no-map;
      reg = <0x50000000 0x10000>;
    }
  }

  reboot_escrow@0 {
    compatible = "pmem-region";
    reg = <0x50000000 0x10000>;
  };

Blok dizininde /dev/block/pmem0 gibi bir /dev/block/pmem0 ( pmem1 veya pmem2 ) yeni bir cihazınız olduğunu doğrulayın.

Device.mk değişiklikleri

Önceki adımdaki yeni cihazınızın adının pmem0 olduğu pmem0 , vendor/<oem>/<product>/device.mk aşağıdaki yeni girişler eklenmelidir:

# Resume on Reboot support
PRODUCT_PROPERTY_OVERRIDES += \
    ro.rebootescrow.device=/dev/block/pmem0
PRODUCT_PACKAGES += \
    android.hardware.rebootescrow-service.default

SELinux kuralları

Aygıtın file_contexts yeni girişler eklenmelidir:

/dev/block/pmem0  u:object_r:rebootescrow_device:s0
/vendor/bin/hw/android\.hardware\.rebootescrow-service\.default  u:object_r:hal_rebootescrow_default_exec:s0