Kapı görevlisi

Gatekeeper alt sistemi, cihaz deseni/şifre kimlik doğrulamasını Güvenilir Yürütme Ortamı'nda (TEE) gerçekleştirir. Gatekeeper, donanım tabanlı bir gizli anahtar kullanarak şifreleri kaydeder ve doğrular. Ayrıca Gatekeeper, art arda başarısız doğrulama denemelerini kısıtlar ve belirli bir zaman aşımı ile belirli sayıda art arda başarısız denemeye göre hizmet isteklerini reddetmelidir.

Kullanıcılar şifrelerini doğruladığında Gatekeeper, yalnızca güvenli bileşenler tarafından kullanılabilen ve her yeniden başlatma için geçerli bir HMAC anahtarıyla imzalanmış bir kimlik doğrulama jetonu oluşturur. Bu jeton, donanım tabanlı anahtar deposuna gönderilir. Yani, Gatekeeper kimlik doğrulama jetonu, anahtar deposuna kimlik doğrulamaya bağlı anahtarların (ör. uygulamaların oluşturduğu anahtarlar) uygulamalar tarafından kullanılabileceğini bildirir.

Mimari

Gatekeeper üç ana bileşenden oluşur:

  • gatekeeperd (Gatekeeper daemon): Android'de, IGatekeeper'nin temel tedarikçiye özel bir uygulamasına dayalı olarak IGateKeeperService AIDL arayüzünü uygulayan platformdan bağımsız mantığı içeren bir C++ Binder hizmeti.
  • Gatekeeper donanım soyutlama katmanı (HAL) hizmeti: IGatekeeper AIDL arayüzünün tedarikçiye özel bir uygulamasıdır. Bu HAL hizmeti Android'de çalışır ancak temel Gatekeeper işlevinin güvenli bir ortamda çalışması gerekir. Bu nedenle, genellikle Gatekeeper TA ile iletişim kurar.
  • Gatekeeper Trusted Application (TA): TEE'de çalışan ve gerçek şifre veya desen doğrulamasını gerçekleştiren, tedarikçiye özel bir uygulamadır.

LockSettingsService, Android işletim sistemindeki gatekeeperd daemon'una ulaşan bir istekte (Binder aracılığıyla) bulunur. gatekeeperd arka plan programı daha sonra IGatekeeper HAL hizmetine istekte bulunur ve bu istek de TEE'deki Gatekeeper TA'ya ulaşır:

Kapı görevlisi akışı

Şekil 1. GateKeeper ile kimlik doğrulama için üst düzey veri akışı.

gatekeeperd arka plan programı, Android çerçevesi API'lerinin HAL'ye erişmesini sağlar ve cihaz kimlik doğrulamalarının Keystore'a bildirilmesine katılır. gatekeeperd arka plan programı kendi işleminde çalışır ve sistem sunucusundan ayrıdır.

HAL uygulaması

gatekeeperd arka plan programı, şifre kimlik doğrulaması için temel Gatekeeper TA ile etkileşim kurmak üzere IGatekeeper HAL'ı kullanır. Gatekeeper TA uygulaması, blob'ları imzalayabilmeli (kaydedebilmeli) ve doğrulayabilmelidir. Tüm uygulamaların, her başarılı şifre doğrulamasında oluşturulan kimlik doğrulama jetonunun (HardwareAuthToken) standart biçimine uyması beklenir. HardwareAuthToken içeriği ve anlamı hakkında ayrıntılı bilgi için HardwareAuthToken.aidl tanımına bakın.

IGatekeeper HAL'nin tedarikçi uygulamaları, enroll ve verify işlevlerini uygulamalıdır:

  • enroll yöntemi, şifre blob'unu alır, imzalar ve imzayı tutma yeri olarak döndürür. Döndürülen blob (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 şifreyle oluşturulan imzayı karşılaştırmalı ve kayıtlı şifre tutamağıyla eşleştiğinden emin olmalıdır.

Kaydetme ve doğrulama için kullanılan anahtar hiçbir zaman değişmemeli ve her cihaz başlatıldığında yeniden türetilebilmelidir.

Trusty ve diğer uygulamalar

Trusty işletim sistemi, Google'ın TEE ortamları için açık kaynaklı güvenilir işletim sistemidir ve Gatekeeper'ın onaylanmış bir uygulamasını içerir. Ancak TEE'nin kalıcı donanım destekli bir anahtara ve askıya alma modunda çalışan güvenli, monoton bir saate erişimi olduğu sürece herhangi bir TEE OS, Gatekeeper'ı uygulayabilir.

