Erstellen von Active Directory-Anmeldeberichten mit PowerShell

Erstellen Sie Active Directory-Anmeldeberichte mit PowerShell. Wie wir wissen, ist die Überwachung in einer Active Directory (AD)-Umgebung für die Sicherheit entscheidend. Es ist wichtig herauszufinden, was der Benutzer getan hat und auf welchem System er sich angemeldet hat. Daher ist eine der wichtigsten Aufgaben, mit denen sich die meisten Administratoren heutzutage befassen, herauszufinden, wo sich ein Benutzer angemeldet hat. Dieser Artikel führt Sie Schritt für Schritt durch die Nutzung des integrierten Ereignisbetrachters auf Domänencontrollern (DC), um herauszufinden, wo sich ein Benutzer angemeldet hat, und die Erstellung eines umfassenden Anmelde-Berichts mithilfe von PowerShell.

Also, lassen Sie uns mit dem Artikel „Erstellen von Active Directory-Anmeldeberichten mit PowerShell“ fortfahren.

Erstellen von Active Directory-Anmeldeberichten

Voraussetzungen

Da wir den Ereignisbetrachter verwenden und die Ereignisse tagelang überwachen, müssen wir sicherstellen, dass die Größe unserer Ereignisprotokolle ausreicht. Obwohl wir diese Einstellungen möglicherweise bereits aktiviert haben, werden wir sie erneut überprüfen, wenn andere Personen die Größe des Ereignisprotokolls erhöhen müssen.

Wenn wir zuvor keine Konfiguration geändert haben, sollte die Standardgröße unserer Ereignisprotokolle etwa 64 MB betragen. Eine Größenänderung kann jedoch erforderlich sein, insbesondere wenn wir es mit mehreren DCs in unserer Umgebung zu tun haben. Wenn wir beispielsweise Audit-Anmeldungen mehrere Tage lang verfolgen möchten, benötigen wir im Ereignisbetrachter weit mehr Speicherplatz.

Erstellen einer Gruppenrichtlinie

1. Als ersten Schritt zur Vorbereitung der Umgebung erstellen wir ein Gruppenrichtlinienobjekt (GPO), das die Einstellungen für die Ereignisprotokollgröße enthält. Öffnen wir die Gruppenrichtlinien-Verwaltungskonsole (GPMC) und erstellen ein GPO. Um die Konsole zu öffnen, suchen Sie nach Gruppenrichtlinien oder geben Sie gpmc.msc im Ausführen-Fenster (Strg+R) ein.

2. Im Navigationsbereich erweitern Sie Forest: ForestName, erweitern Sie Domains, erweitern Sie DomainName und klicken Sie dann auf Gruppenrichtlinienobjekte. Klicken Sie anschließend auf Aktion und dann auf Neu.

3. Lokalisieren Sie den folgenden Pfad innerhalb des neu erstellten GPO:

4. Ändern Sie die Größe des Sicherheits-Ereignisses basierend auf unseren Umgebungen und Anforderungen. Darüber hinaus ist es möglich, Einstellungen auf maximal 4 GB zu konfigurieren, wenn es keine Bedenken hinsichtlich des Festplattenspeichers und der Leistung gibt.

5. Der folgende Schritt ist optional, wenn Domänencontroller keine Firewall-Einstellungen haben. Es muss jedoch möglich sein, Ereignisprotokolle von mehreren Domänencontrollern und möglicherweise mehreren Standorten abzufragen. Daher ist es ratsam, sicherzustellen, dass Remote-Ereignis-Protokollüberwachung über die Firewall aktiviert ist.

Leider ist es nur möglich, einige Details zur Konfiguration der Firewall-Einstellungen zu erläutern. Das Bild unten zeigt jedoch alle Einstellungen, die erforderlich sind, um die Remote-Ereignisprotokollüberwachung auf unseren DomänenControllern zu aktivieren.

6. Verbinden Sie nun das gerade erstellte GPO mit der OU Domain Controller und warten Sie, bis einige Ereignisse auftreten. Das Ereignis hängt von der Umgebung ab, und wir können sofort mit der Abfrage von Audits beginnen oder ein paar Tage warten. Jetzt, da wir unsere Protokollierung korrekt eingerichtet haben, können wir damit fortfahren, das PowerShell-Skript auszuführen, das im nächsten Abschnitt des Artikels erläutert wird.

Als nächstes kommt die Erstellung von Active Directory-Anmeldeberichten mit PowerShell, der Hauptteil des Artikel-Titels. Bitte lesen Sie weiter.

Erstellen Sie AD-Anmeldeberichte mit PowerShell

Um zu beginnen, laden Sie das Skript herunter und kopieren Sie es in ein Verzeichnis oder einen Ordner. Alternativ können Sie, wenn Sie git installiert haben, den folgenden Befehl ausführen.

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

Das Skript verwendet das ActiveDirectory -Modul, aber wir müssen es nicht manuell installieren, da das Skript das Modul in unserem System überprüft. Sobald es heruntergeladen wurde, starten Sie PowerShell und navigieren Sie zum heruntergeladenen Skriptordner oder -laufwerk.

Wenn wir die heruntergeladene Datei bearbeiten, sehen wir vier Hauptfunktionen. Diese vier Hauptfunktionen sind Param, Begin, Process und Ende.

Erklärung des PowerShell-Skripts

Der Param-Abschnitt enthält die für die Ausführung des Skripts erforderlichen Parameter. Wie im nachstehenden Codeblock gezeigt, benötigen wir drei Parameter, damit das Skript funktioniert. Wir werden diese Parameter später erklären.

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

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

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

Als bewährte Praxis sollten Variablen und allgemeine Informationen im Begin-Abschnitt platziert werden, um eine Überfüllung des Hauptteils des Skripts zu vermeiden.

