19.05.2026

Güvenli önyükleme sertifikaları

Bir süredir hayatımızda güvenli önyükleme (secure boot) diye bir şey var, rootkit'lerin veya benzeri zararlı yazılımların bilgisayarın ilk açılış aşamasında devreye girmesini engellemek için. Bu sistem, etkinleştirildikten sonra çalışacak olan önyükleme kodunun yetkilendirilmiş olup olmadığını anlamak için sertifikalar kullanılıyor. İşin içinde sertifika varsa bir de geçerlilik süresi vardır. Ve bu sene de, 2011'de kullanılmaya başlayan (nedendir bilinmez) Microsoft sertifikalarının son senesi. Güncellenmeleri lazım.

Süreç prüzsüz işliyor. Güvenli önyükleme firmware'de etkinleştirilmişse (aksi takdirde 1796 Microsoft-Windows-TPM-WMI olay kaydedilir) işletim sistemi, yeni sertifikaları kurup güvenliği sağlıyor. Süreci kontrol etmek isteyenler için Ayarlar>Gizlilik ve Güvenlik>Cihaz Güvenliği adımında "Güvenli Önyükleme" bölümündeki mesaja bakılabilir. Eğer aşağıdaki gibi bir durumdaysa herşey olması gerektiği gibi işlemiş demektir. Kurulum üst üste birkaç kez yeniden başlatma istiyor.

 

İşleri powershell ile kontrol etmek için Get-SecureBootUEFI cmdlet'i kullanılabilir. Bu cmdlet'in -Name parametresine DB ve KEK (depoları) verilerek istenen sertifikaların sistemde mevcut olup olmadığı kontrol edilebilir. Olması gereken sertifika isimleri, depo ismi ve son kullanma tarihleri şöyle:

Sertfika adıDepo adıSon kullanma tarihi
Windows UEFI CA 2023DB2035-06-13 22:08:29Z
Microsoft Option ROM UEFI CA 2023DB2038-10-26 22:12:20Z
Microsoft UEFI CA 2023DB2038-06-13 22:31:47Z
Microsoft Corporation KEK 2K CA 2023KEK2038-03-02 23:31:35Z

Tüm sertifikaların isimlerinde 2023 geçmesi sebebiyle bu kontrolü aşağıdaki gibi otomatikleştirebilirim.

$kek = Get-SecureBootUEFI -Name KEK -Decoded
$db  = Get-SecureBootUEFI -Name db  -Decoded

$arr1 ="Windows UEFI CA 2023","Microsoft UEFI CA 2023","Microsoft Option ROM UEFI CA 2023"

$res1 = $db  | Where-Object {$_.Subject -match "2023"} |
        Select-Object @{N="Subj";E={$_.Subject.split(",")[0].replace("CN=","")}},
                        @{N="Store";E={"DB"}}, ValidFrom, ValidTo,
                        @{N="Stat";E={if ($_.Subject.split(",")[0].replace("CN=","") -in $arr1) {"OK"} else {"NOT OK"}}}

$res1 += $kek  | Where-Object {$_.Subject -match "2023"} |
        Select-Object @{N="Subj";E={$_.Subject.split(",")[0].replace("CN=","")}},
                        @{N="Store";E={"KEK"}}, ValidFrom, ValidTo,
                        @{N="Stat";E={if ($_.Subject.split(",")[0].replace("CN=","") -eq "Microsoft Corporation KEK 2K CA 2023") {"OK"} else {"NOT OK"}}}
$res1 | Format-Table -AutoSize -Wrap

Sertifikaların kurulması sırasında ve sonrasında sistem olay günlüğüne Microsoft-Windows-TPM-WMI sağlayıcı ismi altında aşağıdaki olaylar kaydediliyor.

IDSağlayıcıSeviyeMesaj
1800Microsoft-Windows-TPM-WMIUyarıA reboot is required before installing the Secure Boot update.
Reason: Boot Manager (2023)
1801Microsoft-Windows-TPM-WMIHataUpdated Secured Boot certificates are available on this device but
have not yet been applied to the firmware.
1043Microsoft-Windows-TPM-WMIBilgiSecure Boot KEK update applied successfully
1045Microsoft-Windows-TPM-WMIBilgi

Secure Boot DB update to install Microsoft UEFI CA 2023
certificate applied successfully

1044Microsoft-Windows-TPM-WMIBilgiSecure Boot DB update to install Microsoft Option ROM
UEFI CA 2023 certificate applied successfully
1036Microsoft-Windows-TPM-WMIBilgiSecure Boot Db update applied successfully
1808Microsoft-Windows-TPM-WMIBilgiThis device has updated Secure Boot CA/keys.

En son 1808 ID'li olay, sistem nihai seviyeye ulaştıktan sonra kaydedildi. 

Bu sertifikaların olması sistemin korunduğu anlamına gelmiyor, bir veya daha fazla yeniden başlatma bekliyor olabilir. Nihai durum için hem firmware'de güvenli önyükleme açık olmalı hem de cihaz güvenliğinde yukarıda bahsettiğim mesaj görüntülenmeli.

Genel olarak bir KB ile başlayan güncelleştirme kodu bu sertifikaların yüklenmesi ile ilişkilendirilmemiş ama ben KB5089549 ve KB5092762 güncelleştirmelerini buldum, tam yüklenme sonrasında.

Linux tarafında mokutil ile sertifikaların varlığı kontrol edilebilir:

sudo mokutil --db | grep -B 1 "2023"
sudo mokutil --kek | grep -B 1 "2023"

Bu komutun sonucu ilk verdiğim tablo ile örtüşmeli. Güncel sertifikalar yoksa fwupdmgr ile firmware güncellemesi denetlenebilir.

sudo fwupdmgr refresh
sudo fwupdmgr get-updates
sudo fwupdmgr update

Ama sertifikaların varlığı yetmiyor, yeni sertifika ile imzalanmış bir shimx64.efi dosyasına ihtiyaç var. Bu dosyanın imzandığı sertifikayı görmek için pesign aracı kullanılabilir (varsayılan olarak kurulu değildir, kurmak için aynı isimli paket kurulmalı).

sudo pesign -S -i /boot/efi/EFI/fedora/shimx64.efi

Benim makinemde bu şöyle bir sonuç döndü:

---------------------------------------------
certificate address is 0x7f321a9fd6d0
Content was not encrypted.
Content is detached; signature cannot be verified.
The signer's common name is Microsoft Windows UEFI Driver Publisher
No signer email address.
No signing time included.
There were certs or crls included.
---------------------------------------------

Bu da henüz imzalı bir shim olmadığını gösteriyor. Önümüzdeki günlerde sanıyorum ki güncel sürüm gelir.

Hiç yorum yok: