← Torna agli articoli

News · 06 February 2026

Hardening Windows: difendere il sistema operativo più attaccato al mondo

Hardening Windows: difendere il sistema operativo più attaccato al mondo

Windows è il sistema operativo più diffuso nei contesti aziendali. È anche quello con la superficie di attacco più ampia, la storia di vulnerabilità più lunga e il numero maggiore di strumenti offensivi costruiti appositamente per attaccarlo.

La buona notizia è che Windows, nelle versioni moderne, ha strumenti di difesa potentissimi — spesso non configurati correttamente o direttamente disabilitati per “comodità”. L’hardening di Windows non significa comprare niente: significa configurare bene ciò che hai già.


1. Aggiornamenti Windows

Prima ancora di toccare qualsiasi configurazione:

# Forza la ricerca e installazione degli aggiornamenti
Install-Module PSWindowsUpdate -Force
Import-Module PSWindowsUpdate
Get-WindowsUpdate -Install -AcceptAll -AutoReboot

Abilita Windows Update per gli aggiornamenti automatici tramite Group Policy: Computer Configuration → Administrative Templates → Windows Components → Windows Update


2. Account e privilegi

Rinomina e disabilita l’account Administrator locale

# Rinomina l'account Administrator (rende più difficile gli attacchi a dizionario)
Rename-LocalUser -Name "Administrator" -NewName "SysAdmin_$(Get-Random -Max 9999)"

# Disabilita l'account Guest
Disable-LocalUser -Name "Guest"

# Verifica tutti gli account locali
Get-LocalUser | Select-Object Name, Enabled, LastLogon

Politica delle password

# Configura i requisiti minimi delle password
net accounts /minpwlen:14 /maxpwage:90 /minpwage:1 /uniquepw:10 /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30

Principio del minimo privilegio

# Controlla chi è nel gruppo Administrators locale
Get-LocalGroupMember -Group "Administrators"

# Rimuovi account non necessari dal gruppo
Remove-LocalGroupMember -Group "Administrators" -Member "utente_non_admin"

3. Windows Defender e sicurezza antimalware

Windows Defender, nelle versioni recenti di Windows 10/11 e Server, è un prodotto serio. Il problema è che spesso viene configurato al minimo.

# Abilita la protezione in tempo reale
Set-MpPreference -DisableRealtimeMonitoring $false

# Abilita la protezione cloud
Set-MpPreference -MAPSReporting Advanced
Set-MpPreference -SubmitSamplesConsent SendAllSamples

# Abilita Attack Surface Reduction (ASR) - fondamentale
# Blocca eseguibili da email e webmail
Add-MpPreference -AttackSurfaceReductionRules_Ids BE9BA2D9-53EA-4CDC-84E5-9B1EEEE46550 -AttackSurfaceReductionRules_Actions Enabled

# Blocca esecuzione di script offuscati
Add-MpPreference -AttackSurfaceReductionRules_Ids 5BEB7EFE-FD9A-4556-801D-275E5FFC04CC -AttackSurfaceReductionRules_Actions Enabled

# Blocca process injection da Office
Add-MpPreference -AttackSurfaceReductionRules_Ids 75668C1F-73B5-4CF0-BB93-3ECF5CB7CC84 -AttackSurfaceReductionRules_Actions Enabled

# Abilita Controlled Folder Access (protezione ransomware)
Set-MpPreference -EnableControlledFolderAccess Enabled

# Forza aggiornamento definizioni
Update-MpSignature

# Verifica stato completo
Get-MpComputerStatus | Select-Object AMRunningMode, RealTimeProtectionEnabled, IoavProtectionEnabled

4. Hardening PowerShell

PowerShell è uno strumento fantastico per l’amministrazione, ma è anche uno degli strumenti più usati negli attacchi (LOLBins). Non disabilitarlo — configuralo bene.

# Imposta execution policy restrittiva
Set-ExecutionPolicy AllSigned -Scope LocalMachine -Force

# Abilita il logging di PowerShell (essenziale per il Blue Team)
# Tramite Group Policy: 
# Computer Configuration → Administrative Templates → Windows Components → Windows PowerShell

# Oppure via registro:
$psLogPath = "HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell"

# Script Block Logging — logga il contenuto di ogni script eseguito
New-Item -Path "$psLogPath\ScriptBlockLogging" -Force | Out-Null
Set-ItemProperty -Path "$psLogPath\ScriptBlockLogging" -Name "EnableScriptBlockLogging" -Value 1

# Module Logging
New-Item -Path "$psLogPath\ModuleLogging" -Force | Out-Null
Set-ItemProperty -Path "$psLogPath\ModuleLogging" -Name "EnableModuleLogging" -Value 1

# Transcription — salva trascrizioni delle sessioni PS
New-Item -Path "$psLogPath\Transcription" -Force | Out-Null
Set-ItemProperty -Path "$psLogPath\Transcription" -Name "EnableTranscripting" -Value 1
Set-ItemProperty -Path "$psLogPath\Transcription" -Name "OutputDirectory" -Value "C:\PSLogs"

