Files
SecureBootCA2023/README.md
T
Petr Stepan 2712030aea Clean repo
2026-06-08 15:38:04 +02:00

233 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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á AZ 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á.*