vchalup - stock.adobe.com

Active Directory: Inaktive oder gesperrte Konten aufspüren

Inaktive und gesperrte Konten im Active Directory gefährden die Sicherheit und beeinträchtigen die Übersicht. Per PowerShell und Tools können IT-Teams diese ermitteln.

Inaktive und gesperrte Benutzerkonten stellen ein großes Risiko für das Active Directory und komplette Netzwerke dar. Denn Angreifer können diese Konten nutzen, und sich an der Umgebung nahezu unentdeckt anmelden. Daher sollten Admins regelmäßig überprüfen, welche Benutzer nicht aktiv sein, welche Konten niemand nutzt, und welche Konten gesperrt sind, zum Beispiel wegen zu vieler fehlerhafter Anmeldeversuche. Es ist auch möglich diese Benutzerkonten in eine bestimmte Organisationseinheit (OU) zu verschieben.

Inaktive und gesperrte Konten im Active Directory mit der PowerShell finden

Sollen alle nicht aktiven Benutzerkonten angezeigt werden, ist der folgende Befehl in der PowerShell sinnvoll:

Search-ADAccount -UsersOnly -AccountInactive

 

Interessant ist aber auch das Definieren von Zeitspannen, die steuern, wann ein Konto als inaktiv angesehen wird. Dazu kommt das Cmdlet New-Timespan zum Einsatz. Über dieses lässt sich ein Zeitraum als Variable definieren, zum Beispiel 120 Tage:

$time = New-Timespan -Days 120

 

Um jetzt diesen Zeitraum zu nutzen, um inaktive Konten zu finden, kann folgender Befehl genutzt werde:

Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $time

 

Das geht natürlich auch ohne den Umweg einer Variablen, zum Beispiel mit:

Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly

 

Die Anzeige lässt sich gleich auch noch so formatieren, damit die Darstellung übersichtlicher wird:

Search-ADAccount -UsersOnly -AccountInactive | Get-ADuser | Sort LastLogOnDate | Select Name,Department,Title,DistinguishedName

 

Um die Suche auf eine OU anzugrenzen, kommt zum Beispiel folgender Befehl zum Einsatz:

Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly -SearchBase "OU=Users,DC=joos,DC=int"

 

Per PowerShell kann man inaktive Benutzer- und Computerkonten im Active Directory aufspüren.
Abbildung 1: Per PowerShell kann man inaktive Benutzer- und Computerkonten im Active Directory aufspüren.

Neben Benutzerkonten stellen inaktive ebenfalls Computerkonten ein Risiko dar. Diese lassen sich gleichfalls per PowerShell identifizieren.

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate

 

Auf dem gleichen Weg lassen sich auch deaktivierte Benutzerkonten im Active Directory direkt anzeigen:

Search-ADAccount -AccountDisabled -UsersOnly | Select -Property Name,DistinguishedName

 

Gesperrte Konten lassen sich mit dem folgenden Befehl finden:

Search-ADAccount -LockedOut

 

Die Suche kann man gegebenenfalls auf eine OU begrenzen, zum Beispiel mit:

Search-ADAccount -LockedOut -SearchBase "OU=Users,DC=joos,DC=int"

 

Die Ergebnisse dieser Cmdlets können wiederum parallel zum Einsatz kommen, um alle Konten zu sammeln, die seit einiger Zeit inaktiv oder die gesperrt sind. Diese Daten lassen sich in PowerShell-Skripten weiter nutzen. Ein Beispielskript kann folgendermaßen aussehen:

# Laden des Active Directory Moduls

Import-Module ActiveDirectory

# Festlegen der OrganisationsEinheit (OU) und der Domäne

$destinationOU = "OU=InactiveUsers,DC=joos,DC=int"

# Pfad für das Protokoll

$logPath = "C:\path\to\log.txt"

# Abrufen der inaktiven Konten aus den letzten 90 Tagen

$inactiveAccounts = Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly

# Abrufen der gesperrten Konten

$lockedOutAccounts = Search-ADAccount -LockedOut

# Alle inaktiven Konten in die gewünschte OU verschieben und protokollieren

