Su alcuni Domain Controller Windows Server 2012 può capitare che il file C:\Windows\System32\lsass.log
cresca in modo anomalo fino a saturare il disco. In questa guida trovi cause, diagnosi e una procedura risolutiva e sicura per disattivare il logging di LSASS, rimuovere il file e prevenire recidive.
Scenario e sintomi
Il processo LSASS (Local Security Authority Subsystem Service) è responsabile delle operazioni di autenticazione, applicazione delle policy di sicurezza e gestione dei token. In contesti con carico elevato (molti logon NTLM/Kerberos, LDAP bind, applicazioni legacy), lsass.log
può iniziare a crescere rapidamente – tipicamente a ritmi di 5–8 MB/s – raggiungendo decine di GB in poche ore. Un riavvio riporta il file a 0 KB, ma la crescita riparte appena il sistema torna operativo.
Perché accade
Sui sistemi Windows Server 2012 alcune patch di sicurezza diagnostiche hanno attivato o lasciato attivabili funzioni di debug/trace in LSASS – spesso correlate a meccanismi di hardening dell’autenticazione NTLM. Se le opzioni di logging restano impostate su “attivo”, ogni richiesta di autenticazione produce scritture dettagliate nel file lsass.log
. Su un Domain Controller, dove le autenticazioni sono continue, ciò si traduce in un flusso pressoché costante di I/O su disco fino a saturazione dello spazio.
Soluzione rapida e definitiva (passi guidati)
Panoramica della correzione
La soluzione consiste nel disattivare il logging di LSASS tramite Registro di sistema, eliminare o comprimere il file di log e riavviare il server. Con le chiavi a 0
il file non viene più rigenerato e la crescita si interrompe definitivamente.
Chiavi di Registro da azzerare
Percorso | Valore | Tipo | Impostazione corretta | Effetto |
---|---|---|---|---|
HKLM\SYSTEM\CurrentControlSet\Control\Lsa | LogToFile | REG_DWORD | 0 | Disattiva la scrittura del log su file. |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa | LspDbgTraceOptions | REG_DWORD | 0 | Disattiva le opzioni di trace di LSASS. |
HKLM\SYSTEM\CurrentControlSet\Control\Lsa | LspDbgInfoLevel | REG_DWORD (o binario equivalente) | 0 | Porta a zero il livello di dettaglio del debug. |
Metodo 1 – Prompt dei comandi (consigliato per interventi rapidi)
- Apri un Prompt dei comandi con privilegi elevati (Esegui come amministratore).
- Esegui i seguenti comandi:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LogToFile /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgTraceOptions /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgInfoLevel /t REG_DWORD /d 0 /f
Metodo 2 – PowerShell (adatto a automazione e script di dominio)
Se il valore esiste già, usa Set-ItemProperty
. Se non esiste, crealo con New-ItemProperty
:
$path = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
Imposta a 0 se già presenti
Set-ItemProperty -Path $path -Name LogToFile -Value 0 -ErrorAction SilentlyContinue
Set-ItemProperty -Path $path -Name LspDbgTraceOptions -Value 0 -ErrorAction SilentlyContinue
Set-ItemProperty -Path $path -Name LspDbgInfoLevel -Value 0 -ErrorAction SilentlyContinue
Crea i valori se mancanti (DWORD)
New-ItemProperty -Path $path -Name LogToFile -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $path -Name LspDbgTraceOptions -Value 0 -PropertyType DWord -Force | Out-Null
New-ItemProperty -Path $path -Name LspDbgInfoLevel -Value 0 -PropertyType DWord -Force | Out-Null </code></pre>
<h3>Metodo 3 – Editor del Registro (GUI)</h3>
<ol>
<li>Avvia <strong>regedit.exe</strong> come amministratore.</li>
<li>Vai a <code>HKEYLOCALMACHINE\SYSTEM\CurrentControlSet\Control\Lsa</code>.</li>
<li>Per ogni valore (<code>LogToFile</code>, <code>LspDbgTraceOptions</code>, <code>LspDbgInfoLevel</code>), imposta <strong>Dati valore</strong> a <code>0</code>. Se il valore non esiste, crealo come <em>Valore DWORD (32 bit)</em> con dati <code>0</code>.</li>
</ol>
<h3>Passaggio successivo – Rimuovere o comprimere il file</h3>
<p>Dopo aver <em>disattivato</em> il logging:</p>
<ul>
<li>Chiudi <strong>tutte le console</strong> di gestione e gli strumenti che possono tenere un handle sul file (Event Viewer, strumenti di diagnostica, antivirus).</li>
<li>Tenta l’eliminazione:
<pre><code>del /f /q "C:\Windows\System32\lsass.log"</code></pre>
</li>
<li>Se l’eliminazione non è possibile perché il file è ancora in uso, <strong>comprimi</strong> per recuperare spazio fino al riavvio:
<pre><code>compact /c /q "C:\Windows\System32\lsass.log"</code></pre>
oppure rinominalo (se il sistema lo consente) per impedire ulteriori scritture.</li>
<li>In extrema ratio, programma l’eliminazione al prossimo avvio (ad es. tramite strumenti di sistema o attività pianificate) e procedi con il riavvio.</li>
</ul>
<h3>Riavvio del server</h3>
<p>Al termine, <strong>riavvia</strong> il Domain Controller. Con i tre valori impostati a <code>0</code>, LSASS <em>non</em> rigenererà il log. Verifica dopo il boot che <code>lsass.log</code> sia assente o resti a 0 KB e che il disco non subisca più crescita anomala.</p>
<h2>Verifiche post‑intervento</h2>
<ul>
<li><strong>Controllo Registro</strong>:
<pre><code>reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LogToFile
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgTraceOptions
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgInfoLevel
Controllo file:
dir "C:\Windows\System32\lsass.log"
oppure:
PowerShell -NoProfile -Command "Get-Item 'C:\Windows\System32\lsass.log' | Select-Object Length, LastWriteTime"
Contatori di performance (breve periodo):
- Process(lsass)\Private Bytes e Process(lsass)\IO Write Bytes/sec per valutare memoria e I/O.
- Security System-Wide Statistics → NTLM Authentications, Kerberos Authentications per il ritmo di autenticazione.
Diagnostica approfondita (facoltativa)
Se vuoi capire cosa ha attivato la crescita del log o escludere altri problemi, puoi eseguire alcuni controlli mirati.
Event Viewer: canali e ID utili
Registro | Evento | Significato |
---|---|---|
Security | 4624 (Logon), 4625 (Logon Failed) | Volume e tasso di accessi; errore di credenziali o attacchi a forza bruta. |
Security | 4768, 4769, 4771 | Flusso di Kerberos (TGT/TGS/fallimenti); utile per capire se il carico è Kerberos o NTLM. |
Security | 4776 | Validazione credenziali via NTLM sul DC: alto volume = molte autenticazioni NTLM. |
System / Application | Errori/Warning LSASS o LSA | Messaggi correlati al subsystem di sicurezza e alle funzioni di debug. |
Performance Monitor: cosa guardare
- Process(lsass) → Private Bytes, Handle Count, IO Write Bytes/sec.
- LDAP → LDAP Client Sessions, Successful Binds/sec, Simple Binds/sec.
- Security System-Wide Statistics → NTLM Authentications, Kerberos Authentications.
Escludere cause esterne
- Antivirus/Malware: una minaccia può generare ondate di tentativi di autenticazione.
- Applicazioni o script: strumenti di monitoraggio, scanner di rete, agent legacy che eseguono bind LDAP o logon ripetuti.
- Client mal configurati: loop di autenticazione (ad es. account di servizio con password scaduta o SPN errati).
Distribuzione su più Domain Controller
In ambienti con più DC, conviene applicare la correzione in modo coerente.
Group Policy Preferences (GPP)
- Crea o modifica una GPO collegata all’OU dei Domain Controller.
- Vai a Computer Configuration → Preferences → Windows Settings → Registry.
- Aggiungi tre Registry Item (Azione: Update):
- Path:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa
, Value name:LogToFile
, Type:REG_DWORD
, Data:0
. - Path:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa
, Value name:LspDbgTraceOptions
, Type:REG_DWORD
, Data:0
. - Path:
HKLM\SYSTEM\CurrentControlSet\Control\Lsa
, Value name:LspDbgInfoLevel
, Type:REG_DWORD
, Data:0
.
- Path:
- Forza l’applicazione:
gpupdate /force
sui DC o attendi la normale replica di policy.
Script PowerShell centralizzato
Esempio di script per forzare i valori a 0
su più server (da eseguire con le dovute credenziali e restrizioni di esecuzione):
$servers = @("DC1","DC2","DC3")
$script = {
$p = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
$names = "LogToFile","LspDbgTraceOptions","LspDbgInfoLevel"
foreach ($n in $names) {
try { Set-ItemProperty -Path $p -Name $n -Value 0 -ErrorAction Stop }
catch { New-ItemProperty -Path $p -Name $n -Value 0 -PropertyType DWord -Force | Out-Null }
}
}
Invoke-Command -ComputerName $servers -ScriptBlock $script
Perché a volte il problema “torna”
Se dopo il riavvio i valori tornano diversi da 0
, c’è quasi sempre un elemento esterno che li reimposta:
- Baseline di sicurezza o hardening applicati via script.
- GPO o GPP che sovrascrivono le chiavi.
- Strumenti di gestione (configuration management) che “ripristinano” configurazioni.
Per individuare la fonte, usa:
gpresult /h C:\Temp\GP-Result.html
rsop.msc
Se una policy imposta i valori a non-zero, modificala alla radice (non solo localmente), altrimenti la modifica locale verrà sovrascritta.
Best practice e accortezze
- Backup del Registro: prima di modificare chiavi di sistema crea un punto di ripristino o un backup del Registry.
- Change control: annota ticket, ora e chiavi modificate; utile per audit e rollback.
- Monitoraggio spazio disco: imposta alert sul volume del sistema; un log fuori controllo deve generare notifica proattiva.
- Non confondere auditing con debug: disattivare il debug LSASS non disabilita l’auditing di sicurezza standard.
- Se devi tenere il log (per investigazioni temporanee):
- Attivalo solo per periodi limitati.
- Metti in atto una log rotation con dimensione massima e retention chiara.
- Colloca il file su un volume dedicato per evitare l’esaurimento del C:\.
Compatibilità e ciclo di vita
Windows Server 2012/2012 R2 ha terminato il supporto esteso il 10 ottobre 2023. Dopo tale data Microsoft non rilascia più aggiornamenti ordinari; solo chi ha attivato programmi di supporto esteso (ESU) riceve patch critiche. Per continuità operativa e sicurezza, è consigliata la migrazione a una versione supportata, come Windows Server 2022. Oltre a chiudere la problematica specifica del logging di LSASS, beneficerai di miglioramenti in AD, TLS, SMB e criteri di sicurezza moderni.
Checklist rapida (riassunto operativo)
- Verifica: crescita veloce di
C:\Windows\System32\lsass.log
, disco in saturazione. - Correzione: imposta a
0
i valoriLogToFile
,LspDbgTraceOptions
,LspDbgInfoLevel
nel Registro. - Pulizia: elimina o comprimi
lsass.log
. - Riavvio: riavvia il Domain Controller.
- Conferma: il file non si rigenera e resta a 0 KB; nessuna crescita anomala.
Domande frequenti
Disattivare il logging di LSASS riduce la sicurezza?
No. Queste chiavi disattivano il debug/trace interno, non l’auditing standard di sicurezza. I log Security restano disponibili e attivi come da policy di auditing.
Serve per forza il riavvio?
Sì, perché LSASS è un processo di sistema critico: non può essere riavviato isolatamente. Il riavvio applica in modo completo la configurazione e rilascia eventuali handle sul file.
Posso applicare la correzione via GPO?
Sì. Usa Group Policy Preferences per distribuire i tre valori di Registro su tutti i DC. È il metodo più pulito in ambienti con più controller.
Come distinguere carico NTLM da Kerberos?
Controlla gli eventi in Security (4776 per NTLM; 4768/4769/4771 per Kerberos) e i contatori in Performance Monitor. Un alto tasso di 4776 indica prevalenza NTLM.
Script “tutto in uno” per DC singolo
Questo script PowerShell imposta le chiavi, tenta di eliminare/comprimere il log e propone il riavvio:
# Esegui come amministratore
$Path = "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"
$Names = "LogToFile","LspDbgTraceOptions","LspDbgInfoLevel"
foreach ($n in $Names) {
try { Set-ItemProperty -Path $Path -Name $n -Value 0 -ErrorAction Stop }
catch { New-ItemProperty -Path $Path -Name $n -Value 0 -PropertyType DWord -Force | Out-Null }
}
$Log = "C:\Windows\System32\lsass.log"
if (Test-Path $Log) {
try { Remove-Item $Log -Force -ErrorAction Stop }
catch {
Write-Host "Il file è in uso. Provo a comprimerlo per recuperare spazio..."
Start-Process -FilePath "compact.exe" -ArgumentList "/c /q `"$Log`"" -WindowStyle Hidden -Wait
}
}
Write-Host "Le modifiche sono state applicate. Riavviare ora per completare? (Y/N)"
$k = Read-Host
if ($k -match "^[Yy]") { Restart-Computer -Force }
Errori comuni (e come evitarli)
- Uso di Set-ItemProperty con tipo:
Set-ItemProperty
non accetta-Type
. Se il valore non esiste, usaNew-ItemProperty -PropertyType DWord
oppurereg add
. - Dimenticare il riavvio: finché LSASS mantiene l’handle, il file può restare bloccato. Pianifica sempre un riavvio breve.
- Modifica solo locale in presenza di GPO: se una GPO reimposta i valori, la correzione “scompare” al successivo refresh delle policy. Identifica e modifica la policy sorgente.
Considerazioni finali
La crescita anomala di lsass.log
su Windows Server 2012 è quasi sempre il risultato di opzioni di debug/trace lasciate attive in LSASS. Portando a 0
i tre valori di Registro indicati (LogToFile
, LspDbgTraceOptions
, LspDbgInfoLevel
), eliminando il file e riavviando, il problema si risolve in modo stabile. Per ambienti mission‑critical è consigliabile applicare la correzione via GPO, con validazione post‑intervento (Event Viewer e Performance Monitor) e, sul medio termine, pianificare la migrazione a versioni supportate di Windows Server.
Appendice: riferimento rapido
HKLM\SYSTEM\CurrentControlSet\Control\Lsa
LogToFile (REG_DWORD) = 0
LspDbgTraceOptions (REG_DWORD) = 0
LspDbgInfoLevel (REG_DWORD) = 0
Tip: comandi equivalenti
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LogToFile /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgTraceOptions /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LspDbgInfoLevel /t REG_DWORD /d 0 /f
Appendice: checklist di prevenzione
- Tenere disattivato il debug LSASS in produzione.
- Audit NTLM: monitorare gli eventi 4776 e limitare l’uso di NTLM dove possibile.
- Stabilire soglie di alert per crescita rapida file in
%SystemRoot%\System32
. - Documentare le modifiche e versionare gli script di hardening.
In sintesi: il file cresce perché il debug LSASS è abilitato; basta azzerare le tre chiavi di registro indicate, eliminare il log e riavviare. Il problema non si ripresenta finché le opzioni restano disattivate.
Se hai bisogno di mantenere il log per indagini: attiva solo temporaneamente, imposta una rotazione con dimensione massima e valuta un volume dedicato. Considera la migrazione a una versione supportata di Windows Server per continuità e sicurezza.