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"
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.
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.