AD User leeres Passwort
Welcher User verwendet ein leeres Passwort?
Wieso ist das Thema relevant?
Leere Passwörter in einer Umgebung stellen ein hohes Sicherheitsrisiko dar, können aber mit Hilfe der PowerShell nicht überprüft werden. Passwörter sind verschlüsselt, auch leere Passwörter und können nicht ausgelesen werden.
Natürlich gibt es Gruppenrichtlinien, um leere Passwörter zu verbieten, diese können aber mit dem Eintrag PasswordNotRequired im Active Directory Objekt ausgehebelt werden. Falls also keine Passwort-Richtlinien eingerichtet sind oder der genannte Eintrag bei einem oder mehreren Usern gesetzt ist, können leere Passwörter die Domäne unsicher machen.
Wie funktioniert das Skript?
Das Skript führt die Methode ChangePassword -altes Passwort -neues Passwort auf alle User-Accounts in der Domäne aus und gibt die User zurück, welche das Passwort ändern konnten. Wenn ein User das Passwort ändern kann, kann er sich auch mit dem leeren Passwort anmelden. Dies wird durch eine Fehlermeldung deutlich, auf die später noch weiter eingegangen werden. Damit das Skript nicht bei jedem User abbricht, welcher ein Passwort enthält, verwenden wir die Funktion On Error Resume Next.
Um über die Objekte des Active Directorys zu iterieren, benötigen wir ein Array mit allen Elementen und natürlich einer leeren String-Konstanten strPassword, die mit dem gesetzten Passwort verglichen werden soll. Außerdem verwenden wir die Konstante auch für das neue Passwort, da wir die Passwörter nur überprüfen, nicht aber ändern möchten.
Als nächsten Schritt erstellen wir eine Instanz des Wscript.Network Objekts. Mit diesem kann man auf Objekte einer bestehenden Umgebung zugreifen. Für das Array benötigen wir alle Accounts aus dem Active Directory, das mit der Codezeile Set colAccounts = GetObject("WinNT://" & strComputer) realisiert werden kann. Um nur über User die Schleife laufen zu lassen, filtern wir die Ausgabe mit in der Zeile colAccounts.Filter = Array("user").
Wir überprüfen die Ausgaben nach zwei Fehlercodes:
0 : Das Passwort konnte erfolgreich gesetzt werden
-2147022651 : Das Passwort entspricht nicht den Richtlinien der Domäne
Weitere Fehlercodes, die auftreten können:
-2147024810 : Das eingegebene Passwort ist nicht korrekt
Die gefundenen User lassen wir mit Wscript.Echo noch ausgeben und erhalten somit im Ganzen folgendes Skript: On Error Resume Next
Set objNetwork = CreateObject("Wscript.Network") strComputer = objNetwork.ComputerName strPassword = "" Set colAccounts = GetObject("WinNT://" & strComputer) colAccounts.Filter = Array("user")
For Each objUser In colAccounts objUser.ChangePassword strPassword, strPassword If Err = 0 or Err = -2147023569 Then Wscript.Echo objUser.Name & " is using a blank password." End If Err.Clear
Next
Speichert man das Skript als vbs-Datei ab und führt es auf dem Domain Controller aus, bekommt man nun alle User ausgegeben, die sich mit dem leeren Passwort anmelden können. Das Skript lässt sich allerdings nur auf dem Domain Controller ausführen. Für eine Remote-Ausführung, müsste das Skript so modifiziert werden, dass es über eine LDAP Anfrage mit dem Domain-Controller kommuniziert.
- ASP.NET 1
- Active Directory 41
- Administration Tools 1
- Allgemein 60
- Backup 4
- ChatBots 5
- Configuration Manager 3
- DNS 1
- Data Protection Manager 1
- Deployment 24
- Endpoint Protection 1
- Exchange Server 62
- Gruppenrichtlinien 4
- Hyper-V 18
- Intune 1
- Konferenz 1
- Künstliche Intelligenz 7
- Linux 3
- Microsoft Office 11
- Microsoft Teams 1
- Office 365 11
- Office Web App Server 1
- Powershell 21
- Remote Desktop Server 1
- Remote Server 1
- SQL Server 8
- Sharepoint Server 12
- Sicherheit 1
- System Center 10
- Training 1
- Verschlüsselung 2
- Virtual Machine Manager 1
- Visual Studio 1
- WSUS 7
- Windows 10 12
- Windows 8 9
- Windows Azure 4
- Windows Client 1
- Windows Server 24
- Windows Server 2012 7
- Windows Server 2012R2 15
- Windows Server 2016 7
- Windows Server 2019 2
- Windows Server 2022 1
- Zertifikate 4