Maak actieve directory inlograpporten met PowerShell.

Maak Active Directory-aanmeldrapporten met PowerShell. Zoals we weten, is controle in een Active Directory-omgeving (AD) cruciaal voor beveiliging. Het is van essentieel belang om te achterhalen welke handelingen de gebruiker heeft uitgevoerd en op welk systeem er is aangemeld. Daarom is een van de belangrijkste taken waarmee de meeste beheerders tegenwoordig te maken hebben, het achterhalen waar een gebruiker zich heeft aangemeld. Dit artikel neemt je stapsgewijs mee om te laten zien hoe je de ingebouwde Event Viewer op domeincontrollers (DC) kunt gebruiken, kunt achterhalen waar een gebruiker zich heeft aangemeld en een uitgebreid aanmeldrapport kunt genereren met behulp van PowerShell.

Dus laten we doorgaan met het artikel Active Directory-aanmeldrapporten maken met PowerShell. 

Active Directory-aanmeldrapporten maken

Vereisten

Omdat we de Gebeurtenisviewer en bewaken de gebeurtenissen voor dagen, moeten we ervoor zorgen dat de grootte van onze gebeurtenislogboeken voldoende is. Hoewel we deze instellingen mogelijk al hebben ingeschakeld, zullen we ze opnieuw bekijken als andere personen de grootte van het gebeurtenislogboek moeten vergroten.

Als we eerder geen enkele configuratie hebben gewijzigd, zou de standaardgrootte-instelling van ons gebeurtenislogboek ongeveer 64 MB moeten zijn. De toename in grootte moet echter mogelijk plaatsvinden, vooral als we te maken hebben met meerdere DC’s in onze omgeving. Als we bijvoorbeeld controle-aanmeldingen gedurende meerdere dagen willen bijhouden, hebben we veel meer ruimte nodig in de gebeurtenisviewer.

Een GPO maken

1. Als eerste stap in het voorbereiden van de omgeving, zullen we een Group Policy Object (GPO) aanmaken dat de instellingen voor Event Log Size bevat. Laten we de Group Policy Management Console (GPMC) openen, een GPO aanmaken. Om de console te openen, zoek naar Group Policy of typ gpmc.msc in het Uitvoeren (Ctrl+R) venster.

2. In het navigatiepaneel, vouw Forest: ForestName uit, vouw Domains uit, vouw DomainName uit, en klik vervolgens op Group Policy Objects. Klik vervolgens op Action, en klik dan op New.

3. Zoek het onderstaande pad binnen de nieuw gemaakte GPO:

4. Pas de grootte van het Beveiliging gebeurtenis aan op basis van onze omgevingen en vereisten. Bovendien, als er geen zorgen zijn over schijfruimte en prestaties, is het mogelijk om instellingen te configureren op een maximaal niveau van 4 GB.

5. De volgende stap is optioneel als domeincontrollers geen firewallinstellingen hebben. We moeten echter in staat zijn om gebeurtenislogboeken van meerdere domeincontrollers en mogelijk meerdere sites te bevragen. Het is daarom verstandig om ervoor te zorgen dat Externe Gebeurtenis Logboek Monitoring is ingeschakeld via de firewall.

Helaas is het alleen mogelijk om enkele details te behandelen over het configureren van firewallinstellingen. Toch zal de onderstaande afbeelding alle instellingen laten zien die nodig zijn om Externe Gebeurtenis Logboek Monitoring in te schakelen op onze domein controllers.

6. Nu, verbind de GPO die we zojuist hebben aangemaakt met de OU Domain Controllers en wacht tot enkele gebeurtenissen zich voordoen. De gebeurtenis is afhankelijk van de omgeving, en we kunnen meteen beginnen met het opvragen van audits of een paar dagen wachten. Nu we onze logging correct hebben ingesteld, kunnen we doorgaan met het uitvoeren van het PowerShell-script, dat wordt besproken in het volgende gedeelte van het artikel.

Het volgende onderdeel met het maken van Active Directory Logon-rapporten met PowerShell is het belangrijkste deel van de titel van het artikel. Lees verder. 

Maak AD Logon-rapporten met PowerShell

Om te beginnen, download en kopieer het script naar een directory of map. Als alternatief, als je git geïnstalleerd hebt, kunnen we de volgende opdracht uitvoeren.

git clone https://github.com/InfraSOS/Get-UserLastLogon.git

Het script maakt gebruik van de ActiveDirectory -module, maar we hoeven deze niet handmatig te installeren omdat het script controleert of de module in ons systeem aanwezig is. Eenmaal gedownload, start PowerShell en navigeer naar de map of schijf waar het gedownloade script zich bevindt.

Als we het gedownloade bestand bewerken, zien we vier hoofdfuncties. Deze vier hoofdfuncties zijn Param, Begin, Process, en End.

Uitleg van het PowerShell-script

De Param-sectie bevat de parameters die nodig zijn om het script uit te voeren. Zoals weergegeven in onderstaand codeblok, hebben we drie parameters nodig voor het script om te werken. We zullen deze parameters later uitleggen.

param (
    [Parameter(Mandatory = $true)]
    [String]$User,

    [Parameter(Mandatory = $false)]
    [Array]$Server = @((Get-ADDomainController -Filter *).Name) ,

    [Parameter(Mandatory = $false)]
    [Array]$Days = 90
)

