Bekçi

Gatekeeper alt sistemi, bir Trusted Execution Environment (TEE) içinde cihaz kalıbı / parola kimlik doğrulamasını gerçekleştirir. Gatekeeper, şifreleri donanım destekli bir gizli anahtarla bir HMAC aracılığıyla kaydeder ve doğrular. Ayrıca, Gatekeeper ardışık başarısız doğrulama girişimlerini azaltır ve belirli bir zaman aşımına ve belirli sayıda art arda başarısız girişime dayalı olarak isteklere hizmet vermeyi reddetmelidir.

Kullanıcılar parolalarını doğruladığında, Gatekeeper donanım destekli Anahtar Deposuna göndermek üzere bir kimlik doğrulama onayını imzalamak için TEE'den türetilmiş paylaşılan sırrı kullanır. Yani bir Gatekeeper onayı, Anahtar Deposuna kimlik doğrulamaya bağlı anahtarların (örneğin, uygulamaların oluşturduğu anahtarlar) uygulamalar tarafından kullanılmak üzere serbest bırakılabileceğini bildirir.

Mimari

Gatekeeper üç ana bileşenden oluşur:

  • gatekeeperd (Gatekeeper arka plan programı). Platformdan bağımsız mantığı içeren ve GateKeeperService Java arayüzüne karşılık gelen bir C ++ bağlayıcı hizmeti.
  • Gatekeeper Donanım Soyutlama Katmanı (HAL) . hardware/libhardware/include/hardware/gatekeeper.h ve uygulama modülündeki HAL arayüzü.
  • Bekçi (TEE) . gatekeeperd TEE muadili. Gatekeeper'ın TEE tabanlı bir uygulaması.

Gatekeeper, Gatekeeper hardware/libhardware/include/hardware/gatekeeper.h (özellikle hardware/libhardware/include/hardware/gatekeeper.h işlevler) ve hardware/libhardware/include/hardware/gatekeeper.h özgü Gatekeeper bileşeninin (kısmen system/gatekeeper/include/gatekeeper/gatekeeper.h başlık dosyasına dayalı olarak uygulanmasını gerektirir anahtarlar ve bilgisayar imzaları oluşturmak / bunlara erişmek için saf sanal işlevleri içerir)

LockSettingsService , Android işletim sisteminde gatekeeperd arka plan programına ulaşan bir istekte bulunur (Binder aracılığıyla). gatekeeperd daemon daha sonra TEE'deki karşılığına (Gatekeeper) ulaşan bir talepte bulunur:

Gatekeeper akışı
Şekil 1. GateKeeper tarafından kimlik doğrulaması için üst düzey veri akışı

gatekeeperd daemon, Android çerçeve API'lerine HAL'ye erişim sağlar ve cihaz kimlik doğrulamalarının Keystore'a raporlanmasına katılır. gatekeeperd daemon kendi sürecinde çalışır ve sistem sunucusundan ayrıdır.

HAL uygulaması

gatekeeperd arka plan programı, parola kimlik doğrulaması için gatekeeperd arka plan programının TEE karşılığı ile etkileşimde bulunmak için HAL'ı kullanır. HAL uygulaması, blobları imzalayabilmeli (kaydolabilmeli) ve doğrulayabilmelidir. Tüm uygulamaların, her başarılı parola doğrulamasında oluşturulan kimlik doğrulama simgesi (AuthToken) için standart biçime uyması beklenir. AuthToken'in içeriği ve anlambilimiyle ilgili ayrıntılar için bkz. AuthToken biçimi .

hardware/libhardware/include/hardware/gatekeeper.h başlık dosyasının uygulamaları enroll ve verify işlevlerini uygulamalıdır:

  • enroll fonksiyonu işaretler bunu bir şifre blob alır ve bir sap olarak imza döndürür. Döndürülen blob (bir enroll çağrısından) system/gatekeeper/include/gatekeeper/password_handle.h içinde gösterilen yapıya sahip olmalıdır.
  • verify işlevi, sağlanan parola tarafından üretilen imzayı karşılaştırmalı ve kayıtlı parola tanıtıcısı ile eşleştiğinden emin olmalıdır.

Kaydolmak ve doğrulamak için kullanılan anahtar hiçbir zaman değişmemeli ve her cihaz önyüklemesinde yeniden türetilebilir olmalıdır.

Güvenilir ve diğer uygulamalar

Trusty işletim sistemi, Google'ın TEE ortamları için güvenilir açık kaynak işletim sistemidir ve onaylanmış bir GateKeeper uygulaması içerir. Ancak, TEE'nin donanım destekli bir anahtara ve askıya alma sırasında çalışan güvenli, monoton bir saate erişimi olduğu sürece Gatekeeper'ı uygulamak için herhangi bir TEE işletim sistemini kullanabilirsiniz.

