Professionelles Betriebs- und Referenzhandbuch fuer die Analyse von Passwortalter, Passwortqualitaet, Remediation-Massnahmen und sicherheitsrelevanten Active-Directory-Attributen.
Der AD Password Policy Auditor unterstuetzt Administratoren dabei, Passwort- und Kontorisiken in Active Directory schnell sichtbar zu machen. Das Tool kombiniert drei Blickwinkel: Passwortalter, Passwortqualitaet und sicherheitsrelevante Kontokonfigurationen.
& "C:\Temp\AD-PasswordPolicyAuditor.ps1"
Dieser Tab bewertet, wann Passwoerter zuletzt geaendert wurden. Ziel ist es, Konten mit veralteten oder nie gesetzten Passwoertern schnell zu erkennen.
| Spalte | Bedeutung |
|---|---|
| Selected | Markierung fuer Remediation. |
| SamAccountName | Eindeutiger Anmeldename des Kontos. |
| DisplayName | Anzeigename des Benutzers. |
| Department | Fachbereich laut AD-Attribut. |
| PasswordLastSetStr | Formatiertes Datum der letzten Passwortaenderung oder NIE GESETZT. |
| PasswordAgeDays | Alter des Passworts in Tagen. |
| AppliedPolicy | Wirksame Passwortpolicy des Kontos. |
| Status | KONFORM, VERALTET oder NIE GESETZT. |
| Enabled | Zeigt, ob das Konto aktiviert ist. |
Mit Select all stale koennen veraltete Konten gesammelt fuer die Remediation vorbereitet werden.
Dieser Tab repliziert AD-Passwort-Hashes mit DSInternals und bewertet die Passwortqualitaet. Damit werden Risiken gefunden, die im reinen pwdLastSet-Modell unsichtbar bleiben.
Die Datei WeakPasswords.txt dient als Schwachwortliste. Sie kann grosse Sammlungen wie rockyou, ignis und deutschsprachige Wortlisten enthalten. In produktiven Umgebungen ist auch eine sortierte NTLM-Hash-Liste moeglich.
Das Tool erkennt automatisch, ob es sich um Klartext-Passwoerter oder NTLM-Hashes handelt.
| Spalte | Bedeutung |
|---|---|
| Selected | Markierung fuer Remediation. |
| SamAccountName | Benutzername des Kontos. |
| DisplayName | Anzeigename. |
| Issues | Kommaseparierte Liste gefundener Passwortprobleme. |
| IssueCount | Anzahl der Issues je Konto. |
| Department | AD-Fachbereich, falls vorhanden. |
| Enabled | Aktivierungsstatus des Kontos. |
Die Remediation dient dazu, ausgewaehlte Benutzerkonten in einen kontrollierten Aenderungsprozess zu ueberfuehren.
Alle Schritte werden im Log-Fenster dokumentiert. Bei Notification Only wird eine CSV im Skriptordner erzeugt, typischerweise mit einem Namen wie Notification-YYYYMMDD-HHMMSS.csv.
Nach Ausfuehrung aktualisiert das Tool automatisch den Tab Ergebnis.
Der Ergebnis-Tab zeigt einen Vorher/Nachher-Vergleich mit Fortschrittsbalken und KPI-Karten.
Die Prozentwerte sind projektiert: Bei Analyse und Passwort-Audit wird angezeigt, wie sich die Lage nach Bearbeitung der ausgewaehlten Konten entwickeln wuerde.
Der Sicherheits-Audit bewertet AD-Konten anhand sicherheitskritischer Attribute und Konfigurationen. Die Ergebnisse werden pro Konto konsolidiert und nach Severity gewichtet.
| Spalte | Bedeutung |
|---|---|
| Selected | Markierung fuer Remediation. |
| SamAccountName | Betroffenes Konto. |
| DisplayName | Anzeigename. |
| Severity | OK, LOW, MEDIUM oder CRITICAL. |
| Findings | Kommaseparierte Liste der erkannten Sicherheitsprobleme. |
| Count | Anzahl der Findings pro Konto. |
| Department | Fachbereich. |
| PwdLastSet | Datum der letzten Passwortaenderung. |
| LastLogon | Datum der letzten Anmeldung. |
| Enabled | Ja oder Nein. |
Der Policy-Tab zeigt die Default Domain Policy und vorhandene Fine-Grained Password Policies in einer vergleichbaren Uebersicht.
| Spalte | Bedeutung |
|---|---|
| PolicyName | Name der Policy. |
| Type | Default oder FGPP. |
| Precedence | Reihenfolge der FGPP-Auswertung. |
| MinLength | Minimale Passwortlaenge. |
| HistoryCount | Anzahl historischer Passwoerter. |
| MaxAgeDays | Maximales Passwortalter in Tagen. |
| MinAgeDays | Minimales Passwortalter in Tagen. |
| ComplexityEnabled | Komplexitaetsanforderung aktiv. |
| ReversibleEncryptionEnabled | Speicherung in reversibler Form erlaubt. |
| LockoutThreshold | Fehlversuche bis Sperre. |
| AppliesTo | Betroffene Gruppen oder Benutzerobjekte. |
Die folgende Referenz beschreibt alle 15 Security-Audit Findings im Detail. Jeder Eintrag enthaelt Name, Schweregrad, AD-Attribut, Bedeutung, Risiko, empfohlene Massnahme und ein PowerShell-Beispiel.
Beschreibung: Das Konto kann ohne Passwort existieren oder betrieben werden.
Risiko/Angriffsvektor: Angreifer koennen ein Kennwort-freies oder schwach abgesichertes Konto fuer Initial Access, laterale Bewegung oder Persistenz missbrauchen.
Empfohlene Massnahme: Flag deaktivieren und ein starkes Passwort setzen.
Get-ADUser -Filter * -Properties PasswordNotRequired |
Where-Object { $_.PasswordNotRequired } |
Select-Object SamAccountName, PasswordNotRequired
Set-ADUser -Identity <user> -PasswordNotRequired $false
Beschreibung: Das Passwort wird in einer Form gespeichert, die funktional einem Klartext-Aequivalent entspricht.
Risiko/Angriffsvektor: Bei Directory-Kompromittierung oder Missbrauch privilegierter Rechte sind Passwoerter deutlich leichter wiederherstellbar.
Empfohlene Massnahme: Reversible Speicherung deaktivieren und das Passwort anschliessend neu setzen, damit die alte Speicherung verschwindet.
Get-ADUser -Identity <user> -Properties AllowReversiblePasswordEncryption |
Select-Object SamAccountName, AllowReversiblePasswordEncryption
Set-ADUser -Identity <user> -AllowReversiblePasswordEncryption $false
Set-ADAccountPassword -Identity <user> -Reset -NewPassword (Read-Host -AsSecureString)
Beschreibung: Kerberos-Pre-Authentication ist deaktiviert.
Risiko/Angriffsvektor: Angreifer koennen ohne vorherige Anmeldung AS-REP-Daten anfordern und den Hash offline brute-forcen.
Empfohlene Massnahme: Pre-Authentication aktivieren. Ausnahmen nur dokumentiert und technisch begruendet zulassen.
Get-ADUser -Filter * -Properties DoesNotRequirePreAuth |
Where-Object { $_.DoesNotRequirePreAuth } |
Select-Object SamAccountName, DoesNotRequirePreAuth
Set-ADAccountControl -Identity <user> -DoesNotRequirePreAuth $false
Beschreibung: Das System oder Konto darf sich gegenueber Diensten als jeder Benutzer ausgeben, der sich dort anmeldet.
Risiko/Angriffsvektor: Kompromittierte Delegationsziele ermoeglichen den Missbrauch hochprivilegierter TGTs und damit umfassende laterale Bewegung.
Empfohlene Massnahme: Auf Constrained Delegation oder Resource-Based Constrained Delegation umstellen, falls Delegation wirklich noetig ist.
Get-ADUser -Filter * -Properties TrustedForDelegation |
Where-Object { $_.TrustedForDelegation } |
Select-Object SamAccountName, TrustedForDelegation
Set-ADAccountControl -Identity <user> -TrustedForDelegation $false
Beschreibung: Das Konto nutzt ausschliesslich DES-basierte Kerberos-Verschluesselung.
Risiko/Angriffsvektor: DES ist kryptographisch veraltet und extrem schwach. Offline-Angriffe sind realistisch.
Empfohlene Massnahme: DES deaktivieren und AES128 sowie AES256 aktivieren.
Get-ADUser -Filter * -Properties UseDESKeyOnly, msDS-SupportedEncryptionTypes |
Where-Object { $_.UseDESKeyOnly -or $_.'msDS-SupportedEncryptionTypes' -in 1,2 } |
Select-Object SamAccountName, UseDESKeyOnly, @{Name='Enc';Expression={$_.'msDS-SupportedEncryptionTypes'}}
Set-ADUser -Identity <user> -Replace @{'msDS-SupportedEncryptionTypes'=24}
Beschreibung: Das Konto verwendet nur RC4-HMAC und bietet keine AES-Optionen an.
Risiko/Angriffsvektor: Kerberoasting wird deutlich attraktiver, da RC4-basierte Service-Tickets leichter offline angreifbar sind.
Empfohlene Massnahme: AES128 und AES256 zusaetzlich aktivieren, Alt-Clients pruefen und anschliessend RC4 wenn moeglich abbauen.
Get-ADUser -Filter * -Properties msDS-SupportedEncryptionTypes |
Where-Object {
$v = $_.'msDS-SupportedEncryptionTypes'
($v -band 4) -and -not ($v -band 8) -and -not ($v -band 16)
} |
Select-Object SamAccountName, @{Name='Enc';Expression={$_.'msDS-SupportedEncryptionTypes'}}
Set-ADUser -Identity <user> -Replace @{'msDS-SupportedEncryptionTypes'=28}
Beschreibung: Das Benutzerkonto besitzt mindestens einen SPN und ist damit fuer Service-Tickets adressierbar.
Risiko/Angriffsvektor: Angreifer koennen Kerberos-Service-Tickets anfordern und offline gegen das Service-Passwort cracken.
Empfohlene Massnahme: Managed Service Accounts oder gMSA verwenden. Alternativ ein sehr starkes, langes Passwort von mindestens 25 Zeichen erzwingen.
Get-ADUser -Filter { ServicePrincipalName -like "*" } -Properties ServicePrincipalName |
Select-Object SamAccountName, ServicePrincipalName
Set-ADUser -Identity <user> -ServicePrincipalNames @{Remove='HTTP/app01.contoso.local'}
Beschreibung: Das Konto darf S4U2Self Protocol Transition verwenden.
Risiko/Angriffsvektor: Ein kompromittierter Dienst kann Tickets fuer beliebige Benutzer anfordern und damit Identitaeten missbrauchen.
Empfohlene Massnahme: Nur aktiv lassen, wenn fachlich zwingend. Bevorzugt Constrained Delegation mit klaren Zielsystemen verwenden.
Get-ADUser -Filter * -Properties TrustedToAuthForDelegation |
Where-Object { $_.TrustedToAuthForDelegation } |
Select-Object SamAccountName, TrustedToAuthForDelegation
Set-ADAccountControl -Identity <user> -TrustedToAuthForDelegation $false
Beschreibung: Ein privilegiertes Konto nutzt nicht die Schutzmechanismen der Gruppe Protected Users.
Risiko/Angriffsvektor: Reduzierter Schutz gegen Credential Theft, NTLM-Nutzung und missbrauchbare Langzeit-Tickets.
Empfohlene Massnahme: Eignung pruefen und privilegierte Benutzer wenn moeglich in die Gruppe aufnehmen.
Get-ADUser -Filter { AdminCount -eq 1 } -Properties AdminCount |
Select-Object SamAccountName, AdminCount
Get-ADGroupMember "Protected Users" -Recursive | Select-Object Name, SamAccountName
Add-ADGroupMember "Protected Users" -Members <user>
Beschreibung: Das Konto traegt zusaetzliche historische SIDs aus Migrationen oder frueheren Domaintopologien.
Risiko/Angriffsvektor: SID Injection oder unerwartete Zugriffe auf Altberechtigungen koennen Privilegieneskalation und Persistenz ermoeglichen.
Empfohlene Massnahme: Nach abgeschlossener Migration Alt-SIDs fachlich pruefen und kontrolliert bereinigen.
Get-ADUser -Filter * -Properties SIDHistory |
Where-Object { $_.SIDHistory } |
Select-Object SamAccountName, SIDHistory
# Bereinigung nur nach Test und Freigabe, Beispiel:
Set-ADObject -Identity (Get-ADUser <user>).DistinguishedName -Clear SIDHistory
Beschreibung: Das Passwort des Kontos unterliegt keiner regulaeren Ablaufregel.
Risiko/Angriffsvektor: Kompromittierte Kennwoerter bleiben laenger nutzbar und werden seltener erneuert.
Empfohlene Massnahme: Nur fuer technisch begruendete Ausnahmen verwenden. Sonst Ablauf wieder aktivieren.
Get-ADUser -Filter * -Properties PasswordNeverExpires |
Where-Object { $_.PasswordNeverExpires } |
Select-Object SamAccountName, PasswordNeverExpires
Set-ADUser -Identity <user> -PasswordNeverExpires $false
Beschreibung: Das Konto war oder ist Mitglied einer privilegierten Gruppe. SDProp setzt dadurch Sicherheits-ACLs speziell durch.
Risiko/Angriffsvektor: Nicht mehr privilegierte Alt-Konten koennen uebersehene Sonderrechte oder unerwartete ACL-Effekte behalten.
Empfohlene Massnahme: Privilegierungsstatus pruefen. Wenn das Konto dauerhaft nicht mehr privilegiert ist, nach fachlicher Pruefung AdminCount bereinigen.
Get-ADUser -Filter { AdminCount -eq 1 } -Properties AdminCount, MemberOf |
Select-Object SamAccountName, AdminCount, MemberOf
Set-ADObject -Identity (Get-ADUser <user>).DistinguishedName -Replace @{adminCount=0}
Beschreibung: Das Konto hat seit mehr als 90 Tagen keine Anmeldung mehr gezeigt oder nie geloggt.
Risiko/Angriffsvektor: Unbeobachtete Alt-Konten sind attraktive Ziele fuer Password Spraying, Credential Stuffing oder versteckte Persistenz.
Empfohlene Massnahme: Fachlich pruefen, anschliessend deaktivieren, verschieben oder loeschen.
$limit = (Get-Date).AddDays(-90)
Get-ADUser -Filter * -Properties LastLogonDate, Enabled |
Where-Object { $_.Enabled -and (!$_.LastLogonDate -or $_.LastLogonDate -lt $limit) } |
Select-Object SamAccountName, LastLogonDate, Enabled
Disable-ADAccount -Identity <user>
Beschreibung: Das Konto ist aktuell gesperrt.
Risiko/Angriffsvektor: Eine Sperre kann auf Brute-Force, fehlerhafte Dienste, veraltete gespeicherte Kennwoerter oder Passwort-Spraying hinweisen.
Empfohlene Massnahme: Ursache analysieren, Protokolle pruefen und das Konto nur nach Klaerung entsperren.
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName
Unlock-ADAccount -Identity <user>
Beschreibung: Das Tool zeigt das Alter des krbtgt-Passworts als eigenstaendige Kennzahl an.
Risiko/Angriffsvektor: Ein sehr altes krbtgt-Passwort verlaengert die Lebensdauer erfolgreicher Golden-Ticket-Angriffe. Als Praxisgrenze gelten haeufig mehr als 180 Tage.
Empfohlene Massnahme: Geplanten Doppel-Reset des krbtgt-Passworts mit Replikationswartezeit und Betriebsfreigabe durchfuehren.
Get-ADUser -Identity krbtgt -Properties PasswordLastSet |
Select-Object SamAccountName, PasswordLastSet
Set-ADAccountPassword -Identity krbtgt -Reset -NewPassword (Read-Host -AsSecureString)
# Replikation abwarten, danach ein zweites Mal zuruecksetzen.
Wenn das ActiveDirectory Modul mit URI- oder Internationalisierungsfehlern reagiert, pruefen Sie die PowerShell-Version und die .NET-Umgebung. Das Skript aktiviert IDN- und IRI-Support bereits beim Start, um bekannte AD-Modul-Fehler zu umgehen.
$PSVersionTable.PSVersion
[System.UriParser] | Out-String
Fehlschlaege bei Get-ADDomain, Get-ADUser oder Policy-Abfragen deuten oft auf einen nicht erreichbaren Domain Controller oder ADWS-Probleme hin.
Test-NetConnection <dc-fqdn> -Port 9389
Get-ADDomain -Server <dc-fqdn>
Wenn Tab 2 nicht funktioniert, laden Sie DSInternals manuell oder legen Sie das Modul im Unterordner DSInternals\ ab. Stellen Sie sicher, dass die passende Architektur und PowerShell-Version verwendet wird.
Get-Module -ListAvailable DSInternals
Import-Module "C:\BK_Pass\DSInternals\DSInternals\7.0\DSInternals.psd1" -Force
Fehlen Lese- oder Replikationsrechte, schlagen Analyse, DSInternals oder Remediation fehl. Verwenden Sie bei Bedarf alternative Credentials im Verbindungsdialog.
whoami /groups
Get-ADUser -Identity <user> -Server <dc-fqdn>
| Begriff | Erklaerung |
|---|---|
| AD | Active Directory, der Verzeichnisdienst von Microsoft. |
| RSAT | Remote Server Administration Tools mit AD-Cmdlets fuer PowerShell. |
| FGPP | Fine-Grained Password Policy, passwortbezogene Sonderrichtlinie fuer bestimmte Benutzer oder Gruppen. |
| SPN | Service Principal Name, Identifikator fuer Kerberos-Dienste. |
| Kerberoasting | Offline-Angriff gegen Service-Tickets mit Ziel auf das Service-Passwort. |
| ASREPRoasting | Offline-Angriff auf Konten ohne Kerberos-Pre-Authentication. |
| SIDHistory | Historische SIDs aus Domainen- oder Forest-Migrationen. |
| krbtgt | Spezialkonto fuer Kerberos Ticket Granting Tickets. |
| Dry-Run | Simulierter Lauf ohne produktive AD-Aenderung. |
| Remediation | Geplante technische Massnahme zur Risikoreduktion. |