233 lines
13 KiB
Markdown
233 lines
13 KiB
Markdown
# 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).
|
||
|
||
**Co je skutečné „hotovo":** nestačí jen mít nové certifikáty v KEK/DB — aktualizace je dokončená až když jsou splněny **všechny 4 podmínky** a Boot Manager je ověřen:
|
||
|
||
1. `Windows UEFI CA 2023` v DB + `Microsoft Corporation KEK 2K CA 2023` v KEK
|
||
2. `AvailableUpdates = 0x0` nebo `0x4000`
|
||
3. `UEFICA2023Status = "Updated"`
|
||
4. `UEFICA2023Error = 0` nebo neexistuje
|
||
5. Boot Manager: `WindowsUEFICA2023Capable = 2` nebo `certutil` ověřil podpis souboru `bootmgfw.efi`
|
||
|
||
Poslední krok (aktivace Boot Manageru) se aplikuje **až po restartu** a skript to ověří přímo na souboru.
|
||
|
||
---
|
||
|
||
## 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 a podpis bootloaderu č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). Výjimka: parametr `-AutoRestart` pro automatizované scénáře.
|
||
|
||
### Typický průběh (interaktivně)
|
||
|
||
```powershell
|
||
# 1) Spustit na serveru jako Administrator
|
||
.\Invoke-SecureBootRemediation.ps1
|
||
```
|
||
|
||
Skript provede detekci, zobrazí výstup ve 4 sekcích 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 stav nebude HOTOVO
|
||
```
|
||
|
||
Aktualizace se aplikuje **po částech na více restartů** — hodnota `AvailableUpdates` postupně klesá `0x5944 → 0x5904 → 0x5104 → 0x4104 → 0x4100 → 0x4000 → 0x0`.
|
||
|
||
### 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 |
|
||
| `-CheckOnly` | Jen detekce + výpis + **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` | Přeskočí interaktivní dotaz a remediaci rovnou aplikuje (pokud je smysluplná). |
|
||
| `-Force` | Spustí remediaci i v případě, že povinné certifikáty jsou již přítomny. |
|
||
| `-AutoRestart` | Po stavu `AU=0x4100` (Boot Manager staged, čeká na restart) restartuje server automaticky bez dotazu. **POZOR: okamžitý restart.** |
|
||
| `-EspDriveLetter <X>` | Písmeno jednotky pro dočasný mount ESP při ověřování Boot Manageru (výchozí `S`). Změňte, pokud `S:` je na serveru obsazeno. |
|
||
|
||
### 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 (CI/CD, dávkový rollout)
|
||
.\Invoke-SecureBootRemediation.ps1 -AssumeYes
|
||
|
||
# Server kde S: je obsazeno, použít T: pro ESP
|
||
.\Invoke-SecureBootRemediation.ps1 -EspDriveLetter T
|
||
|
||
# Neinteraktivní + auto-restart po staged Boot Manageru
|
||
.\Invoke-SecureBootRemediation.ps1 -AssumeYes -AutoRestart
|
||
```
|
||
|
||
---
|
||
|
||
## 3. Co skript dělá (detailně)
|
||
|
||
### Výstup — 4 sekce
|
||
|
||
Skript zobrazí vždy čtyři sekce:
|
||
|
||
```
|
||
PŘEDPOKLADY:
|
||
1. [+] Administrátorská práva
|
||
2. [+] Windows Server — Zjištěno: Windows Server 2022 Standard (build 20348.xxx)
|
||
3. [+] UEFI + Secure Boot zapnutý
|
||
4. [+] Úroveň záplat >= 10/2025 — stavové registry klíče přítomny
|
||
5. [+] Scheduled task 'Secure-Boot-Update' k dispozici
|
||
6. [+] PowerShell SecureBoot cmdlety — Get-SecureBootUEFI dostupný
|
||
|
||
CERTIFIKÁTY:
|
||
[+] Windows UEFI CA 2023 v DB (povinný) platný do 2045-06-10
|
||
[+] Microsoft Corporation KEK 2K CA 2023 (povinný)
|
||
[ ] Boot Manager (bootmgfw.efi) nedostupný (ESP nelze připojit)
|
||
[ ] Microsoft UEFI CA 2023 (volitelný)
|
||
[ ] Option ROM UEFI CA 2023 (volitelný)
|
||
|
||
REGISTRY:
|
||
AvailableUpdates : 0x5944 (naplánováno — start)
|
||
UEFICA2023Status : NotStarted
|
||
UEFICA2023Error : (žádná)
|
||
WindowsUEFICA2023Capable : 1 = cert v DB (boot mgr zatím ne)
|
||
|
||
UDÁLOSTI (System log — Secure Boot):
|
||
2026-06-05 18:42 EventID 1801 Čeká na podmínky (monitor)
|
||
2026-06-05 18:43 EventID 1808 Certifikáty úspěšně aplikovány
|
||
```
|
||
|
||
Pokud hard prerekvizita selže, skript dále nepokračuje a zobrazí přesný důvod.
|
||
|
||
### Fáze — co je povinné pro HOTOVO
|
||
|
||
| Fáze | Povinná | Splněno když |
|
||
|---|---|---|
|
||
| Secure Boot zapnutý | ✅ | `Confirm-SecureBootUEFI` = True |
|
||
| Servicing task k dispozici | ✅ | task `Secure-Boot-Update` existuje |
|
||
| KEK: Microsoft Corporation KEK 2K CA 2023 | ✅ | cert v KEK databázi |
|
||
| DB: Windows UEFI CA 2023 | ✅ | cert v DB databázi |
|
||
| AvailableUpdates = 0x0 nebo 0x4000 | ✅ | servisování dokončeno |
|
||
| UEFICA2023Status = Updated | ✅ | registry klíč |
|
||
| Boot Manager ověřen (2023 CA) | ✅ | Capable=2 nebo certutil potvrdil podpis souboru |
|
||
| DB: Microsoft UEFI CA 2023 (3rd-party) | — | volitelné (option ROM / non-Windows boot) |
|
||
| DB: Option ROM UEFI CA 2023 | — | volitelné |
|
||
| DBX: revokace starého boot manageru 2011 | — | volitelné (finální hardening) |
|
||
|
||
### 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 — parsováním `EFI_SIGNATURE_LIST` na X.509 (subject, thumbprint, platnost), s ASCII fallbackem
|
||
- **Boot Manager** `bootmgfw.efi` na ESP:
|
||
- Pokus 1: prohledá A–Z pro ESP s existujícím písmenem jednotky
|
||
- Pokus 2: připojí ESP přes `mountvol <X>: /S` (výchozí S:, lze změnit `-EspDriveLetter`), zkopíruje soubor do `%TEMP%\SecureBootCA2023\` a ověří podpis přes `certutil -dump` — přečte embedded PKCS#7 blob přímo z PE souboru, bez závislosti na local cert store; záloha Event 1799
|
||
- **Registry** `HKLM\SYSTEM\CurrentControlSet\Control\SecureBoot[\Servicing]`:
|
||
`AvailableUpdates`, `MicrosoftUpdateManagedOptIn`, `HighConfidenceOptOut`, `UEFICA2023Status` (NotStarted / InProgress / **Updated** / Failed), `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** | 4 podmínky splněny + Boot Manager ověřen | žádná |
|
||
| **OK_TRANSITION** | HOTOVO, ale staré 2011 certy ještě přítomné (normální přechodný stav) | žádná, monitorovat |
|
||
| **UPDATE_NEEDED** | Žádné 2023 certy nenasazeny | zahájit remediaci |
|
||
| **UPDATE_PARTIAL** | Část certifikátů nasazena, servisování probíhá | spustit task, restart |
|
||
| **UPDATE_PENDING_RESTART** | Boot Manager 2023 staged (`AU=0x4100`) — čeká na restart | **RESTART** |
|
||
| **UPDATE_BOOTMANAGER** | Certy v DB/KEK OK, ale bootloader dosud nepoužívá 2023 CA | spustit task, restart |
|
||
| **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 |
|
||
| **BUILD_OUTDATED** | Certy přítomny, ale chybí servicing infrastruktura | Windows Update (KB5066835+) |
|
||
| **TASK_MISSING** | Chybí servicing úloha | nainstalovat KB5066835+ |
|
||
| **SETUP_MODE** | Secure Boot v Setup Mode (chybí enrolled PK) | obnovit klíče v UEFI |
|
||
| **SECUREBOOT_DISABLED** | Secure Boot vypnutý | zapnout v UEFI/BIOS |
|
||
| **NO_SECUREBOOT** | Legacy BIOS | dokumentovat jako výjimku |
|
||
| **NO_SECUREBOOT_VM** | VM bez UEFI nebo vTPM | dokumentovat jako výjimku |
|
||
|
||
### Remediace (jen po souhlasu, sekvenčně)
|
||
|
||
1. **Registry** — nastaví `MicrosoftUpdateManagedOptIn=1`, `AvailableUpdates=0x5944` (jen při první inicializaci nebo po dokončení), `HighConfidenceOptOut=0`; zápis se ověří zpětným čtením.
|
||
2. **Servicing úloha** — spustí `\Microsoft\Windows\PI\Secure-Boot-Update` a čeká na změnu `AvailableUpdates` (timeout 180 s).
|
||
3. **Ověření** — znovu proběhne detekce a zobrazí aktualizovaný stav.
|
||
|
||
Po remediaci skript jasně řekne, kdy je restart nutný a upozorní na BitLocker — **bez restartu**.
|
||
|
||
### Stav v log souboru
|
||
|
||
Průběh se loguje do `%ProgramData%\SecureBootCA2023\SecureBootRemediation.log` a stav cyklu do `%ProgramData%\SecureBootCA2023\state.json`.
|
||
|
||
### Výstup pro automatizaci (`-CheckOnly` exit kódy)
|
||
|
||
| Exit kód | Význam |
|
||
|---|---|
|
||
| `0` | HOTOVO — OK nebo OK_TRANSITION |
|
||
| `1` | Nutná akce — UPDATE_* kategorie |
|
||
| `2` | Blokováno — prerekvizita selhala, NO_SECUREBOOT, SETUP_MODE, apod. |
|
||
|
||
### 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.
|
||
|
||
---
|
||
|
||
## 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 (KB5062713) | [support.microsoft.com](https://support.microsoft.com/en-us/help/5062713) |
|
||
| Registry key updates for Secure Boot — IT-managed (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) |
|
||
| 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) |
|
||
| 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, ESP mount logika | [github.com/mathisokle/SecureBoot-CA2023-Automatic-Update](https://github.com/mathisokle/SecureBoot-CA2023-Automatic-Update) |
|
||
|
||
---
|
||
|
||
*Skript záměrně NErestartuje server (výjimka: `-AutoRestart`). Implementuje metodu registry klíčů (KB5068202); metody GPO / Intune / WinCS nepokrývá.*
|