5. Audit e Event Logging

I log di Windows sono la tua finestra su tutto ciò che accade. Di default, non loggano abbastanza.

# Abilita l'audit avanzato (Advanced Audit Policy)
# Processo di creazione (fondamentale per il threat hunting)
auditpol /set /subcategory:"Process Creation" /success:enable /failure:enable

# Logon/Logoff
auditpol /set /subcategory:"Logon" /success:enable /failure:enable
auditpol /set /subcategory:"Logoff" /success:enable /failure:enable

# Accesso a oggetti (file, cartelle)
auditpol /set /subcategory:"File System" /success:enable /failure:enable

# Cambio di policy
auditpol /set /subcategory:"Audit Policy Change" /success:enable /failure:enable

# Gestione account
auditpol /set /subcategory:"User Account Management" /success:enable /failure:enable

# Usa di privilegi speciali
auditpol /set /subcategory:"Special Logon" /success:enable

# Verifica le impostazioni
auditpol /get /category:*

Event ID fondamentali da monitorare:

4624 → Logon riuscito
4625 → Logon fallito (brute force!)
4648 → Logon con credenziali esplicite
4688 → Nuovo processo creato
4698 → Task schedulato creato
4720 → Account utente creato
4732 → Utente aggiunto al gruppo Administrators
7045 → Nuovo servizio installato

6. Disabilita servizi e protocolli inutili

# Disabilita SMBv1 (responsabile di WannaCry, EternalBlue, ecc.)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol -NoRestart

# Disabilita LLMNR (Link-Local Multicast Name Resolution) — vettore di relay attack
# Via Group Policy: Computer Configuration → Administrative Templates → Network → DNS Client
# "Turn off multicast name resolution" → Enabled

# Disabilita NetBIOS over TCP/IP
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration
foreach ($adapter in $adapters) {
    $adapter.SetTcpipNetbios(2)  # 2 = Disabilitato
}

# Disabilita servizi non necessari
$servizi_da_disabilitare = @(
    "Fax",           # Fax
    "XblGameSave",   # Xbox Game Save
    "XboxNetApiSvc", # Xbox Network
    "RemoteRegistry" # Registry remoto — SEMPRE disabilitarlo
)

foreach ($svc in $servizi_da_disabilitare) {
    if (Get-Service -Name $svc -ErrorAction SilentlyContinue) {
        Stop-Service -Name $svc -Force
        Set-Service -Name $svc -StartupType Disabled
        Write-Host "[+] Disabilitato: $svc"
    }
}

7. Windows Firewall

# Verifica stato
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction

# Abilita il firewall su tutti i profili con policy deny-default in ingresso
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Block
Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultOutboundAction Allow

# Aggiungi regola per SSH se necessario
New-NetFirewallRule -DisplayName "SSH" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow

# Blocca protocolli pericolosi in entrata
New-NetFirewallRule -DisplayName "Block Telnet" -Direction Inbound -Protocol TCP -LocalPort 23 -Action Block
New-NetFirewallRule -DisplayName "Block RDP from internet" -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress LocalSubnet -Action Allow

8. Credential Guard e Device Guard

Su Windows 10/11 Enterprise e Windows Server 2016+:

# Abilita Credential Guard (protegge gli hash NTLM e ticket Kerberos in memoria)
# Richiede UEFI e Secure Boot

$regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard"
Set-ItemProperty -Path $regPath -Name "EnableVirtualizationBasedSecurity" -Value 1
Set-ItemProperty -Path $regPath -Name "RequirePlatformSecurityFeatures" -Value 1

$cgPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
Set-ItemProperty -Path $cgPath -Name "LsaCfgFlags" -Value 1

Checklist CIS Windows semplificata

Il CIS (Center for Internet Security) pubblica benchmark dettagliati per ogni versione di Windows. Puoi scaricarli gratuitamente. Gli elementi più critici:

✅ Account Administrator rinominato e disabilitato
✅ Guest disabilitato
✅ Password policy configurata
✅ Windows Update attivo e aggiornato
✅ Windows Defender con ASR abilitato
✅ PowerShell logging abilitato
✅ Script Block Logging attivo
✅ SMBv1 disabilitato
✅ NetBIOS disabilitato
✅ LLMNR disabilitato
✅ RemoteRegistry disabilitato
✅ Firewall attivo su tutti i profili
✅ Audit policy avanzata configurata
✅ Credential Guard abilitato (se supportato)

Conclusione

L’hardening di Windows sembra intimidatorio, ma la maggior parte di queste configurazioni si applica in pochi minuti con PowerShell o Group Policy. Molte di esse prevengono le tecniche di attacco più comuni — pass-the-hash, lateral movement, credential dumping — semplicemente configurando correttamente ciò che Windows già offre.

Uno strumento utile per fare un check veloce dello stato di hardening è Microsoft Security Compliance Toolkit, gratuito e scaricabile direttamente da Microsoft. 🪟