Als beste praktijk worden variabelen en algemene informatie geplaatst in de Begin-sectie om overbevolking van het hoofddeel van het script te voorkomen.

[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

Het Begin-script formuleert ook een primaire filter voor het opvragen van het gebeurtenislogboek. Vervolgens stuurt het script deze filter naar elke DC om informatie te verzamelen. Zoals we kunnen zien in deze regels, zijn er enkele eerder besproken variabelen, zoals $UPN en $User.

[xml]$FilterXML = @"


    *[System[(EventID=4769)
	and TimeCreated[@SystemTime>='$DateThen'
	and @SystemTime<='$DateNow']]]
	and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]


"@

De sectie Proces is de essentiële functie, waar het script vraagt om de gegevens om een rapport te genereren. Het codeblok hieronder is de foreach opdracht die telkens wordt uitgevoerd wanneer we inloggen op een ander DC om gegevens op te vragen.

Foreach($DCName in $DomainControllers){...}

We verzamelen eerst gebeurtenissen op onze eerste DC. Vervolgens is de volgende stap om waardevolle informatie uit elke gebeurtenis te extraheren en op te slaan in een object voordat we doorgaan naar de volgende gebeurtenis. Eenmaal klaar met de eerste DC, gaat het script naar een ander DC en herhaalt het proces.

Ten slotte zal de Einde sectie het uiteindelijke gegenereerde rapport tonen.

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
}

Het uitvoeren van het PowerShell-script

Om te beginnen, open PowerShell en typ de volgende opdracht hieronder om de cmdlet in het geheugen te laden.Wanneer we op de Enter toets drukken, kan er een foutmelding verschijnen die aangeeft dat de uitvoering van het script is uitgeschakeld vanwege het PowerShell-uitvoeringsbeleid, of er zal geen fout zijn. In het geval van een fout, open een PowerShell-console met administratieve rechten, typ de volgende opdrachten hieronder om scriptuitvoering toe te staan, en herhaal dan de vorige opdracht.

. .\Get-UserLastLogon.ps1

Wanneer we op de Enter toets drukken, kan er een foutmelding verschijnen die aangeeft dat de uitvoering van het script is uitgeschakeld vanwege de PowerShell-uitvoeringsbeleid, of er is geen fout. In het geval van een fout, open een PowerShell-console met beheerdersrechten, typ de volgende commando’s hieronder om scriptuitvoering toe te staan, en herhaal vervolgens het vorige commando.

Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1

Nu het script volledig is geladen, beschouwen we het als een voorbeeld om te achterhalen op welke werkstations de gebruiker de afgelopen 15 dagen is ingelogd. Typ eerst de gebruikersnaam met de –User parameter en het tijdsbestek met de –Days parameter en druk op Enter

Get-UserLastLogon -User marion -Days 15

Als je het misschien herinnert, hebben we nog een parameter die de parameter heet en de -Server parameter. Als we geen waarde opgeven voor de -Server parameter, zullen we alle domein controllers beschouwen om deze parameter te vullen. Als we nu een specifieke DC hebben in gedachten om te targeten voor een zoekopdracht, kunnen we deze opgeven als de waarde van de -Server parameter.

Na het uitvoeren zal het script een voortgangsbalk weergeven om ons te informeren over de status en hoe lang het zal duren om te voltooien. Nu kunnen we een rapport zien dat wordt gegenereerd na het uitvoeren van het script. Het rapport vertelt ons welke workstations de gebruiker heeft aangemeld tijdens de laatste 15 dagen.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

Begrijpen van de PowerShell Script

Wanneer we de script uitvoeren, controleert het aan het begin of het gebruikersaccount bestaat of niet. Daarom is het duidelijk dat als de ingevoerde gebruikersnaam of ID niet bestaat, we de rest van de scripts niet hoeven uit te voeren.

In het volgende stap, berekenen we de benodigde variabelen en sturen ze naar de DC, samen met de filter die nodig is om de gebeurtenissen voor onze gekozen gebruiker op te vragen. Ten slotte stuurt het script een verzoek naar de eerste domeincontroller in de lijst en de opgevraagde gebeurtenissen met betrekking tot de geselecteerde gebruiker worden opgeslagen in een variabele.

De lijst met opgeslagen gebeurtenissen waarmee het script zal beginnen en de volgende stappen zullen betrekking hebben op het verzamelen van waardevolle gegevens uit de gebeurtenissen. Ten slotte wijst het script de geëxtraheerde gegevens toe aan een variabele, zoals het domein, de DC-naam, inlogtijd en inlogwerkstation.

Uiteindelijk loopt het script door de volgende DC en herhaalt het proces.

Het script zal ons een lijst met computers tonen zodra het contact maakt met de laatste DC en zijn informatie verzamelt.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

Bedankt voor het lezen van Create Active Directory Logon Reports met PowerShell. We zullen besluiten.

Create Active Directory Logon Reports Conclusie

In deze handleiding hebben we geleerd hoe we de essentiële gebeurtenisviewer kunnen gebruiken en deze kunnen combineren met PowerShell-scripts om een lijst van werkstations te vinden waarop een gebruiker heeft ingelogd. Het script bevraagt alle DC’s in een domein, vindt de resultaten en analyseert ze in een leesbaar formaat dat we kunnen exporteren als een rapport. Vergeet niet om te controleren op de vereisten voordat je het verstrekte script uitvoert.

Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/