[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

Das Begin-Skript formuliert auch einen primären Filter zum Abfragen des Ereignisprotokolls. Anschließend sendet das Skript diesen Filter an jeden DC, um Informationen zu sammeln. Wie wir in diesen Zeilen sehen können, gibt es einige zuvor diskutierte Variablen wie $UPN und $User.

[xml]$FilterXML = @"


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


"@

Der Abschnitt Prozess ist die wesentliche Funktion, in der das Skript nach den Daten abfragt, um einen Bericht zu generieren. Der folgende Codeblock ist der Befehl foreach, der jedes Mal ausgeführt wird, wenn wir uns bei einem anderen DC anmelden, um Daten abzufragen.

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

Zuerst sammeln wir Ereignisse auf unserem ersten DC. Dann ist der nächste Schritt, wertvolle Informationen aus jedem Ereignis zu extrahieren und sie in einem Objekt zu speichern, bevor wir zum nächsten Ereignis übergehen. Sobald der erste DC abgeschlossen ist, wechselt das Skript zu einem anderen DC und wiederholt den Vorgang.

Schließlich zeigt der Abschnitt Ende den endgültig generierten Bericht an.

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
}

Um das PowerShell-Skript auszuführen,

öffnen Sie zunächst PowerShell und geben Sie den folgenden Befehl ein, um das Cmdlet in den Speicher zu laden.Wenn wir die Eingabetaste drücken, kann ein Fehler auftreten, der darauf hinweist, dass die Ausführung des Skripts aufgrund der PowerShell-Ausführungsrichtlinie deaktiviert ist, oder es tritt kein Fehler auf. Im Falle eines Fehlers öffnen Sie eine PowerShell-Konsole mit administrativen Rechten, geben Sie die folgenden Befehle ein, um die Ausführung von Skripts zuzulassen, und wiederholen Sie dann den vorherigen Befehl.

. .\Get-UserLastLogon.ps1

Wenn wir die Eingabetaste drücken, kann es zu einem Fehler kommen, der besagt, dass die Ausführung des Skripts aufgrund der PowerShell-Ausführungsrichtlinie deaktiviert ist, oder es tritt kein Fehler auf. Bei einem Fehler öffnen Sie eine PowerShell-Konsole mit Administratorrechten, geben die folgenden Befehle ein, um die Skriptausführung zuzulassen, und wiederholen dann den vorherigen Befehl.

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

Da das Skript nun vollständig geladen ist, betrachten wir es als Beispiel, um herauszufinden, auf welchen Arbeitsstationen der Benutzer in den letzten 15 Tagen angemeldet war. Geben Sie zunächst den Benutzernamen mit dem –User Parameter und den Zeitraum mit dem –Days Parameter ein und drücken Sie die Eingabetaste

Get-UserLastLogon -User marion -Days 15

Wie Sie sich vielleicht erinnern, haben wir noch einen anderen Parameter namens -Server Parameter. Wenn wir keinen Wert für den -Server Parameter angeben, werden wir alle Domänencontroller als diesen Parameter betrachten. Nun, wenn wir einen bestimmten DC im Auge haben, um für eine Suchanfrage zu zielen, können wir ihn als Wert des -Server Parameters angeben.

Nach dem Ausführen zeigt das Skript uns einen Fortschrittsbalken an, der uns über seinen Status und wie lange es dauern wird, bis es abgeschlossen ist, informiert. Jetzt können wir einen Bericht sehen, der nach dem Ausführen des Skripts generiert wurde. Der Bericht sagt uns, auf welchen Arbeitsstationen der Benutzer in den letzten 15 Tagen angemeldet war.

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

Verstehen des PowerShell-Skripts

Wenn wir das Skript ausführen, prüft es zu Beginn, ob das Benutzerkonto existiert oder nicht. Daher ist es offensichtlich, dass wenn der eingegebene Benutzername oder die ID nicht existiert, wir das restliche Skript nicht ausführen müssen.

Schrittweise berechnen wir die benötigten Variablen und senden sie zusammen mit dem Filter zum Abfragen der Ereignisse für unseren ausgewählten Benutzer an den DC. Schließlich sendet das Skript eine Anfrage an den ersten Domänencontroller in der Liste, und die abgefragten Ereignisse im Zusammenhang mit dem ausgewählten Benutzer werden in einer Variablen gespeichert.

Die Liste der gespeicherten Ereignisse, mit denen das Skript beginnt, und die folgenden Schritte beinhalten das Sammeln wertvoller Daten aus den Ereignissen. Schließlich weist das Skript die extrahierten Daten einer Variablen zu, wie zum Beispiel dem Domain, dem DC-Namen, dem Anmeldezeitpunkt und dem Anmeldearbeitsplatz.

Am Ende durchläuft das Skript den nächsten DC und wiederholt den Vorgang.

Das Skript zeigt uns eine Liste von Computern, sobald es den letzten DC kontaktiert und dessen Informationen erfasst hat.

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

Vielen Dank, dass Sie sich „Create Active Directory Logon Reports with PowerShell“ angesehen haben. Wir werden abschließen.

Schlussfolgerung zu „Create Active Directory Logon Reports“

In diesem Leitfaden haben wir gelernt, wie man den wichtigen Ereignisbetrachter verwendet und ihn mit PowerShell-Skripten kombiniert, um eine Liste von Arbeitsstationen zu finden, an denen sich ein Benutzer angemeldet hat. Das Skript fragt alle DCs in einer Domäne ab, findet die Ergebnisse und analysiert sie in einem lesbaren Format, das wir als Bericht exportieren können. Denken Sie daran, vor dem Ausführen des bereitgestellten Skripts die Voraussetzungen zu überprüfen.

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