Trusty, paylaşılan bir gizli anahtarı doğrudan KeyMint (eski adıyla Keymaster) ile Gatekeeper'ın Trusty uygulaması (Trusty Gatekeeper) arasında iletmek için dahili bir IPC sistemi kullanır. Bu paylaşılan gizli bilgiler, şifre doğrulama onayları sağlamak için Keystore'a gönderilen AuthToken'ları imzalamak üzere kullanılır. Trusty Gatekeeper, her kullanım için KeyMint'ten anahtar ister ve değeri kalıcı hale getirmez veya önbelleğe almaz. Uygulamalar, güvenliği tehlikeye atmayacak şekilde bu sırrı paylaşabilir.

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

Android, tamamlanması için yalnızca cihaza özgü rutinlerin eklenmesini gerektiren genel bir C++ Gatekeeper uygulaması sağlar. Trusty uygulaması bu temele dayanır. TEE'niz için cihaza özel kod içeren bir TEE Gatekeeper uygulamak istiyorsanız system/gatekeeper/include/gatekeeper/gatekeeper.h içindeki işlevlere ve yorumlara bakın. Uygun bir uygulamanın temel sorumlulukları şunlardır:

  • IGatekeeper HAL'ye uyulması.
  • Döndürülen kimlik doğrulama jetonları, HardwareAuthToken spesifikasyonuna (Kimlik Doğrulama bölümünde açıklanmıştır) uygun şekilde biçimlendirilmelidir.
  • TEE Gatekeeper, KeyMint ile bir HMAC anahtarı paylaşabilmelidir. Bu işlem, anahtarın TEE IPC üzerinden isteğe bağlı olarak istenmesi veya değerin her zaman geçerli bir önbelleğinin tutulmasıyla yapılabilir.

Kullanıcı güvenli kimlikleri (SID'ler)

Kullanıcı SID'si, bir kullanıcının TEE gösterimidir (Android kullanıcı kimliğiyle güçlü bir bağlantısı yoktur). SID, kullanıcılar yeni bir şifre kaydettirirken önceki şifreyi sağlamadıklarında kriptografik olarak sözde rastgele bir sayı üreteci (PRNG) ile oluşturulur. Bu işlem, güvenilmeyen yeniden kaydolma olarak bilinir ve normalde yalnızca kullanıcı ilk kez şifre veya desen ayarladığında gerçekleşir.

Kullanıcı, geçerli ve önceki bir şifre sağladığında (ör. şifre değiştirirken) güvenilir yeniden kaydolma işlemi gerçekleşir. Bu durumda, kullanıcı SID'si yeni şifre tutma yerine taşınır ve kendisine bağlı anahtarlar korunur.

Şifre kaydedildiğinde, kullanıcı SID'si, şifre tutamacındaki şifreyle birlikte HMAC kimlik doğrulamasına dahil edilir.

Kullanıcı SID'leri, HardwareAuthToken işlevi tarafından döndürülen verify() içinde yer alır ve kimlik doğrulama ile sınırlı tüm Keystore anahtarlarıyla ilişkilendirilir (HardwareAuthToken biçimi ve Keystore hakkında ayrıntılı bilgi için Kimlik Doğrulama bölümüne bakın).

enroll() işlevine yapılan güvenilmeyen bir çağrı, kullanıcı SID'sini değiştirdiğinden bu çağrının, söz konusu şifreye bağlı anahtarları işe yaramaz hale getirdiğini unutmayın. Saldırganlar Android OS'i kontrol ederse cihazın şifresini değiştirebilir ancak bu işlem sırasında root korumalı hassas anahtarları yok ederler.

İstek kısıtlama

Gatekeeper, bir kullanıcı kimlik bilgisiyle ilgili kaba kuvvet saldırısı denemelerini güvenli bir şekilde sınırlayabilmelidir. GatekeeperVerifyResponse.aidl'de gösterildiği gibi, HAL, milisaniye cinsinden bir zaman aşımı döndürmeyi sağlar. Zaman aşımı, istemciye zaman aşımı süresi dolana kadar Gatekeeper'ı tekrar çağırmaması gerektiğini bildirir. Bekleyen bir zaman aşımı varsa Gatekeeper istekleri işleme almamalıdır.

Gatekeeper, kullanıcı şifresini doğrulamadan önce bir hata sayacı yazmalıdır. Şifre doğrulama başarılı olursa hata sayacı temizlenmelidir. Bu, verify çağrısı yapıldıktan sonra yerleşik MMC'yi (eMMC) devre dışı bırakarak kısıtlamayı engelleyen saldırıları önler. enroll işlevi, kullanıcı şifresini (sağlanmışsa) de doğrular ve aynı şekilde sınırlanmalıdır.

Cihaz tarafından destekleniyorsa hata sayacının güvenli depolama alanına yazılması önemle tavsiye edilir. Cihaz, dosya tabanlı şifrelemeyi desteklemiyorsa veya güvenli depolama alanı çok yavaşsa uygulamalar doğrudan Replay Protected Memory Block'u (RPMB) kullanabilir.