Ein einzelnes kompromittiertes Passwort – und ein Angreifer bewegt sich lateral durch das gesamte Netzwerk. Genau das passiert in Umgebungen, wo alle Windows-Clients dasselbe lokale Adminpasswort haben. Windows LAPS löst dieses Problem: automatische Passwortrotation, sichere Speicherung, vollständiges Auditing.
Dieser Post zeigt den kompletten LAPS-Rollout – für reine Entra-ID-Umgebungen via Intune und für On-Premises via GPO.
Das Problem mit lokalen Adminkonten
Das lokale Administratorkonto (.\Administrator) ist auf jedem Windows-System vorhanden – selbst wenn Benutzer über Domänenkonten arbeiten. In der Praxis sieht die Realität oft so aus:
- Alle Clients haben dasselbe Passwort für den lokalen Admin
- Das Passwort wurde seit Jahren nicht geändert
- Niemand weiß mehr, wer es ursprünglich gesetzt hat
- Es steht irgendwo in einer Excel-Tabelle im Netzlaufwerk
Wer ein einziges Gerät kompromittiert, hat damit Zugang zu allen. Pass-the-Hash und Lateral Movement sind trivial.
Windows LAPS vs. Legacy LAPS
Es gibt zwei LAPS-Varianten, die du kennen musst:
| Windows LAPS (neu) | Legacy LAPS (alt) | |
|---|---|---|
| Verfügbar ab | Windows 11 22H2 / Server 2022 (April 2023 Update) | Windows Vista+ (via MSI) |
| Speicherort | Entra ID oder Active Directory | Nur Active Directory |
| Verschlüsselung | Ja (in AD) | Nein (Klartext in AD) |
| Intune-Support | Ja, nativ | Nur via Legacy-Profil |
| PowerShell-Modul | LAPS (built-in) | AdmPwd.PS |
Empfehlung: Nutze Windows LAPS. Legacy LAPS speichert Passwörter unverschlüsselt im AD-Attribut ms-Mcs-AdmPwd – das ist 2026 keine akzeptable Lösung mehr.
Voraussetzung: April 2023 Cumulative Update oder neuer auf allen Windows-Geräten.
Option 1: LAPS mit Entra ID + Intune (Cloud-Only)
Entra ID konfigurieren
Zuerst LAPS in Entra ID aktivieren:
Entra Admin Center → Geräte → Geräteeinstellungen → „Lokale Administratorpasswort-Lösung aktivieren” → Ein
Oder per Graph API:
Connect-MgGraph -Scopes "Policy.ReadWrite.DeviceConfiguration"
$params = @{
localAdminPassword = @{
isEnabled = $true
}
}
Update-MgPolicyDeviceRegistrationPolicy -BodyParameter $params
Intune-Richtlinie erstellen
Im Intune Admin Center → Endpunktsicherheit → Kontoverwaltung → „Lokales Administratorkennwort” → Richtlinie erstellen.
Oder per PowerShell über Graph:
Connect-MgGraph -Scopes "DeviceManagementConfiguration.ReadWrite.All"
$policy = @{
name = "LAPS - Alle Windows Clients"
description = "Automatische Rotation lokaler Adminpasswörter via Windows LAPS"
platforms = "windows10"
technologies = "mdm"
settings = @(
@{
"@odata.type" = "#microsoft.graph.deviceManagementConfigurationSetting"
settingInstance = @{
"@odata.type" = "#microsoft.graph.deviceManagementConfigurationChoiceSettingInstance"
settingDefinitionId = "device_vendor_msft_laps_policies_backupdirectory"
choiceSettingValue = @{
value = "device_vendor_msft_laps_policies_backupdirectory_1" # Entra ID
}
}
},
@{
"@odata.type" = "#microsoft.graph.deviceManagementConfigurationSetting"
settingInstance = @{
"@odata.type" = "#microsoft.graph.deviceManagementConfigurationSimpleSettingInstance"
settingDefinitionId = "device_vendor_msft_laps_policies_passwordagelimitdays"
simpleSettingValue = @{
"@odata.type" = "#microsoft.graph.deviceManagementConfigurationIntegerSettingValue"
value = 14
}
}
}
)
} | ConvertTo-Json -Depth 10
Invoke-MgGraphRequest -Method POST `
-Uri "https://graph.microsoft.com/beta/deviceManagement/configurationPolicies" `
-Body $policy `
-ContentType "application/json"
Empfohlene Einstellungen in der Richtlinie:
| Einstellung | Empfohlener Wert |
|---|---|
| Sicherungsverzeichnis | Azure Active Directory |
| Kennwortalter (Tage) | 14 |
| Kennwortlänge | 20 |
| Kennwortkomplexität | Groß- + Kleinbuchstaben + Ziffern + Sonderzeichen |
| Kontoverwaltung | Lokaler integrierter Administratorname |
| Nach Ablauf rotieren | Ja |
Option 2: LAPS mit Active Directory (On-Premises / Hybrid)
Schema erweitern
Einmalig auf einem DC mit Enterprise-Admin-Rechten:
# Windows LAPS Schema-Erweiterung
Update-LapsADSchema -Verbose
Das erstellt die neuen AD-Attribute:
msLAPS-Password(verschlüsselt)msLAPS-PasswordExpirationTimemsLAPS-EncryptedPasswordmsLAPS-EncryptedPasswordHistory
Berechtigungen setzen
Computer-Objekte müssen ihre eigenen LAPS-Attribute schreiben dürfen:
# Für alle Computer in einer OU
Set-LapsADComputerSelfPermission -Identity "OU=Clients,DC=contoso,DC=local"
# Admins Leserechte geben
Set-LapsADReadPasswordPermission `
-Identity "OU=Clients,DC=contoso,DC=local" `
-AllowedPrincipals "CONTOSO\IT-Admins"
GPO konfigurieren
Gruppenrichtlinienverwaltung → neue GPO für die Client-OU:
Computerkonfiguration → Administrative Vorlagen → System → LAPS
Wichtigste Einstellungen:
- Sicherungsverzeichnis: Active Directory
- Kennwortalter: 14 Tage
- Kennwortkomplexität: Groß-/Kleinbuchstaben + Ziffern + Sonderzeichen
- Verschlüsselung aktivieren: Ja (nur Windows LAPS, nicht Legacy)
Passwörter auslesen
Entra-ID-Passwort abrufen
# Modul installieren (falls nicht vorhanden)
Install-Module Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes "DeviceLocalCredential.Read.All"
# Passwort für ein bestimmtes Gerät
Get-LapsAADPassword -DeviceIds "WORKSTATION01" -IncludePasswords -AsPlainText
Ausgabe:
DeviceName : WORKSTATION01
DeviceId : a1b2c3d4-...
Account : Administrator
Password : Xk#9mQpL2$vNwR7e
PasswordExpirationTime : 07.04.2026 08:42:13
AD-Passwort abrufen
# Passwort im Klartext anzeigen
Get-LapsADPassword -Identity "WORKSTATION01" -AsPlainText
# Mit Ablaufzeit
Get-LapsADPassword -Identity "WORKSTATION01" -AsPlainText |
Select-Object ComputerName, Account, Password, PasswordExpirationTime
Passwort sofort rotieren
Nach einem Incident oder wenn du ein Passwort eingesehen hast, direkt rotieren:
# Entra ID - Gerät zur sofortigen Rotation zwingen
Set-LapsAADResetPassword -DeviceIds "WORKSTATION01"
# Active Directory
Reset-LapsPassword -Identity "WORKSTATION01"
Invoke-LapsPolicyProcessing # Auf dem betroffenen Client ausführen
LAPS-Status überwachen
Welche Geräte haben kein gültiges LAPS-Passwort?
Connect-MgGraph -Scopes "Device.Read.All", "DeviceLocalCredential.Read.All"
$devices = Get-MgDevice -All -Filter "operatingSystem eq 'Windows'"
$lapsStatus = foreach ($device in $devices) {
try {
$laps = Get-LapsAADPassword -DeviceIds $device.Id -ErrorAction Stop
[PSCustomObject]@{
Gerät = $device.DisplayName
LAPS = "Aktiv"
Läuft_ab = $laps.PasswordExpirationTime
DaysLeft = ($laps.PasswordExpirationTime - (Get-Date)).Days
}
} catch {
[PSCustomObject]@{
Gerät = $device.DisplayName
LAPS = "KEIN PASSWORT"
Läuft_ab = $null
DaysLeft = $null
}
}
}
$lapsStatus | Sort-Object LAPS, DaysLeft | Format-Table -AutoSize
Abgelaufene Passwörter auf einen Blick
# AD: Alle Computer mit abgelaufenem oder fehlendem LAPS-Passwort
$threshold = (Get-Date).AddDays(3)
Get-ADComputer -Filter {Enabled -eq $true} -Properties msLAPS-PasswordExpirationTime |
ForEach-Object {
$expiry = if ($_."msLAPS-PasswordExpirationTime") {
[datetime]::FromFileTime($_."msLAPS-PasswordExpirationTime")
} else { $null }
[PSCustomObject]@{
Computer = $_.Name
LAPS_Ablauf = $expiry
Status = if (-not $expiry) { "FEHLT" }
elseif ($expiry -lt (Get-Date)) { "ABGELAUFEN" }
elseif ($expiry -lt $threshold) { "LÄUFT BALD AB" }
else { "OK" }
}
} |
Where-Object { $_.Status -ne "OK" } |
Sort-Object LAPS_Ablauf |
Format-Table -AutoSize
Zugriffsprotokoll auswerten
Jeder LAPS-Abruf wird in Entra ID bzw. Active Directory protokolliert. Das ist wichtig – wer hat wann welches Passwort eingesehen?
# Entra ID Audit-Log: LAPS-Passwort-Abrufe der letzten 7 Tage
Connect-MgGraph -Scopes "AuditLog.Read.All"
$since = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
Get-MgAuditLogDirectoryAudit `
-Filter "activityDisplayName eq 'Recover device local administrator password' and activityDateTime ge $since" |
Select-Object ActivityDateTime,
@{N="Admin"; E={ $_.InitiatedBy.User.UserPrincipalName }},
@{N="Gerät"; E={ ($_.TargetResources | Where-Object Type -eq "Device").DisplayName }},
Result |
Sort-Object ActivityDateTime -Descending |
Format-Table -AutoSize
Häufige Fallstricke
1. Altes Legacy-LAPS parallel aktiv Wenn Legacy-LAPS und Windows LAPS gleichzeitig konfiguriert sind, kann es zu Konflikten kommen. Legacy-LAPS deinstallieren oder die GPO-Einstellung explizit deaktivieren, bevor Windows LAPS übernimmt.
2. April-2023-Patch fehlt Windows LAPS ist zwar im OS integriert, aber auf Geräten ohne das April-2023-CU inaktiv. Intune-Berichte zeigen diese Geräte als „nicht konfiguriert” – einfach nicht konfigurierbar.
# Prüfen ob Windows LAPS aktiv ist (lokal auf dem Client)
Get-LapsStatistics
3. Lokales Konto hat anderen Namen
Nicht jede Umgebung nutzt Administrator als lokalen Admin-Account. LAPS kann alternativ das Konto über den SID (S-1-5-21-...-500) ansprechen – zuverlässiger als der Name.
4. Break-Glass ohne LAPS Für den Notfall sollte mindestens ein Gerät (z. B. ein Jumphost) ein bekanntes, dokumentiertes lokales Passwort haben – außerhalb von LAPS, sicher in einem PAM-System oder Vault gespeichert.
Best Practices Checkliste
Bevor du LAPS für produktiv erklärst:
- Windows LAPS in Entra ID aktiviert
- Alle Geräte haben April 2023 CU (oder neuer)
- Intune-Richtlinie deployed und auf alle Client-OUs / Gruppen angewendet
- Passwortlänge mindestens 20 Zeichen
- Rotation mindestens alle 14 Tage konfiguriert
- Leserechte auf „IT-Admins” Gruppe beschränkt – nicht jeder Helpdesk-Mitarbeiter braucht Zugriff
- Audit-Log wird regelmäßig ausgewertet (wer liest Passwörter?)
- Legacy LAPS deaktiviert / deinstalliert
- Rotation nach Passwort-Abruf dokumentiert und prozessiert
Fazit
Windows LAPS ist keine optionale Härtungsmaßnahme – es ist ein Minimum. Lateral Movement durch shared local admin credentials ist einer der ältesten Angriffsvektoren in Windows-Umgebungen, und LAPS eliminiert ihn vollständig.
Der Rollout ist in einer Intune-verwalteten Umgebung in unter einer Stunde erledigt. Der Aufwand steht in keinem Verhältnis zum Sicherheitsgewinn.
Sofort starten:
# Status prüfen: Hat LAPS auf diesem Gerät schon geschrieben?
Get-LapsStatistics
# Wenn leer: Richtlinienverarbeitung anstoßen
Invoke-LapsPolicyProcessing
Wenn Get-LapsStatistics ein Passwort und einen Ablaufzeitpunkt zurückliefert, läuft LAPS. Wenn nicht – hier anfangen.
Fragen oder eigene LAPS-Setups? Schreib mir: info@westmeier.cloud