kapı bekçisi

Gatekeeper alt sistemi, Güvenilir Yürütme Ortamında (TEE) cihaz modeli/şifre kimlik doğrulamasını gerçekleştirir. Gatekeeper, donanım destekli gizli anahtara sahip bir HMAC aracılığıyla parolaları kaydeder ve doğrular. Ek olarak, Gatekeeper ardışık başarısız doğrulama girişimlerini kısıtlar ve belirli bir zaman aşımı ve belirli sayıda ardışık başarısız denemeye dayalı olarak hizmet isteklerini reddetmelidir.

Kullanıcılar şifrelerini doğruladığında Gatekeeper, donanım destekli Anahtar Deposuna gönderilecek bir kimlik doğrulama onayını imzalamak için TEE'den türetilmiş paylaşılan sırrı kullanır. Yani bir Gatekeeper onayı, 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 Keystore'a bildirir.

Mimari

Gatekeeper üç ana bileşenden oluşur:

  • gatekeeperd (Gatekeeper arka plan programı). Platformdan bağımsız mantık 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 dosyasındaki HAL arayüzü ve uygulama modülü.
  • Kapı Bekçisi (TEE) . gatekeeperd TEE karşılığı. Gatekeeper'ın TEE tabanlı uygulaması.

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

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

Ağ geçidi denetleyicisi akışı
Şekil 1. GateKeeper tarafından kimlik doğrulama için yüksek düzeyli veri akışı

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

HAL uygulaması

gatekeeperd denetleyicisi arka plan programı, şifre kimlik doğrulaması için gatekeeperd denetleyicisi arka plan programının TEE karşılığı ile etkileşimde bulunmak için HAL'yi kullanır. HAL uygulamasının blobları imzalayabilmesi (kaydedebilmesi) ve doğrulayabilmesi gerekir. Tüm uygulamaların, her başarılı parola doğrulamasında oluşturulan kimlik doğrulama belirtecinin (AuthToken) standart biçimine uyması beklenir. AuthToken'in içeriği ve anlamı hakkında ayrıntılar için bkz. AuthToken formatı .

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

  • enroll işlevi bir parola bloğu alır, imzalar ve imzayı tanıtıcı olarak döndürür. Döndürülen blob ( enroll çağrısından) system/gatekeeper/include/gatekeeper/password_handle.h dosyasında gösterilen yapıya sahip olmalıdır.
  • verify işlevi, sağlanan parola tarafından oluşturulan imzayı karşılaştırmalı ve kayıtlı parola tanıtıcısıyla 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 aygıt önyüklemesinde yeniden türetilebilmelidir.

Güvenilir ve diğer uygulamalar

Trusty işletim sistemi, Google'ın TEE ortamları için açık kaynak güvenilir işletim sistemidir ve onaylı bir GateKeeper uygulamasını 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, Keymaster ile Gatekeeper'ın Trusty uygulaması ( Trusty Gatekeeper ) arasında paylaşılan bir sırrı doğrudan iletmek için dahili bir IPC sistemi kullanır. Bu paylaşılan sır, şifre doğrulama onaylarını sağlamak üzere Anahtar Deposu'na 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 kalıcılaştırmaz veya önbelleğe almaz. Uygulamalar bu sırrı güvenlikten ödün vermeyecek şekilde 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, GateKeeper'ın tamamlanması için yalnızca cihaza özgü rutinlerin eklenmesini gerektiren genel bir C++ uygulaması sağlar. TEE'niz için cihaza özel kod içeren bir TEE Ağ Geçidi Denetleyicisi uygulamak için system/gatekeeper/include/gatekeeper/gatekeeper.h dosyasındaki işlevlere ve açıklamalara bakın. TEE GateKeeper için uyumlu bir uygulamanın temel sorumlulukları şunları içerir:

  • Bekçi HAL'a bağlılık.
  • Döndürülen AuthToken'lar, AuthToken spesifikasyonuna ( Authentication bölümünde açıklanmıştır) göre biçimlendirilmelidir.
  • TEE Ağ Geçidi Sorumlusu, anahtarı talep üzerine bir TEE IPC aracılığıyla isteyerek veya değerin geçerli bir önbelleğini her zaman muhafaza ederek bir HMAC anahtarını Keymaster ile paylaşabilmelidir.

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

Kullanıcı SID'si, bir kullanıcının TEE temsilidir (Android kullanıcı kimliğiyle güçlü bir bağlantısı yoktur). SID, bir kullanıcı önceki şifreyi girmeden yeni bir şifre kaydettirdiğinde kriptografik sözde rastgele 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 yeniden kayıt, kullanıcı geçerli, önceki bir parolayı sağladığında gerçekleşir; bu durumda Kullanıcı SID'si, kendisine bağlı anahtarlar korunarak yeni parola tanıtıcısına geçirilir.

Kullanıcı SID'si, parola kaydedildiğinde parola tanıtıcısındaki parolayla birlikte HMAC'lenir.

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 formatı ve Anahtar Deposu hakkında ayrıntılar için, bkz. Kimlik Doğrulama ). enroll işlevine yapılan güvenilmeyen bir çağrı Kullanıcı SID'sini değiştireceğinden, çağrı bu parolaya bağlı anahtarları işe yaramaz hale getirecektir. Saldırganlar, Android işletim sistemini kontrol ediyorlarsa cihazın şifresini değiştirebilirler ancak bu süreçte kök korumalı, hassas anahtarları yok edeceklerdir.

Azaltma isteğinde bulunun

GateKeeper, kullanıcı kimlik bilgilerine yönelik kaba kuvvet girişimlerini güvenli bir şekilde azaltabilmelidir. hardware/libhardware/include/hardware/gatekeeper.h dosyasında gösterildiği gibi HAL, milisaniye cinsinden zaman aşımı döndürmeyi sağlar. Zaman aşımı, istemciye zaman aşımı geçene kadar GateKeeper'ı tekrar aramaması konusunda bilgi verir; Bekleyen bir zaman aşımı varsa GateKeeper isteklere hizmet vermemelidir.

GateKeeper, kullanıcı şifresini doğrulamadan önce bir arıza sayacı yazmalıdır. Şifre doğrulaması başarılı olursa hata sayacının temizlenmesi gerekir. Bu, bir verify çağrısı yaptıktan sonra yerleşik MMC'yi (eMMC) devre dışı bırakarak kısıtlamayı önleyen saldırıları önler. enroll işlevi aynı zamanda kullanıcı parolasını da (varsa) doğrular ve aynı şekilde kısıtlanması gerekir.

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