# Secure Boot CA 2023 — kontrola a remediace Jediný PowerShell skript **`Invoke-SecureBootRemediation.ps1`** pro audit a řízenou remediaci expirujících Secure Boot certifikátů na Windows Serverech (fyzické stroje, Hyper-V VM, VMware VM). --- ## 1. Co řešíme Microsoft v upozornění [KB5062710](https://support.microsoft.com/en-us/topic/windows-secure-boot-certificate-expiration-and-ca-updates-7ff40d33-95dc-4c3c-8725-a9b95457578e) oznámil, že původní Secure Boot certifikáty z roku **2011** expirují v průběhu roku **2026**. Tyto certifikáty jsou uloženy přímo ve firmware (UEFI KEK a DB databázích) a zajišťují důvěryhodnost celého boot procesu. | Certifikát | Umístění | Expirace | Náhrada 2023 | |---|---|---|---| | Microsoft Corporation KEK CA 2011 | KEK | **24. 6. 2026** | Microsoft Corporation KEK 2K CA 2023 | | Microsoft UEFI CA 2011 | DB | **27. 6. 2026** | Microsoft UEFI CA 2023 + Option ROM UEFI CA 2023 | | Microsoft Windows Production PCA 2011 | DB | 19. 10. 2026 | Windows UEFI CA 2023 | **Dopad, pokud se nic neudělá:** server bude dál bootovat, ale přestane přijímat nové ochrany boot procesu — aktualizace Boot Manageru, revokace (DBX) a mitigace nově objevených boot-level zranitelností. Postupně se sníží ochrana a ovlivní to scénáře závislé na Secure Boot důvěře (BitLocker hardening, third-party bootloadery). **Pozor — co je skutečné „hotovo":** nestačí jen mít nové certifikáty v KEK/DB. Aktualizace je dokončená, až když se systém **reálně bootuje z Boot Manageru podepsaného Windows UEFI CA 2023** (signalizuje `WindowsUEFICA2023Capable = 2` / Event 1808). Tento poslední krok se aplikuje **až po restartu**. Skript proto kontroluje i Boot Manager, ne jen certifikáty. --- ## 2. Jak skript správně použít ### Požadavky - **Windows PowerShell 5.1+**, spuštěno jako **Administrator** - Build Windows z **14. 10. 2025 nebo novější** ([KB5066835](https://support.microsoft.com/en-us/topic/october-14-2025-kb5066835-os-builds-26200-6899-and-26100-6899-1db237d8-9f3b-4218-9515-3e0a32729685)) — bez něj neexistují servicing registry klíče ani úloha. Skript na to upozorní. - Žádné externí moduly. UEFI databáze čte nativně. ### Skript NIKDY nerestartuje server Restart je nutný k dokončení aktualizace, ale necháváme ho **na vás** (plánované okno, ohled na BitLocker). Skript jen jasně řekne, kdy je restart potřeba. ### Typický průběh (interaktivně) ```powershell # 1) Spustit na serveru jako Administrator .\Invoke-SecureBootRemediation.ps1 ``` Skript provede detekci, ukáže **checklist** a u stavů, kde to dává smysl, se **zeptá**, zda remediaci aplikovat. Po souhlasu nastaví registry a spustí servicing úlohu (počká na ni). Pak: ```text 2) Naplánujte RESTART serveru 3) Po restartu spusťte skript znovu 4) Opakujte, dokud checklist nebude celý zelený (HOTOVO) ``` Aktualizace se aplikuje **po částech na více restartů** — hodnota `AvailableUpdates` postupně klesá `0x5944 → 0x5904 → 0x5104 → 0x4104 → 0x4100 → 0x4000 → 0x0`. Cílový stav je `AvailableUpdates=0x0`, `UEFICA2023Status=Updated`, `WindowsUEFICA2023Capable=2`. ### Důležité před restartem Pokud má server **BitLocker s ochranou vázanou na TPM/PCR7**, změna Boot Manageru může vyvolat recovery prompt. Skript BitLocker stav zobrazí a zvýrazní — **před restartem ověřte recovery key**. ### Parametry | Parametr | Účel | |---|---| | *(bez parametru)* | Interaktivní detekce → dotaz → remediace (bez restartu) | | `-CheckOnly` | Jen detekce + checklist + **exit kód** (0 = hotovo, 1 = nutná akce, 2 = blokováno). Bez změn a bez dotazu. Vhodné pro RMM/monitoring. | | `-WhatIf` | Ukáže, co by remediace udělala, bez provedení změn | | `-AssumeYes` | Neinteraktivně aplikuje remediaci (pokud je smysluplná). Stále bez restartu. | | `-Force` | Aplikuje i ve stavech, kdy to skript jinak nedoporučuje | | `-SkipScheduledTask` | Nastaví registry, ale nespustí úlohu (spustí se sama, cca á 12 h) | | `-SkipBootManagerFileCheck` | Vynechá mount ESP + `certutil`. Dokončení se i tak pozná z `WindowsUEFICA2023Capable=2` / Event 1808 / 1799. | | `-RegisterResume` | Po remediaci vyžadující restart nastaví `RunOnce`, který po PŘÍŠTÍM (ručním) restartu sám spustí `-CheckOnly`. Nikdy nerestartuje. | | `-Detailed` | Rozšířený rozpis (certifikáty, události, Boot Manager chain, bit-rozklad `AvailableUpdates`) | | `-PassThru` | Vrátí výsledný objekt do pipeline | | `-LogPath ` | Vlastní cesta k logu (jinak log vzniká vedle skriptu jen při reálné remediaci) | ### Příklady ```powershell # Jen kontrola stavu (pro skript/monitoring), bez zásahu .\Invoke-SecureBootRemediation.ps1 -CheckOnly # Náhled co by se stalo, bez změn .\Invoke-SecureBootRemediation.ps1 -WhatIf # Neinteraktivní aplikace + auto-kontrola po příštím restartu .\Invoke-SecureBootRemediation.ps1 -AssumeYes -RegisterResume # Plný rozpis pro diagnostiku .\Invoke-SecureBootRemediation.ps1 -CheckOnly -Detailed ``` --- ## 3. Co skript dělá (detailně) ### Fázový checklist Server je „HOTOVO" teprve když projdou všechny **povinné** fáze. Volitelné fáze jsou jen informativní. | Fáze | Povinná | Splněno když | |---|---|---| | Secure Boot zapnutý | ✅ | `Confirm-SecureBootUEFI` = True | | Servicing task k dispozici | ✅ | existuje `\Microsoft\Windows\PI\Secure-Boot-Update` | | KEK: Microsoft Corporation KEK 2K CA 2023 | ✅ | cert v KEK databázi | | DB: Windows UEFI CA 2023 | ✅ | cert v DB databázi | | Boot Manager aktivní (2023) | ✅ | `WindowsUEFICA2023Capable=2` / Event 1808 / 1799 | | DB: Microsoft UEFI CA 2023 (3rd-party) | — | volitelné (pro option ROM / non-Windows boot) | | DB: Option ROM UEFI CA 2023 | — | volitelné | | DBX: revokace starého boot manageru 2011 | — | volitelné (finální hardening) | V checklistu: `[✓]` splněno (zeleně), `[ ]` zbývá, `[✗]` chyba/blokováno. Zvýrazní se aktuální krok („← vyžaduje RESTART"). ### Detekce — odkud čte - **Prostředí a HW** (WMI/CIM): fyzický / Hyper-V VM / VMware VM, výrobce, model, BIOS verze a datum - **Secure Boot stav** a **operating mode** (User / Deployed / **Setup** / Audit) ze standardních UEFI proměnných - **Certifikáty** v KEK / DB / DBX — primárně parsováním `EFI_SIGNATURE_LIST` na X.509 (subject, thumbprint, platnost), s ASCII fallbackem - **Boot Manager** `bootmgfw.efi` na ESP — read-only mount + `certutil -dump` (staged podpis); aktivní stav z registru/eventů - **Registry** `HKLM\SYSTEM\CurrentControlSet\Control\SecureBoot[\Servicing]`: `AvailableUpdates`, `MicrosoftUpdateManagedOptIn`, `HighConfidenceOptOut`, `UEFICA2023Status` (REG_SZ: NotStarted/InProgress/**Updated**), `UEFICA2023Error`, `UEFICA2023ErrorEvent`, `WindowsUEFICA2023Capable` (0/1/**2**), `ConfidenceLevel` - **BitLocker** systémové jednotky: stav ochrany a typ protektoru (zvýraznění TPM/PCR7 rizika) - **Event Log** (System, zdroj TPM-WMI): 1795, 1796, 1799, 1800, 1801, 1802, 1803, 1808 ### Vyhodnocení — kategorie | Kategorie | Význam | Akce | |---|---|---| | **OK** | kompletní 2023 sada, aktivní Boot Manager, 2011 odstraněny | žádná | | **OK_TRANSITION** | 2023 i aktivní Boot Manager hotové, 2011 ještě přítomné (normální) | žádná, monitorovat | | **UPDATE_NEEDED** | nic 2023 nenasazeno | zahájit remediaci | | **UPDATE_PARTIAL** | část nasazena, chybí KEK/DB | pokračovat v cyklu | | **UPDATE_PENDING** | KEK i DB hotové, zbývá aktivovat Boot Manager | **RESTART**, pak znovu zkontrolovat | | **UPDATE_FAILED** | Event 1795 / `UEFICA2023ErrorEvent` / status Failed | firmware/OEM, troubleshooting | | **FIRMWARE_UPDATE_NEEDED** | ConfidenceLevel „Temporarily Paused" / Event 1802 | update firmwaru u OEM | | **NOT_SUPPORTED** | ConfidenceLevel „Not Supported" | dokumentovat jako výjimku | | **SETUP_MODE** | Secure Boot v Setup Mode (chybí enrolled PK) | obnovit klíče v UEFI | | **TASK_MISSING** | chybí servicing úloha (starý build) | nainstalovat KB5066835+ | | **SECUREBOOT_DISABLED** | Secure Boot vypnutý | rozhodnout o zapnutí | | **NO_SECUREBOOT / _VM** | Legacy BIOS / VM bez vTPM | výjimka | ### Remediace (jen po souhlasu, sekvenčně) 1. **Registry** — nastaví `MicrosoftUpdateManagedOptIn=1`, `AvailableUpdates=0x5944`, `HighConfidenceOptOut=0`; zápis se ověří zpětným čtením, než pokračuje dál. 2. **Servicing úloha** — spustí `\Microsoft\Windows\PI\Secure-Boot-Update` a **čeká na změnu** `AvailableUpdates` (nebo na doběh úlohy, timeout 180 s). 3. **Ověření** — znovu proběhne detekce a ukáže aktualizovaný stav fází. Skript pak vypíše další kroky (restart, BitLocker, opakování) — **bez restartu**. ### Stav napříč restarty Průběh se ukládá do `%ProgramData%\SecureBootCA2023\state.json` (číslo cyklu, kategorie, hodnota). S `-RegisterResume` se přes `RunOnce` po dalším restartu sama spustí `-CheckOnly` (žádné auto-aplikování, žádný auto-restart). ### Výstup - Stručný **barevný** souhrn: server, checklist, registry/firmware, verdikt - Český, faktický, nezahlcuje; důležité informace jsou zvýrazněné - Volitelný **log** (cesta se vypíše), `-Detailed` rozpis, `-PassThru` objekt - `-CheckOnly` nastavuje **exit kód** (0/1/2) pro automatizaci ### Kódování Skript je uložen jako **UTF-8 s BOM** a na startu vynutí UTF-8 výstup konzole, aby čeština i symboly (`✓`) fungovaly i ve Windows PowerShell 5.1. Symboly checklistu jsou na jednom místě nahoře ve skriptu (`$SYM_DONE` …), kdyby je bylo potřeba změnit. --- ## 4. Zdroje ### Microsoft — oficiální dokumentace | Téma | Odkaz | |---|---| | Přehled: expirace certifikátů a CA aktualizace (KB5062710) | [support.microsoft.com](https://support.microsoft.com/en-us/topic/windows-secure-boot-certificate-expiration-and-ca-updates-7ff40d33-95dc-4c3c-8725-a9b95457578e) | | Guidance for IT Professionals and Organizations | [support.microsoft.com](https://support.microsoft.com/en-us/topic/secure-boot-certificate-updates-guidance-for-it-professionals-and-organizations-e2b43f9f-b424-42df-bc6a-8476db65ab2f) | | Registry key updates for Secure Boot (IT-managed) | [support.microsoft.com](https://support.microsoft.com/en-us/topic/registry-key-updates-for-secure-boot-windows-devices-with-it-managed-updates-a7be69c9-4634-42e1-9ca1-df06f43f360d) | | Secure Boot DB and DBX variable update events | [support.microsoft.com](https://support.microsoft.com/en-us/topic/secure-boot-db-and-dbx-variable-update-events-37e47cf8-608b-4a87-8175-bdead630eb69) | | IT Pro guidance (KB5062713) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5062713) | | Registry key metoda (KB5068202) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5068202) | | GPO metoda (KB5068198) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5068198) | | WinCS API (KB5068197) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5068197) | | Troubleshooting (KB5085046) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5085046) | | Known issues a resolutions, vč. Hyper-V fix (KB5085790) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5085790) | | Minimální build 14. 10. 2025 (KB5066835) | [support.microsoft.com](https://support.microsoft.com/en-us/topic/october-14-2025-kb5066835-os-builds-26200-6899-and-26100-6899-1db237d8-9f3b-4218-9515-3e0a32729685) | | Windows Server Secure Boot playbook (2026) | [techcommunity.microsoft.com](https://techcommunity.microsoft.com/blog/windowsservernewsandbestpractices/windows-server-secure-boot-playbook-for-certificates-expiring-in-2026/4495789) | ### Komunitní projekty (inspirace pro logiku a přehled) | Projekt | Odkaz | |---|---| | CheckCA2023 (claude-boucher) — GUI monitor, podrobná registry/bit reference | [github.com/claude-boucher/CheckCA2023](https://github.com/claude-boucher/CheckCA2023) | | SecureBoot-CA2023-Automatic-Update (mathisokle) — automatizace přes restarty | [github.com/mathisokle/SecureBoot-CA2023-Automatic-Update](https://github.com/mathisokle/SecureBoot-CA2023-Automatic-Update) | --- *Skript záměrně NErestartuje server. Implementuje metodu registry klíčů (KB5068202); metody GPO / Intune / WinCS nepokrývá.*