refactor(template): §7 — move OS hardening to Deploy, Setup becomes validation-only
§7.1 — Setup Steps 1/3/4b/5b/5c converted to Assert-Step only:
- Deploy post-install.ps1 now owns: Firewall (all profiles disabled),
WinRM MaxMemory=2048MB/IdleTimeout=2h/MaxProcesses=25/StartupType=Automatic,
lock screen (NoLockScreen), SM GPO policy key + scheduled task disable,
DisableCAD in Winlogon, OOBE non-policy key.
- Setup no longer re-applies these — validates them, throws if Deploy missed any.
§7.2 — WU lifecycle Strategy B:
- Deploy: replaces sc.exe disable with GPO locks only (NoAutoUpdate=1,
DisableWindowsUpdateAccess=1); services remain Manual (Windows default).
- Setup Step 6 Step A already clears these locks before COM API; Step 6b
permanently disables services post-update. No Setup changes needed.
§7.3 — Docs updated:
- Deploy .DESCRIPTION reflects full hardening ownership.
- Setup .DESCRIPTION marks validation-only steps, updates step ordering rationale.
- WINDOWS-TEMPLATE-SETUP.md: three-script architecture table, CI-WinBuild.vmx
path, Fase C step list + rationale + validation table updated.
TODO: §7.1/7.2/7.3 marked done. §7.4 e2e pending (requires new VM snapshot).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -570,18 +570,18 @@ build più ampi senza toccare il template.
|
||||
|
||||
Tool da aggiungere come step `Setup-WinBuild2025` (ognuno con `Assert-Step`):
|
||||
|
||||
| Tool | Versione | Razionale |
|
||||
| ------------------- | ----------- | ------------------------------------------------------------ |
|
||||
| **Git for Windows** | latest LTS | Self-clone in VM (alt a host-zip-transfer), submodule fetch |
|
||||
| **7-Zip** | latest | Universale unpack/zip; molti installer e workflow ne dipendono |
|
||||
| **PowerShell 7.x** | latest LTS | Più veloce di 5.1, parallel pipelines, operatori moderni |
|
||||
| **NSIS** | latest | Test build installer (es. `nsis-plugin-nsinnounp`) |
|
||||
| **CMake** | latest | Build system cross-platform per progetti C/C++ nativi |
|
||||
| **Node.js LTS** | latest LTS | Frontend/Electron pipelines, JS toolchain (npm) |
|
||||
| **WiX Toolset** | v4 stable | MSI building da .NET projects |
|
||||
| **gh CLI** | latest | Upload artifact a release Gitea/GitHub, comment PR |
|
||||
| **Sysinternals** | sysinternals.com `live` | Diagnostica process/handle quando build flaky |
|
||||
| **vcpkg** | latest | Package manager C++ per dipendenze native |
|
||||
| Tool | Versione | Razionale |
|
||||
| ------------------- | ----------------------- | -------------------------------------------------------------- |
|
||||
| **Git for Windows** | latest LTS | Self-clone in VM (alt a host-zip-transfer), submodule fetch |
|
||||
| **7-Zip** | latest | Universale unpack/zip; molti installer e workflow ne dipendono |
|
||||
| **PowerShell 7.x** | latest LTS | Più veloce di 5.1, parallel pipelines, operatori moderni |
|
||||
| **NSIS** | latest | Test build installer (es. `nsis-plugin-nsinnounp`) |
|
||||
| **CMake** | latest | Build system cross-platform per progetti C/C++ nativi |
|
||||
| **Node.js LTS** | latest LTS | Frontend/Electron pipelines, JS toolchain (npm) |
|
||||
| **WiX Toolset** | v4 stable | MSI building da .NET projects |
|
||||
| **gh CLI** | latest | Upload artifact a release Gitea/GitHub, comment PR |
|
||||
| **Sysinternals** | sysinternals.com `live` | Diagnostica process/handle quando build flaky |
|
||||
| **vcpkg** | latest | Package manager C++ per dipendenze native |
|
||||
|
||||
**Approccio**:
|
||||
- Pinning hash SHA256 per ogni installer (vedi §1.3)
|
||||
@@ -619,27 +619,33 @@ duplicazioni; ogni concern ha **una sola** sorgente di verità.
|
||||
**Stato attuale (duplicati)**: UAC, Explorer LaunchTo, Server Manager off, DisableCAD,
|
||||
OOBE telemetry, WU services disable — entrambi gli script li toccano.
|
||||
|
||||
### 7.1 [P1] Spostare base OS hardening da Setup a Deploy
|
||||
### 7.1 [P1] Spostare base OS hardening da Setup a Deploy ✅ codice fatto 2026-05-10
|
||||
File: [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1),
|
||||
[template/Setup-WinBuild2025.ps1](template/Setup-WinBuild2025.ps1).
|
||||
|
||||
**Implementato**: Firewall disable + WinRM MaxMemory/IdleTimeout/MaxProcesses spostati in
|
||||
Deploy post-install.ps1. Aggiunti anche lock screen, SM GPO policy key, SM scheduled task
|
||||
disable, DisableCAD Winlogon, OOBE non-policy key (mancanti vs Setup 5c).
|
||||
Setup Step 1/3/4b/5b/5c convertiti a Assert-Step only — nessun Set.
|
||||
Pending §7.4 per e2e validation su VM reale.
|
||||
|
||||
**Da MUOVERE Setup → Deploy**:
|
||||
|
||||
| Concern Setup | Step attuale Setup | Azione Deploy |
|
||||
| ----------------------------- | ------------------ | ------------------------------------------- |
|
||||
| Firewall off all profiles | Step 1 | Aggiungere `Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False` in post-install (ora Deploy aggiunge solo regole RDP/ICMP) |
|
||||
| WinRM tuning memoria/timeout | Step 3 (parziale) | Aggiungere `MaxMemoryPerShellMB=2048`, `IdleTimeOut=7200000`, `MaxProcessesPerShell=25` in post-install dopo Enable-PSRemoting |
|
||||
| Concern Setup | Step attuale Setup | Azione Deploy |
|
||||
| ---------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Firewall off all profiles | Step 1 | Aggiungere `Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False` in post-install (ora Deploy aggiunge solo regole RDP/ICMP) |
|
||||
| WinRM tuning memoria/timeout | Step 3 (parziale) | Aggiungere `MaxMemoryPerShellMB=2048`, `IdleTimeOut=7200000`, `MaxProcessesPerShell=25` in post-install dopo Enable-PSRemoting |
|
||||
|
||||
**Da CONVERTIRE in Setup a Assert-Step (validation-only)**:
|
||||
|
||||
| Step Setup | Diventa |
|
||||
| ---------- | ------- |
|
||||
| Step 1 Firewall | `Assert-Step` 3 profili Enabled=False (richiede prima la riga "Da MUOVERE" → Deploy: Set-NetFirewallProfile -Enabled False) |
|
||||
| Step 2 Defender | Già validation-only (refactor 2026-05-09) |
|
||||
| Step 3 WinRM tuning | `Assert-Step` MaxMemoryPerShellMB, IdleTimeOut, AllowUnencrypted, Basic |
|
||||
| Step 4b UAC | `Assert-Step` EnableLUA=0, LocalAccountTokenFilterPolicy=1 |
|
||||
| Step 5b Explorer LaunchTo | `Assert-Step` HKCU LaunchTo=1 |
|
||||
| Step 5c Server Manager / DisableCAD / OOBE | `Assert-Step` HKLM machine policy + DisableCAD=1 + OOBE policy |
|
||||
| Step Setup | Diventa |
|
||||
| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Step 1 Firewall | `Assert-Step` 3 profili Enabled=False (richiede prima la riga "Da MUOVERE" → Deploy: Set-NetFirewallProfile -Enabled False) |
|
||||
| Step 2 Defender | Già validation-only (refactor 2026-05-09) |
|
||||
| Step 3 WinRM tuning | `Assert-Step` MaxMemoryPerShellMB, IdleTimeOut, AllowUnencrypted, Basic |
|
||||
| Step 4b UAC | `Assert-Step` EnableLUA=0, LocalAccountTokenFilterPolicy=1 |
|
||||
| Step 5b Explorer LaunchTo | `Assert-Step` HKCU LaunchTo=1 |
|
||||
| Step 5c Server Manager / DisableCAD / OOBE | `Assert-Step` HKLM machine policy + DisableCAD=1 + OOBE policy |
|
||||
|
||||
**Da MANTENERE in Setup (build env, non base OS)**:
|
||||
- Step 4: build user `ci_build` + admin
|
||||
@@ -653,10 +659,15 @@ File: [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1),
|
||||
- Setup run dopo Deploy: tutte Assert-Step pass `[OK]` immediato (no work)
|
||||
- Test `--Skip` orthogonali (no regressione)
|
||||
|
||||
### 7.2 [P1] WU lifecycle — strategia B (Deploy: GPO + Manual; Setup: lifecycle)
|
||||
### 7.2 [P1] WU lifecycle — strategia B (Deploy: GPO + Manual; Setup: lifecycle) ✅ codice fatto 2026-05-10
|
||||
File: [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1),
|
||||
[template/Setup-WinBuild2025.ps1](template/Setup-WinBuild2025.ps1).
|
||||
|
||||
**Implementato**: Deploy sostituisce `sc.exe config start= disabled` con
|
||||
`NoAutoUpdate=1` + `DisableWindowsUpdateAccess=1` GPO (servizi rimangono Manual).
|
||||
Setup Step 6 Step A/D già gestisce reset + restart servizi (idempotente).
|
||||
Pending §7.4 per e2e validation.
|
||||
|
||||
**Stato attuale (conflitto ordering)**:
|
||||
- Deploy: `sc.exe config wuauserv start= disabled` + `sc.exe stop wuauserv` (idem UsoSvc, WaaSMedicSvc) + GPO `NoAutoUpdate=1`
|
||||
- Setup Step 6: necessita servizi UP per SchTask SYSTEM run WU
|
||||
@@ -686,14 +697,10 @@ File: [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1),
|
||||
- Setup `-SkipWindowsUpdate`: Final gate vede `StartType=Disabled` (impostato da Step 6b)
|
||||
- Setup senza `-Skip`: WU runs, exit 0/2/3, poi servizi disabled
|
||||
|
||||
### 7.3 [P2] Update header docs di entrambi gli script
|
||||
- [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1) `.DESCRIPTION`:
|
||||
enumerare tutte le hardening voci che Deploy ora possiede (firewall, WinRM tuning,
|
||||
WU GPO non disable)
|
||||
- [template/Setup-WinBuild2025.ps1](template/Setup-WinBuild2025.ps1) `.DESCRIPTION`:
|
||||
marcare Step 1/3/4b/5b/5c come "validation-only — set by Deploy"
|
||||
- [docs/WINDOWS-TEMPLATE-SETUP.md](docs/WINDOWS-TEMPLATE-SETUP.md): aggiornare descrizione
|
||||
"Cosa fa Setup-WinBuild2025" — riflettere nuovo confine
|
||||
### 7.3 [P2] Update header docs di entrambi gli script ✅ fatto 2026-05-10
|
||||
- [template/Deploy-WinBuild2025.ps1](template/Deploy-WinBuild2025.ps1) `.DESCRIPTION`: aggiornato con tutte le hardening voci (firewall, WinRM tuning, WU GPO strategy B, lock screen, SM, OOBE).
|
||||
- [template/Setup-WinBuild2025.ps1](template/Setup-WinBuild2025.ps1) `.DESCRIPTION`: Steps 1/3/4b/5b/5c marcati "validation-only — set by Deploy"; step ordering rationale aggiornato.
|
||||
- [docs/WINDOWS-TEMPLATE-SETUP.md](docs/WINDOWS-TEMPLATE-SETUP.md): architettura "tre script", VMX path corretti, Fase C step list + razionale + tabella validazioni aggiornati.
|
||||
|
||||
### 7.4 [P2] Test e2e refactor
|
||||
- Run Deploy stand-alone su VM test → verifica tutte le hardening voci presenti
|
||||
|
||||
Reference in New Issue
Block a user