Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Özet
- MorLock davranışı, sürüm 2
Son güncelleştirme
- Ağustos 2020
Şunlar için geçerlidir:
Windows 10
Windows 10'un Credential Guard özelliğini desteklemek isteyen OEM'ler ve BIOS satıcıları.
Resmi belirtimler
Okuma önerileri
Blog gönderisi: BitLocker'ı Soğuk Saldırılardan (ve diğer tehditlerden) koruma
Teknik İnceleme: EDKII'de UEFI TPM2 Desteği ile BIOS'un Ötesinde Bir Tur
Credential Guard ile etki alanından türetilmiş kimlik bilgilerini koruma
Genel Bakış
Bu konu başlığında UEFI değişkeninin MemoryOverwriteRequestControlLock davranışı ve kullanımı açıklanmaktadır, düzeltme 2.
Gelişmiş bellek saldırılarını önlemek için, mevcut sistem BIOS güvenlik azaltma MemoryOverwriteRequestControl yeni tehditlere karşı savunmak üzere kilitlemeyi destekleyecek şekilde geliştirilmiştir. Tehdit modeli, konak işletim sistemi çekirdeğini saldırgan olarak içerecek şekilde genişletilir, bu nedenle çekirdek ayrıcalık düzeyinde yürütülen ACPI ve UEFI Çalışma Zamanı Hizmetlerine güvenilmez. Güvenli Önyükleme uygulamalarına benzer şekilde, MorLock, konak işletim sistemi çekirdeği tarafından değiştirilemeyecek ayrıcalıklı bir ürün yazılımı yürütme bağlamında (örneğin Sistem Yönetim Modu, TrustZone, BMC gibi) uygulanmalıdır. Arabirim, "Değişken Hizmetler" adlı UEFI Belirtimi sürüm 2.5, Bölüm 7.2'de açıklanan UEFI değişken hizmetlerini temel alır.
MorLock olarak adlandırılan bu azaltma, yalnızca Güvenilen Platform Modüllerine sahip sistemlerle sınırlı olmak üzere tüm yeni sistemlerde uygulanmalıdır. Düzeltme 2, büyük bellek sistemlerinde önyükleme performansı sorunlarını azaltmak için, özellikle, yeni bir "kilidini açma" özelliği ekler.
MOR bit durumunu ayarlamak için ACPI _DSM denetim yöntemiyle ilgili olarak ( PC İstemci İş Grubu Platformu Sıfırlama Saldırısı Azaltma Belirtimi, Sürüm 1.10 (PDF indirme)'nin 6. Bölümünde açıklandığı gibi), bu _DSM yöntemini modern BIOS uygulamalarından kaldırmanızı öneririz.
Ancak, bir BIOS bu _DSM yöntemini uygularsa, MorLock durumuna saygı duyması gerekir. MorLock bir anahtarla veya anahtar olmadan kilitliyse, bu _DSM yöntemi MOR'u değiştirememeli ve "Genel Hata"ya karşılık gelen 1 değerini döndürmelidir. MorLock düzeltme 2'nin kilidini açmak için ACPI mekanizması tanımlanmamıştır.
Windows'un Windows 7'den bu yana bu _DSM yöntemini doğrudan çağırmadığını ve kullanım dışı olduğunu kabul ettiğini unutmayın. Bazı BIOS, Windows ACPI _PTS'yi MOR Otomatik Tanıma ile Temiz Kapatma uygulaması olarak çağırdığında, bu _DSM yöntemini dolaylı olarak çağırır ( PC İstemci İş Grubu Platformu Sıfırlama Saldırısı Azaltma Belirtimi, Sürüm 1.10 (PDF indirme)'nin Bölüm 2.3'te açıklandığı gibi).
BU ACPI _PTS MOR Otomatik Algılama uygulaması güvenlik açısından yetersizdir ve KULLANıLMAMALIDIR.
Bellek Üzerine Yazma İsteği Kontrol Kilidi
Geliştirilmiş azaltmayı içeren BIOS, erken önyükleme sırasında bu UEFI değişkenini oluşturur:
VendorGuid:{BB983CCF-151D-40E1-A07B-4A17BE168292}
Ad:MemoryOverwriteRequestControlLock
Öznitelik: NV+BS+RT
Veri parametresinde GetVariable değeri: 0x0 (kilidi açık); 0x1 (anahtar olmadan kilitlenir); 0x2 (anahtarla kilitli)
Data parametresinde SetVariable değeri: 0x0 (kilidi açık); 0x1 (kilitli)
SetVariable ile kilitleme
Her önyüklemede, Önyükleme Cihazı Seçimi (BDS) aşamasından (DRIVER###, SYSPREP#, BOOT##, *RECOVERY*, ...) önce BIOS, MemoryOverwriteRequestControlLock'u 0x00 (kilitsiz olduğunu gösterir) olacak şekilde tek baytlık bir değere başlatır. (veMemoryOverwriteRequestControl) için MemoryOverwriteRequestControlLock , BIOS değişkenin silinmesini engeller ve öznitelikler NV+BS+RT'ye sabitlenmelidir.
için MemoryOverwriteRequestControlLockSetVariable ilk kez Veri'de geçerli bir sıfır olmayan değer geçirilerek çağrıldığında, hem hem MemoryOverwriteRequestControl de MemoryOverwriteRequestControlLock için erişim modu salt okunur olarak değiştirilir ve kilitlendiğini gösterir.
Düzeltme 1 uygulamaları, MemoryOverwriteRequestControlLock için yalnızca 0x00 veya 0x01 olan tek bir baytı kabul eder.
Düzeltme 2 ayrıca paylaşılan gizli dizi anahtarını temsil eden 8 baytlık bir değeri kabul eder. SetVariable içinde başka bir değer belirtilirse çağrı durum EFI_INVALID_PARAMETER başarısız olur. Bu anahtarı oluşturmak için Güvenilir Platform Modülü veya donanım rastgele sayı oluşturucu gibi yüksek kaliteli bir entropi kaynağı kullanın.
Anahtar ayarlandıktan sonra, hem arayan hem de üretici yazılımı bu anahtarın kopyalarını IA32/X64 üzerindeki SMRAM veya korumalı depolamaya sahip bir hizmet işlemcisi gibi gizlilik korumalı bir konuma kaydetmelidir.
Sistem durumunu alma
Düzeltme 2'de, MemoryOverwriteRequestControlLock ve MemoryOverwriteRequestControl değişkenleri kilitlendiğinde, bu değişkenler için SetVariable çağrıları öncelikle sabit bir zaman algoritması kullanılarak kayıtlı anahtara karşı denetlenmektedir. Her iki anahtar da mevcutsa ve eşleşiyorsa, değişkenler kilitsiz duruma geri döner. Bu ilk denemeden sonra veya herhangi bir anahtar kaydedilmediyse, bu değişkeni ayarlamaya yönelik sonraki girişimler, deneme yanılma saldırılarını önlemek amacıyla EFI_ACCESS_DENIED hatasıyla engellenir. Bu durumda, değişkenlerin kilidini açmanın tek yolu sistem yeniden başlatma olacaktır.
İşletim sistemi MemoryOverwriteRequestControlLock varlığını ve durumunu algılamak için GetVariable çağrısı yapar. Sistem daha sonra MemoryOverwriteRequestControl geçerli değerini MemoryOverwriteRequestControlLock değerini 0x1 olarak ayarlayarak kilitleyebilir. Alternatif olarak, gizli veriler bellekten güvenli bir şekilde temizlendikten sonra gelecekte kilidi açmayı etkinleştirmek için bir anahtar belirtebilir.
GetVariableMemoryOverwriteRequestControlLock için çağrı, kilitsiz, anahtarsız kilitli veya anahtarlı kilitli durumlarını belirtmek için 0x0, 0x1 veya 0x2 döndürür.
Ayar MemoryOverwriteRequestControlLock flash belleğe yazmaz (sadece dahili kilit durumunu değiştirir). Değişkeni almak, iç durumu döndürür ve anahtarı hiçbir zaman açığa çıkarmaz.
İşletim sistemine göre örnek kullanım:
if (gSecretsInMemory)
{
char data = 0x11;
SetVariable(MemoryOverwriteRequestControl, sizeof(data), &data);
}
// check presence
status = GetVariable(MemoryOverwriteRequestControlLock, &value);
if (SUCCESS(status))
{
// first attempt to lock and establish a key
// note both MOR and MorLock are locked if successful
GetRNG(8, keyPtr);
status = SetVariable(MemoryOverwriteRequestControlLock, 8, keyPtr);
if (status != EFI_SUCCESS)
{
// fallback to revision 1 behavior
char data = 0x01;
status = SetVariable(MemoryOverwriteRequestControlLock, 1, &data);
if (status != EFI_SUCCESS) { // log error, warn user }
}
}
else
{
// warn user about potentially unsafe system
}
// put secrets in memory
// … time passes …
// remove secrets from memory, flush caches
SetVariable(MemoryOverwriteRequestControlLock, 8, keyPtr);
MorLock uygulama akışı
Bu akış çizelgeleri uygulamanızın beklenen davranışını gösterir:
Başlatma İşlemi
SetVariable Flow
SetVariable için kilitsiz durum akışı
SetVariable için kilitli durum akışı
GetVariable için Akış
Ayrıca bakınız
SoC platformları üzerinde tüm Windows sürümleri için geçerli UEFI gereksinimleri
PC İstemci İş Grubu Platformu Sıfırlama Saldırısı Azaltma Belirtimi, Sürüm 1.10 (PDF indirme)
BitLocker'ı Soğuk Saldırılardan (ve diğer tehditlerden) koruma
EDKII'de UEFI TPM2 Desteği ile BIOS'un Ötesinde Bir Tur
Credential Guard ile etki alanından türetilmiş kimlik bilgilerini koruma