foreach ($account in $inactiveAccounts) {

    Move-ADObject $account.DistinguishedName -TargetPath $destinationOU

    Add-Content -Path $logPath -Value "Moved inactive account: $($account.SamAccountName)"

}

# Alle gesperrten Konten in die gewünschte OU verschieben und protokollieren

foreach ($account in $lockedOutAccounts) {

    Move-ADObject $account.DistinguishedName -TargetPath $destinationOU

    Add-Content -Path $logPath -Value "Moved locked-out account: $($account.SamAccountName)"

}

Sollen die entsprechenden Konten nicht gleich verschoben werden, so kann man erst einmal einen Bericht anfertigen, zum Beispiel mit einer CSV-Datei:

# Laden des Active Directory Moduls

Import-Module ActiveDirectory

# Pfad für die CSV-Datei

$csvPath = "C:\path\to\inactive_lockedout_report.csv"

# Abrufen der inaktiven Konten aus den letzten 180 Tagen (6 Monate)

$inactiveAccounts = Search-ADAccount -AccountInactive -TimeSpan 180.00:00:00 -UsersOnly | Select-Object SamAccountName, DistinguishedName, LastLogonDate

# Abrufen der gesperrten Konten

$lockedOutAccounts = Search-ADAccount -LockedOut | Select-Object SamAccountName, DistinguishedName, LastLogonDate

# Kombinieren der beiden Listen

$combinedAccounts = $inactiveAccounts + $lockedOutAccounts

# Entfernen von Duplikaten (wenn ein Konto sowohl inaktiv als auch gesperrt ist)

$uniqueAccounts = $combinedAccounts | Sort-Object SamAccountName -Unique

# Ergebnisse in CSV exportieren

$uniqueAccounts | Export-Csv -Path $csvPath -NoTypeInformation

Write-Host "Bericht erstellt und gespeichert unter $csvPath"

Inaktive Benutzer und Computer mit Dsquery in der Befehlszeile finden

Eine Alternative zur Suche der inaktiven Konten in der PowerShell ist das Befehlszeilentool dsquery. Dieses lässt sich selbstredend auch in der PowerShell nutzen, in Skripten parallel mit den anderen Cmdlets:

dsquery user -inactive <Anzahl der Wochen>

 

Mit Computerkonten funktioniert dies entsprechend:

dsquery computer -inactive <Anzahl der Wochen>

 

Gibt es Benutzerkonten im Active Directory, die noch nie genutzt wurden?

In der PowerShell lassen sich auch alle Benutzerkonten angezeigt werden, mit denen sich noch nie ein Benutzer angemeldet hat. Diese Konten sollten mindestens deaktiviert, besser gleich gelöscht werde:

Get-ADUser -Filter {(lastlogontimestamp -notlike "*")} | Select Name,DistinguishedName

 

Generell kann es sinnvoll sein zu überprüfen, wann sich Benutzer oder Computer zum letzten Mal am Active Directory angemeldet haben. Das geht zum Beispiel mit:

Get-ADUser "joost" -Properties LastLogonDate | FT -Property Name, LastLogonDate -A

Get-ADComputer -Filter * -Properties * | Sort LastLogonDate | FT Name, LastLogonDate

In diesem Zusammenhang gibt es auch fertige PowerShell-Skripte, die sich nutzen und anpassen lassen, zum Beispiel GetInactiveComputer.ps1.

Kostenlose Tools wie AD Tidy können dabei unterstützen, inaktive Konten aufzufinden.
Abbildung 2: Kostenlose Tools wie AD Tidy können dabei unterstützen, inaktive Konten aufzufinden.

Inaktive Konten mit kostenlosen Tools finden

Neben der PowerShell lassen sich auch kostenlose Tools nutzen, um inaktive Konten zu finden. Ein prominentes Beispiel dafür sind die kostenlosen Free Active Directory Tools von ManageEngine und der darin enthaltene Last Logon Reporter.Mit dem kostenlosen Tool AD Tidy lassen sich im Active Directory die inaktiven Benutzer- und Computerkonten auslesen.

Erfahren Sie mehr über Identity and Access Management (IAM)