Creare Report di Accesso a Active Directory con PowerShell. Come sappiamo, l’auditing in un ambiente Active Directory (AD) è cruciale per la sicurezza. È vitale scoprire cosa ha fatto l’utente e su quale sistema si è effettuato l’accesso. Pertanto, una delle attività essenziali che la maggior parte degli amministratori si occupa attualmente è scoprire dove un utente si è effettuato l’accesso. Questo articolo guiderà attraverso una guida passo passo per imparare come utilizzare il Visualizzatore eventi predefinito sui controller di dominio (DC), scoprire dove un utente si è effettuato l’accesso e generare un rapporto completo di accesso utilizzando PowerShell.
Quindi, continuiamo con l’articolo Creare Report di Accesso a Active Directory con PowerShell.
Creare Report di Accesso a Active Directory
Prerequisiti
Poiché useremo il Visualizzatore eventi e monitoreremo gli eventi per giorni, dobbiamo assicurarci che le dimensioni dei nostri registri eventi siano sufficienti. Anche se potremmo aver già abilitato queste impostazioni, le esamineremo nuovamente se altre persone hanno bisogno di aumentare le dimensioni del registro eventi.
Se non abbiamo modificato alcuna configurazione in precedenza, l’impostazione predefinita delle dimensioni del nostro registro eventi dovrebbe essere di circa 64 MB. Tuttavia, l’aumento delle dimensioni potrebbe essere necessario, soprattutto se gestiamo più DC nel nostro ambiente. Ad esempio, se vogliamo tenere traccia degli accessi al registro audit per diversi giorni, avremo bisogno di molto più spazio nel visualizzatore eventi.
Creazione di un GPO
1. Come primo passo nella preparazione dell’ambiente, creeremo un oggetto criteri di gruppo (GPO) che contenga le impostazioni Dimensioni del registro eventi. Apriamo la Console di gestione dei criteri di gruppo (GPMC), creiamo un GPO. Per aprire la console, cerca Criteri di gruppo o digita gpmc.msc nella finestra Esegui (Ctrl+R).
2. Nel pannello di navigazione, espandi Foresta: NomeForesta, espandi Domini, espandi NomeDominio, e poi clicca su Oggetti criteri di gruppo. Successivamente, clicca su Azione, e poi su Nuovo.
3. Trova il percorso sottostante all’interno del nuovo GPO:
4. Modifica le dimensioni degli eventi di Sicurezza in base ai nostri ambienti e requisiti. Inoltre, se non ci sono preoccupazioni riguardo allo spazio su disco e alle prestazioni, è possibile configurare le impostazioni al livello massimo di 4 GB.
5. Il passaggio seguente è facoltativo se i controller di dominio non hanno impostazioni del firewall. Tuttavia, dobbiamo essere in grado di interrogare i log degli eventi da più controller di dominio e possibilmente da più siti. Di conseguenza, è prudente assicurarsi che il Monitoraggio del Log degli Eventi Remoti sia abilitato tramite il firewall.
Purtroppo, è possibile coprire solo alcuni dettagli riguardanti la configurazione delle impostazioni del firewall. Tuttavia, l’immagine sotto mostrerà tutte le impostazioni necessarie per abilitare il Monitoraggio del Log degli Eventi Remoti sui nostri controller di dominio.
6. Ora, collegare il GPO appena creato all’OU dei Domain Controllers e attendere che si popolino alcuni eventi. L’evento dipende dall’ambiente e possiamo iniziare subito a interrogare audit o attendere un paio di giorni. Ora che abbiamo configurato correttamente il nostro registro, possiamo passare all’esecuzione dello script PowerShell, che sarà discusso nella sezione successiva dell’articolo.
Prossimo passo con la creazione dei report di accesso all’Active Directory con PowerShell è la parte principale del titolo dell’articolo. Continua a leggere.
Leggi anche Prova gli strumenti di monitoraggio di Azure AD
Crea report di accesso AD con PowerShell
Per iniziare, scarica e copia lo script in una directory o cartella. In alternativa, se hai git installato, possiamo eseguire il seguente comando.
git clone https://github.com/InfraSOS/Get-UserLastLogon.git
Lo script utilizza il modulo ActiveDirectory , ma non sarà necessario installarlo manualmente in quanto lo script controlla la presenza del modulo nel nostro sistema. Una volta scaricato, avvia PowerShell e naviga nella cartella o nel drive dello script scaricato.
Se modifichiamo il file scaricato, vedremo quattro funzioni principali. Queste quattro funzioni principali sono Parametro, Inizio, Processo, e Fine.
Spiegazione dello Script PowerShell
La sezione Parametro contiene i parametri necessari per eseguire lo script. Come mostrato nel blocco di codice qui sotto, abbiamo bisogno di tre parametri affinché lo script funzioni. Spiegheremo questi parametri più avanti.
param (
[Parameter(Mandatory = $true)]
[String]$User,
[Parameter(Mandatory = $false)]
[Array]$Server = @((Get-ADDomainController -Filter *).Name) ,
[Parameter(Mandatory = $false)]
[Array]$Days = 90
)
Come prassi consigliata, le variabili e le informazioni generali vengono inserite nella sezione Inizio per evitare sovraccaricare la parte principale dello script.
[Array]$Table = $null
$DomainControllers = $Server
$AllDomainControllers = @((Get-ADDomainController -Filter *).Name)
[Array]$ExclusionList = @($User,'krbtgt')
$DCCount = $DomainControllers.Count
$UPN = ((get-addomain).DNSRoot).toUpper()
$DateFilter = "-"+$days
$DateThen = (((Get-Date).AddDays($DateFilter)).ToString("yyyy-MM-dd"))+"T20:30:00.000Z"
$DateNow = (Get-Date -Format yyyy-MM-dd)+"T20:30:00.999Z"
$ForestRoot = ((Get-ADForest).rootDomain).toUpper()
$Counter = 0
Lo script Inizio formula anche un filtro primario per interrogare il registro eventi. Successivamente, lo script invierà questo filtro a ogni DC per raccogliere informazioni. Come possiamo vedere in queste righe, ci sono alcune variabili precedentemente discusse, come $UPN e $Utente.
[xml]$FilterXML = @"
*[System[(EventID=4769)
and TimeCreated[@SystemTime>='$DateThen'
and @SystemTime<='$DateNow']]]
and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]
"@
La sezione Processo è la funzione essenziale, dove lo script interroga i dati per generare un rapporto. Il blocco di codice qui sotto è il comando foreach che si esegue ogni volta che effettuiamo l’accesso ad un altro DC per interrogare i dati.
Foreach($DCName in $DomainControllers){...}
Raccogliamo prima gli eventi sul nostro primo DC. Successivamente, il passo successivo è estrarre informazioni preziose da ogni evento e salvarle in un oggetto prima di passare all’evento successivo. Una volta completato il primo DC, lo script si sposta su un altro DC e ripete il processo.
Infine, la sezione Fine mostrerà il rapporto generato finale.
end{
$Table = $Table | Where-Object {($_.Location -notin $AllDomainControllers) -and ($_.Location -ne $ForestRoot) -and ($_.Location -notin $ExclusionList)}
$Table | Sort Time | FT Time,User,Location,Domain,DC -AutoSize
}
Leggi anche Consulta la Gestione di Active Directory
Esecuzione dello Script PowerShell
Per iniziare, apri PowerShell e digita il seguente comando qui sotto per caricare il cmdlet in memoria.
. .\Get-UserLastLogon.ps1
Quando premiamo il tasto Invio, potrebbe verificarsi un errore che indica che l’esecuzione dello script è disabilitata a causa della politica di esecuzione di PowerShell, o potrebbe non verificarsi alcun errore. Nel caso di un errore, aprire una console di PowerShell con privilegi amministrativi, digitare i comandi seguenti per consentire l’esecuzione dello script, e quindi ripetere il comando precedente.
Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1
Ora che lo script è caricato completamente, consideriamolo un esempio per scoprire quali workstation il utente ha effettuato l’accesso negli ultimi 15 giorni. Innanzitutto, digitare il nome utente con il -User parametro e l’intervallo di tempo con il -Days parametro e premere Invio.
Get-UserLastLogon -User marion -Days 15
Come potresti ricordare, abbiamo un altro parametro chiamato -Server parametro. Se non forniamo un valore al -Server parametro, considereremo tutti i controller di dominio per riempire questo parametro. Ora, se abbiamo un DC specifico in mente da mirare a una query di ricerca, possiamo specificarlo come valore del -Server parametro.
Dopo aver eseguito, lo script mostrerà una barra di avanzamento che ci informa dello stato e di quanto tempo ci vorrà per completare. Ora possiamo vedere un rapporto generato dopo aver eseguito lo script. Il rapporto ci dice quali workstation l’utente ha utilizzato per accedere negli ultimi 15 giorni.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Capire lo Script di PowerShell
Quando eseguiamo il script, all’inizio controlla se l’account utente esiste o meno. Pertanto, è evidente che se il nome utente o l’ID inserito non esiste, non è necessario eseguire il resto degli script.
Nel passaggio successivo, calcoliamo le variabili richieste e le inviamo al DC, insieme al filtro necessario per interrogare gli eventi per il nostro utente scelto. Infine, lo script invia una richiesta al primo controller di dominio nell’elenco e gli eventi interrogati relativi all’utente selezionato vengono salvati in una variabile.
La lista degli eventi salvati che lo script inizierà e i passaggi successivi coinvolgeranno la raccolta di dati preziosi dagli eventi. Infine, lo script assegna i dati estratti a una variabile, come il dominio, il nome del DC, ora di accesso e workstation di accesso.
Alla fine, lo script scorre il seguente DC e ripete il processo.
Lo script mostrerà un elenco di computer a noi una volta che contatta l’ultimo DC e raccoglie le sue informazioni.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Grazie per aver letto Creare report di accesso Active Directory con PowerShell. Concluderemo.
Conclusione Creare report di accesso Active Directory
In questa guida, abbiamo imparato come utilizzare l’event viewer essenziale e combinarlo con gli script di PowerShell per trovare un elenco delle workstation in cui un utente ha effettuato l’accesso. Lo script interroga tutti i controller di dominio in un dominio, trova i risultati e li analizza in un formato leggibile che possiamo esportare come report. Ricordati di eseguire il controllo dei prerequisiti prima di eseguire lo script fornito.
Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/