Trusty, paylaşılan bir sırrı doğrudan Keymaster ile Gatekeeper'ın ( Trusty Gatekeeper ) Trusty uygulaması arasında iletmek için dahili bir IPC sistemi kullanır. Bu paylaşılan sır, parola doğrulamasının onaylarını sağlamak için Anahtar Deposuna gönderilen AuthToken'ları imzalamak için kullanılır. Güvenilir Gatekeeper, her kullanım için Keymaster'dan anahtarı ister ve değeri sürdürmez veya önbelleğe almaz. Uygulamalar, güvenlikten ödün vermeden bu sırrı paylaşmakta özgürdür.

Şifreleri kaydetmek ve doğrulamak için kullanılan HMAC anahtarı, yalnızca GateKeeper'da türetilir ve saklanır.

Android, yalnızca cihaza özgü yordamların tamamlanmasını gerektiren genel bir GateKeeper uygulaması sağlar. TEE'niz için cihaza özgü kod içeren bir TEE Gatekeeper uygulamak için system/gatekeeper/include/gatekeeper/gatekeeper.h içindeki işlevlere ve yorumlara başvurun. TEE GateKeeper için, uyumlu bir uygulamanın temel sorumlulukları şunları içerir:

  • Gatekeeper HAL'a bağlılık.
  • İade edilen AuthToken'lar, AuthToken spesifikasyonuna göre biçimlendirilmelidir ( Kimlik Doğrulama'da açıklanmıştır).
  • TEE Gatekeeper, ya istek üzerine bir TEE IPC aracılığıyla anahtarı talep ederek ya da değerin her zaman geçerli bir önbelleğini koruyarak bir HMAC anahtarını Keymaster ile paylaşabilmelidir.

Kullanıcı Güvenli Kimlikleri (SID'ler)

Bir Kullanıcı SID'si, bir kullanıcının TEE temsilidir (bir Android kullanıcı kimliğiyle güçlü bir bağlantısı yoktur). SID, bir kullanıcı öncekini sağlamadan yeni bir şifre kaydettiğinde, bir kriptografik sözde rasgele sayı üreteci (PRNG) ile oluşturulur. Bu, güvenilmeyen yeniden kayıt olarak bilinir ve normal koşullarda Android çerçevesi tarafından buna izin verilmez. Güvenilir bir yeniden kayıt, bir kullanıcı geçerli, önceki bir şifre verdiğinde gerçekleşir; bu durumda, Kullanıcı SID'si, kendisine bağlı olan anahtarları koruyarak yeni parola tutamacına geçirilir.

Kullanıcı SID'si, parola kaydedildiğinde parola tutamacındaki parolayla birlikte HMAC'dir.

Kullanıcı SID'leri, verify işlevi tarafından döndürülen AuthToken'a yazılır ve kimlik doğrulamaya bağlı tüm Anahtar Deposu anahtarlarıyla ilişkilendirilir (AuthToken biçimi ve Anahtar Deposu hakkındaki ayrıntılar için, bkz. Kimlik Doğrulama ). Güvenilmeyen bir çağrı olarak enroll fonksiyonu Kullanıcı SID'yi değişecek, çağrı yararsız olduğunu şifre bağlı anahtarları verecek. Saldırganlar, Android işletim sistemini kontrol ediyorlarsa cihazın şifresini değiştirebilirler, ancak işlem sırasında kök korumalı, hassas anahtarları yok ederler.

Kısıtlama isteğinde bulunun

GateKeeper, bir kullanıcı kimlik bilgisi üzerindeki kaba kuvvet girişimlerini güvenli bir şekilde engelleyebilmelidir. hardware/libhardware/include/hardware/gatekeeper.h gibi, HAL milisaniye cinsinden bir zaman aşımının hardware/libhardware/include/hardware/gatekeeper.h sağlar. Zaman aşımı, istemciye, zaman aşımı geçene kadar GateKeeper'ı tekrar aramaması gerektiğini bildirir; Bekleyen bir zaman aşımı varsa GateKeeper isteklerine hizmet vermemelidir.

GateKeeper, bir kullanıcı parolasını doğrulamadan önce bir hata sayacı yazmalıdır. Parola doğrulaması başarılı olursa, hata sayacı silinmelidir. Bu, bir verify çağrısı yaptıktan sonra katıştırılmış MMC'yi (eMMC) devre dışı bırakarak kısıtlamayı önleyen saldırıları önler. enroll fonksiyonu da (eğer varsa) ve aynı şekilde kısılmalıdır kullanıcı şifresini doğrular.

Cihaz tarafından destekleniyorsa, depolama güvenliğini sağlamak için arıza sayacının yazılması önemle tavsiye edilir. Aygıt dosya tabanlı şifrelemeyi desteklemiyorsa veya güvenli depolama çok yavaşsa, uygulamalar Yeniden Oynatma Korumalı Bellek Bloğunu (RPMB) doğrudan kullanabilir.