Crescita anomala di C:\Windows\System32\lsass.log su Domain Controller Windows Server 2012: causa, soluzione e best practice

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.

Indice

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

PercorsoValoreTipoImpostazione correttaEffetto
HKLM\SYSTEM\CurrentControlSet\Control\LsaLogToFileREG_DWORD0Disattiva la scrittura del log su file.
HKLM\SYSTEM\CurrentControlSet\Control\LsaLspDbgTraceOptionsREG_DWORD0Disattiva le opzioni di trace di LSASS.
HKLM\SYSTEM\CurrentControlSet\Control\LsaLspDbgInfoLevelREG_DWORD (o binario equivalente)0Porta a zero il livello di dettaglio del debug.

Metodo 1 – Prompt dei comandi (consigliato per interventi rapidi)

  1. Apri un Prompt dei comandi con privilegi elevati (Esegui come amministratore).
  2. 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&nbsp;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 StatisticsNTLM 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

RegistroEventoSignificato
Security4624 (Logon), 4625 (Logon Failed)Volume e tasso di accessi; errore di credenziali o attacchi a forza bruta.
Security4768, 4769, 4771Flusso di Kerberos (TGT/TGS/fallimenti); utile per capire se il carico è Kerberos o NTLM.
Security4776Validazione credenziali via NTLM sul DC: alto volume = molte autenticazioni NTLM.
System / ApplicationErrori/Warning LSASS o LSAMessaggi correlati al subsystem di sicurezza e alle funzioni di debug.

Performance Monitor: cosa guardare

  • Process(lsass)Private Bytes, Handle Count, IO Write Bytes/sec.
  • LDAPLDAP Client Sessions, Successful Binds/sec, Simple Binds/sec.
  • Security System-Wide StatisticsNTLM 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)

  1. Crea o modifica una GPO collegata all’OU dei Domain Controller.
  2. Vai a Computer Configuration → Preferences → Windows Settings → Registry.
  3. 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.
  4. 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)

  1. Verifica: crescita veloce di C:\Windows\System32\lsass.log, disco in saturazione.
  2. Correzione: imposta a 0 i valori LogToFile, LspDbgTraceOptions, LspDbgInfoLevel nel Registro.
  3. Pulizia: elimina o comprimi lsass.log.
  4. Riavvio: riavvia il Domain Controller.
  5. 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, usa New-ItemProperty -PropertyType DWord oppure reg 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.

Indice