Passwort-Regeln prüfen
Wie können wir Passwort-Regeln überprüfen? Erfüllen sie die Anforderungen an die Komplexität? Dieser Artikel erläutert verschiedene Methoden zur Überprüfung der Einhaltung von Passwortrichtlinien in einer Active Directory Domäne.
Als praktisches Beispiel ist die Implementierung eines Self-Service-Portals zur Passwortänderung, um die Einhaltung der Richtlinien zu gewährleisten und den Benutzern eine einfache Möglichkeit zur Verwaltung ihrer Passwörter zu bieten.
Index
Warum gibt es Passwort-Regeln?
Einfachheit und Sicherheit, das sind zwei Schlagwörter, die wahrscheinlich die wenigsten in einem Satz nennen würden. Die Notwendigkeit von sicheren Methoden zur Prüfung eines autorisierten Zugriffs auf IT-Ressourcen ist sicherlich unbestreitbar. Im Grunde ist heute jede Ressource mit IT verbunden oder durch IT abgesichert. Es wird nicht mehr nur der Zugriff auf Dateien in der virtuellen Welt geschützt, sondern es bezieht sich auch auf die reale Welt:
- Drucker,
- Räume,
- Fahrzeuge,
- Produktionsmaschinen usw.
Es liegt in der Natur der Sache, dass die Sicherheitsmethoden meistens umständlich sind, denn nur so können sie erfolgreich unberechtigten Zugriff abwehren. Dabei sollten sie aber nur so kompliziert wie notwendig sein, ansonsten findet der Anwender Methoden, es sich – und damit dem Angreifer – einfacher zu gestalten, was die Sicherheitsbemühungen wieder konterkarieren würde.
Bei der Vereinfachung hilft auch der technologische Fortschritt. Es existieren heute viele Methoden, um die Authentifizierung des Anwenders unkompliziert zu gestalten. Die Bekanntesten sind biometrische Verfahren wie Fingerabdruck und Gesichtserkennung.
So fortschrittlich diese Methoden sind, sie kollidieren aber in den meisten Organisationen mit der Realität. Es wird dafür zusätzliche Hardware und Kompatibilität zu entsprechenden Protokollen benötigt. Eine große Anzahl von Software kann dies aber noch nicht abdecken. Daher ist die grundlegendste Authentifizierungsmethode, das Passwort, immer noch die Brot-und-Butter-Methode.
Damit das Passwort trotzdem so sicher wie möglich ist, müssen verschiedene Komplexitätsregeln eingehalten werden, die es einem Angreifer so schwer wie möglich machen, das Passwort zu erraten. Die Rahmenbedienungen dafür sind:
- eine Passwortmindestlänge,
- die Einzigartigkeit und
- die Verwendung vieler unterschiedlicher Zeichenarten.
Passwörter sollten ebenfalls regelmäßig geändert werden. Da dies die Anwender meistens stört und sie daher dazu tendieren, eine Nummer am Ende des Passwortes hochzuzählen, wird ebenfalls die Password History geprüft.
Hilfe für die Anwender
Da wir es den Anwender gerne so einfach wie möglich machen wollen, möchten wir sie auch bei der lästigen aber notwendigen Aufgabe zur regelmäßigen Passwortänderung unterstützen.
Microsoft ist hierbei leider nicht sehr hilfreich. Haben wir unser neues Passwort nicht gemäß den Komplexitätsregeln entworfen, gibt uns Windows nur eine sehr lapidare Antwort:
Diese Meldung ist für den Anwender nicht aussagefähig, da sie keinen Hinweis enthält, welche Eingaben im Passwort noch fehlen. Wir möchten als Hilfestellung ein Self-Service Password-Change Portal erstellen. Das Portal soll den Nutzer vor der Übermittlung des Passwortes an die Active Directory Domäne hinweisen, was noch fehlt, damit das Passwort den Regeln entspricht.
Welche Passwort-Regeln kennt das Active Directory?
Bevor wir uns mit dem Portal befassen, müssen wir erst einmal bestimmen, welche Regeln bzw. Richtlinien es gibt und wie sie konfiguriert werden können.
Die Standard-Passwortrichtline wird auf alle Nutzerkonten in der Domäne angewandt und wird in der Standard-Domain-Richtline definiert. Die Einstellungen der Group Policies können wir im Group Management Editor konfigurierten. Dazu öffnen wir die Administrative Tools.
Dort gehen wir zur Default Domain Policy und öffnen die Bearbeitungsansicht.
In der Bearbeitungsansicht der Default Domain Policy findet man die Passwort-Einstellungen unter “Computer Configuration\Policies\Windows Settings\Security Settings\Account Policies\Password Policy”.
Mit dem PowerShell Kommando Get-ADDefaultDomainPasswordPolicy kann man ebenfalls die aktuellen Einstellungen schnell abrufen.
Zur Vollständigkeit sei erwähnt, dass ebenfalls spezifische Passwortrichtlinien für eine bestimmte Gruppe von Nutzern, z.B. Admins, definiert werden können. Dafür verwendet man die Fine Grained Password Policy. Dies ist aber ein Thema für einen separaten Artikel.
Einstellungen der Passwortrichtlinie im Active Directory
Nachdem wir herausgefunden haben, wo die Richtlinien konfiguriert werden können, schauen wir uns jetzt im Detail an, was wir für Einstellungen vornehmen können.
Regel |
Bedeutung |
Enforce password history |
Wie viele Passwortänderungen sollen für ein Passwort gespeichert werden, bis es wiederverwendet werden kann. Ist der Wert 24, so kann ein Passwort erst nach 24 Änderungen wiederverwendet werden. |
Maximum password age |
Wie viele Tage kann ein Passwort maximal unverändert bleiben. |
Minimum password age |
Wie viele Tage muss ein Passwort bestehen, damit es wieder geändert werden kann. |
Minimum password length |
Wie lang muss ein neues Passwort mindestens sein. |
Password must meet complexity requirements |
Das Passwort muss den Komplexitätsanforderungen genügen. |
Store password using reversible encryption |
Diese Einstellungen sollte in den meisten Fällen nicht aktiviert werden, da es faktisch mit der Speicherung des Passwort in Plain-Text gleichzusetzen ist. In diesem Artikel wollen wir daher nicht weiter darauf eingehen. |
Bedeutung der Komplexitätsanforderungen
Auf die Komplexitätsregeln für ein Passwort möchte ich genauer eingehen, da sie wesentlich für die Qualität eines Passwortes sind. Die Komplexitätsregeln sollen dafür sorgen, dass ein Passwort möglichst zufällig und stark abweichend von einem normalen Text sind. Das soll es einem Angreifer erschweren, das Passwort zu erraten oder mittels Wörterbuchattacken herauszufinden.
Folgende Regeln werden über die Group Policy im Active Directory geprüft:
- Der Nutzerkontoname (samAccountName) darf nicht enthalten sein
- Keine Teile des Nutzervollnamens (cn, name) dürfen enthalten sein. Das ist gegeben, wenn mehr als 2 folgende Buchstaben des Namens enthalten sind.
Z.B. Frank Anger darf kein Passwort ‚P@fraKle123!‘ haben. - Das Passwort muss mindestens 6 Zeichen lang sein.
- Im Passwort müssen mindestens 3 der folgenden Zeichenarten enthalten sein:
- Großbuchstaben A-Z
- Kleinbuchstaben a-z
- Ziffern 0-9
- Sonderzeichen: ‚-!“#$%&()*,./:;?@[]^_`{|}~+<=>
Die Regeln werden bei jeder Passwortänderung geprüft.
Methoden zur Prüfung der Passwort-Regeln
Nachdem wir festgestellt haben, was gute Passwort-Regeln sind, können wir uns an die Methoden für die Prüfung der Einhaltung dieser Regeln setzen.
Wie eingangs erwähnt, ist uns Windows dabei keine große Hilfe, da es keine entsprechenden APIs anbietet. Die einzige sinnvolle Methode ist die NetValidatePasswordPolicy-Funktion (https://learn.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netvalidatepasswordpolicy).
Diese Methode dient hauptsächlich zur Prüfung, ob Ihre eigenen verwalteten Passwörter den Richtlinien der Active Directory Password Policy entsprechen. Zum Beispiel kann ein SQL Server diese Funktion für SQL Server Authentifizierung nutzen. Ein Implementierungsbeispiel ist im folgenden Link angegeben.
pinvoke.net: NetValidatePasswordPolicy (advapi32)
Wie man im zuvor angegeben Link sehen kann, ist diese Methode einigermaßen komplex mit Programmierkenntnissen umzusetzen. Am Ende liefert sie uns aber auch nur die Information, ob das Passwort den Komplexitätsregeln entspricht oder nicht. Ein aussagefähiges Feedback fehlt.
Daher bleibt uns nur die Möglichkeit, die Passwortprüfung selbst umzusetzen und dabei auf die Einhaltung jeder Regel separat zu prüfen. In diesem Artikel verwende ich PowerShell, um einige Implementierungsbeispiele darzulegen.
Passwort-Regeln prüfen mit PowerShell
In PowerShell können wir die Eingabe auf verschiedene Regeln prüfen und dabei gleichzeitig auch unsere eigenen Qualitätskriterien einbringen.
Eine gute Möglichkeit ist die Verwendung von regulären Ausdrücken mit der Matches-Methode. Damit können wir auf beliebige Textinhalte prüfen. Im folgenden wollen wir sehen, wie für jedes Komplexitätskriterium eine Prüfmethode aussehen könnte.
Prüfung der Passwortlänge
1 2 3 4 5 6 7 8 9 10 |
$length = $password.length if( $length -lt 6 ) { Write-Host “Password need at least 6 characters.” } if( $length -gt 20 ) { Write-Host “The password must not contain more than 20 characters.“ } |
Prüfung der Mindestanzahl von Großbuchstaben
1 2 3 4 5 6 7 |
$uppercaseCount = [regex]::Matches($password, “[A-Z]").Count if( $uppercaseCount –lt 3 ) { Write-Host “Password need at least 3 uppercase characters.” } |
Prüfung der Mindestanzahl von Kleinbuchstaben
1 2 3 4 5 6 7 |
$lowercaseCount = [regex]::Matches($password, “[a-z]").Count if( $lowercaseCount –lt 3 ) { Write-Host “Password need at least 3 lowercase characters.” } |
Prüfung der Mindestanzahl von Ziffern
1 2 3 4 5 6 7 |
$digitCount = [regex]::Matches($password, “\d").Count if( $digitCount –lt 3 ) { Write-Host “Password need at least 3 digits.” } |
Prüfung der Mindestanzahl von Sonderzeichen
1 2 3 4 5 6 7 8 |
$specialCharCount = [regex]::Matches($password, “[-!`"#$%&()*,./:;?@[\]^_`{|}~+<=>]").Count if( $ specialCharCount –lt 3 ) { Write-Host “Password need at least 3 special characters.” } |
Prüfung auf verbotene Wörter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
$bannedWords = @($samAccountName, $displayName, $sn, $givenName) $bannedWordsSplit = @() $tab = [char]9 foreach ($word in $bannedWords) { $wordSplit = $word.Split(@(' ', ',', '.', '_', ';', $tab)) $bannedWordsSplit += $wordSplit; } foreach ($word in $bannedWordsSplit) { $passwordTest = $password.ToLowerInvariant() $wordTest = $word.Trim().ToLowerInvariant() if($passwordTest.Contains($wordTest)) { Write-Host “The password must not contain the word '$word'.“ } } |
Prüfung auf Teile aus dem Nutzernamen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
function Contains-Parts { param ( [string]$password, [string]$bannedWord ) $maxLength = 2 $testPassword = $password.ToLowerInvariant() $testBannedWord = $bannedWord.ToLowerInvariant() for ($i = 0; $i -le ($testBannedWord.length - $maxLength); $i++) { $bannedWortPart = $testBannedWord.Substring($i, $maxLength) if ($testPassword.Contains($bannedWortPart)) { return $true } } return $false } $bannedWords = @($cn, $displayName, $samAccountName) foreach ($word in $bannedWords) { if(Contains-Parts -password $password -bannedWord $word) { Write-Host “The password must not contain parts of the word '$word'.“ } } |
Prüfen der Password History
Die Einhaltung der Passworthistorie können wir leider nicht so einfach über eine eigene Funktion prüfen. Die Passworthistorie eines Nutzers ist nicht über eine API prüfbar.
Wir können aber nach erfolgreicher Prüfung der Passwortqualität, die Historie über das PowerShell-Kommando Set-ADAccountPassword sicherstellen lassen.
Es ist wichtig, dass dafür nicht der Schalter -Reset verwendet wird, denn dieser umgeht die Password-History-Prüfung.
Set-ADAccountPassword -Identity $user -OldPassword $oldPassword -NewPassword $newPassword
Das Password-Change-Portal
Mit Hilfe der PowerShell-Funktionen haben wir jetzt alle Werkzeuge zur Hand, um ein Password-Change-Portal für die Anwender aufzubauen.
Für unseren Kunden konnten wird dies sehr einfach in die Self-Service Seite des IDM-Portals integrieren. Die PowerShell-Funktionen führen wir über unseren IDM-Portal PowerShellProvider-Service aus, womit sich PowerShell-Kommandos komfortabel in das IDM-Portal einbinden lassen.
Fazit
Wir haben in diesem Artikel gelernt, wie wichtig ein qualitativ hochwertiges Passwort ist und was die Merkmale dafür sind. Dazu haben wir uns Methoden erarbeitet, um unseren Anwendern aussagefähige Rückmeldungen zu ihren neuen Passwörtern zu geben. Mit dieser Hilfestellung können wir den Anwender in die Lage versetzen, die Anforderungen an ein sicheres Passwort einfach und effektiv umzusetzen.
Mehr über FirstWare IDM-Portal
Das FirstWare IDM-Portal von FirstAttribute ist eine integrierte Lösung für das Identity und Access Management (IAM), die die automatisierte Verwaltung von Nutzern und deren Berechtigungen ermöglicht, egal ob On-Prem oder in der Cloud.
Dieses Portal integriert sämtliche Facetten des Identity- und Access-Managements und ermöglicht einen zentralisierten Zugriff auf Identitäts- und Verzeichnisdienste.