Deep dive sugli attributi LastLogon, LastLogonTimestamp, LastLogonDate, LogonCount e LastLogoff di Active Directory

Durante la gestione di un’infrastruttura Active Directory si può presentare la necessità di verificare quando un account utente/computer si è autenticato. Ad esempio per verificare se alcuni utenti o computer non sono più utilizzati da tempo come nel caso di account temporanei, di test o appartenuti a dipendenti non più in servizio o a computer dismessi.

Per verificare la data di ultimo logon si possono analizzare gli attributi LastLogon, LastLogonTimestamp, LastLogonDate dell’oggetto relativo all’account utente/computer di Active Direcotory, ma va precisato che non è possibile rilevare con certezza la data di ultimo logon.

Attributo LastLogon

L’attributo LastLogon, disponibile in Windows 2000 e successivi, memorizza l’ultima volta che l’utente/computer ha eseguito l’accesso e il suo valore rappresenta il numero di intervalli da 100 nanosecondi dal 1° gennaio 1601 (UTC). Un valore pari a zero indica che l’ultima ora di accesso è sconosciuta. Questo attributo non viene replicato, ma mantenuto separatamente in ogni controller di dominio. L’attributo viene aggiornato dal sistema del controller di dominio ogni volta l’utente/computer accede.

Quindi per ottenere un valore accurato per l’ultimo accesso di un utente/computer di dominio tramite l’attributo LastLogon questo deve essere recuperato da ogni controller di dominio nel dominio e il valore più grande recuperato rappresenta la data e l’ora dell’ultimo accesso effettivo per l’utente/computer a meno che il controller di dominio su cui l’utente ha effettuato l’ultimo accesso non sia offline.

Attributo LastLogonTimestamp

L’attributo LastLogonTimestamp, disponibile in Windows 2003 e successivi, memorizza il momento in cui l’utente ha eseguito l’ultimo accesso al dominio il suo valore rappresenta il numero di intervalli da 100 nanosecondi dal 1° gennaio 1601 (UTC). Ogni volta che un utente accede, il valore di questo attributo viene letto dal controller di dominio e aggiornato dal sistema se il valore è precedente all’ora corrente meno il valore di msDS-LogonTimeSyncInterval.

Tale attributo richiede il livello funzionale Windows 2003 Domain ed è replicato su tutti i controller di dominio, ma va precisato che l’aggiornamento iniziale dopo l’aumento del livello funzionale del dominio viene calcolato come 14 giorni meno percentuale casuale di 5 giorni. Questa randomizzazione viene eseguita per impedire un carico di replica elevato sui controller di dominio da momento che la finalità di tale attributo è quella di aiutare l’identificazione di account utente/computer inattivi e non di fornire informazioni in tempo reale.

Quindi tale attributo sarà indietro di un periodo che può variare da 9 a 14 giorni rispetto alla data corrente. Occorre anche tenere presente che il valore dell’attributo su controller di dominio differenti da quello su cui l’utente/computer si è autenticato verrà aggiornato dopo la convergenza della replica di Active Directory.

Inoltre non tutti i tipi di logon aggiornano tale attributo ma solo gli Interactive, Network e Service logons. (l’attributo non verrà aggiornato in seguito a Certificate mapping through Microsoft Internet Information Services (IIS) e Microsoft .NET Passport mapping through IIS.

Per ulteriori informazioni si veda “The LastLogonTimeStamp Attribute” – “What it was designed for and how it works” – Microsoft Community Hub.

Attributo LastLogonDate

L’attributo LastLogonDate è fornito da PowerShell e rappresenta la versione convertita dell’attributo LastLogontimestamp, quindi non è valore calcolato localmente del valore replicato la cui rappresentazione è nel formato data e ora, ma come per l’attributo LastLogonTimeStamp tale attributo sarà indietro di un periodo che può variare da 9 a 14 giorni rispetto alla data corrente oltre ad avere tutte caratteristiche di “imprecisione” dell’attributo LastLogonTimeStamp.

A riguardo si veda Understanding the AD Account attributes – LastLogon, LastLogonTimeStamp and LastLogonDate – TechNet Articles.

Attributo LogonCount

L’attributo LogonCount, disponibile in Windows 2000 e successivi, memorizza il numero di volte in cui l’account si connesso correttamente, il valore 0 indica che il valore è sconosciuto. Questo attributo non viene replicato, ma viene mantenuto in ogni controller di dominio.

Quindi per ottenere un valore accurato per il numero totale di tentativi di accesso riusciti nel dominio, è necessario eseguire una query su ogni controller di dominio nel dominio e usare la somma dei valori. Da momento che l’attributo non viene replicato i controller di dominio ritirati potrebbero aver conteggiato anche gli accessi per l’utente/computer e i questo caso tali accessi non saranno presenti nel conteggio.

Inoltre a causa della compatibilità con le versioni a 16 bit di LAN Manager, l’attributo ha un limite superiore di 65535. Dopo aver raggiunto questo limite, non è possibile usarlo come indicatore dell’attività dell’utente nel controller di dominio.

Attributo LastLogoff

L’attributo LastLogoff, disponibile in  Windows Server 2000, non viene utilizzato quindi non possibile utilizzarlo per ricavare informazioni circa il logoff dell’account.

Considerazioni finali

Gli attributi degli account utente/computer LastLogon, LastLogonTimestamp, LastLogonDate non consentono una verifica in tempo reale della data e l’ora dell’ultimo logon, se questo è l’obbiettivo la soluzione più corretta è quella di memorizzare centralmente gli eventi di logon dei controller di dominio e cercare l’evento di logon più recente dell’utente/computer nello store centralizzato degli eventi.

Analoga considerazione vale nel casi si desideri ottenere informazioni circa il numero di logon eseguiti con successo o la data e l’ora del logoff dal momento che gli attributi LogonCount e LastLogoff non possono essere impiegati.

Inoltre per eseguire verifiche su account inattivi, scaduti o in scadenza si tenga presente il cmdlet Powershell Search-ADAccount.

Riferimenti