Windows LAPS (Local Admin Password Solution)
Rotation automatique du mot de passe Administrateur local stocké dans l'Active Directory.
Pourquoi LAPS ?
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â LE PROBLĂME â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â ScĂ©nario classique (BAD PRACTICE) : â
â ââââââââââââââââââââââââââââââââââââ â
â 1. Installation Windows avec Admin local "Password123!" â
â 2. MĂȘme mot de passe sur TOUS les serveurs/postes â
â 3. Un attaquant compromet un poste â
â 4. Il utilise Pass-the-Hash pour accĂ©der Ă TOUS â
â les autres postes avec le mĂȘme Admin local â
â â
â RĂ©sultat : Mouvement latĂ©ral trivial â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â LA SOLUTION : LAPS â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â 1. LAPS gĂ©nĂšre un mot de passe alĂ©atoire unique par PC â
â 2. Le mot de passe est stockĂ© dans l'AD (attribut) â
â 3. Rotation automatique tous les X jours â
â 4. Seuls les admins AD peuvent lire le mot de passe â
â â
â RĂ©sultat : Chaque machine a un mot de passe unique â
â â Mouvement latĂ©ral bloquĂ© â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Legacy vs Natif
| Aspect | Legacy LAPS (2019/2022) | Windows LAPS (Natif 2025+) |
|---|---|---|
| Disponibilité | Agent MSI à installer | Intégré dans l'OS |
| Extension schéma AD | Requise (admpwd.dll) | Requise (nouveau schéma) |
| Attributs AD | ms-Mcs-AdmPwd (texte clair) |
msLAPS-Password (chiffré) |
| Cmdlets PowerShell | Module AdmPwd.PS | Module Windows LAPS (natif) |
| Chiffrement | Non (stockage texte clair dans AD) | Oui (AES 256, chiffré dans AD) |
| Azure AD Support | Non | Oui (Azure AD Join) |
| Compte géré | Administrateur local uniquement | Admin + autres comptes |
| Historique | Non | Oui (rotation trackée) |
LAPS Legacy (2019/2022)
Installation
Prérequis : - Domain Controller Windows Server 2019/2022 - Clients Windows 10/11 ou Server
Ătape 1 : Ătendre le schĂ©ma Active Directory
# Sur le Domain Controller (en tant que Schema Admin)
# Télécharger LAPS depuis Microsoft
# https://www.microsoft.com/en-us/download/details.aspx?id=46899
# Installer les outils d'administration LAPS
msiexec /i LAPS.x64.msi /quiet
# Importer le module PowerShell
Import-Module AdmPwd.PS
# Ătendre le schĂ©ma AD (ajoute les attributs ms-Mcs-AdmPwd, etc.)
Update-AdmPwdADSchema
# Accorder les permissions au domaine pour écrire les mots de passe
Set-AdmPwdComputerSelfPermission -Identity "Computers"
# Accorder les permissions de lecture aux admins (groupe)
Set-AdmPwdReadPasswordPermission -Identity "Computers" -AllowedPrincipals "Domain Admins"
# Refuser les permissions de lecture Ă tout le monde sauf admins
Set-AdmPwdResetPasswordPermission -Identity "Computers" -AllowedPrincipals "Domain Admins"
Ătape 2 : DĂ©ployer via GPO
GPO Path: Computer Configuration â Policies â Administrative Templates
â LAPS (aprĂšs installation du ADMX)
ParamĂštres Ă configurer :
âââ Enable local admin password management â Enabled
âââ Password Settings
â âââ Password Complexity â Large letters + small letters + numbers + specials
â âââ Password Length â 14 caractĂšres minimum
â âââ Password Age (Days) â 30 jours
âââ Name of administrator account to manage â Administrator (ou autre)
Ătape 3 : Installer l'agent sur les clients
# Déployer le MSI sur tous les clients (GPO Software Installation)
msiexec /i LAPS.x64.msi /quiet
# Forcer la mise Ă jour GPO
gpupdate /force
# Vérifier que LAPS fonctionne
Get-AdmPwdPassword -ComputerName "CLIENT01"
Lecture du mot de passe
# Via PowerShell
Import-Module AdmPwd.PS
Get-AdmPwdPassword -ComputerName "SRV-WEB01"
# Output:
# ComputerName Password ExpirationTimestamp
# ------------ -------- -------------------
# SRV-WEB01 Kp8#mX2@qL9!vZ3 2024-02-15 14:32:11
# Via GUI (LAPS UI)
# Installer "LAPS UI" (inclus dans le MSI)
# Outil graphique pour rechercher et afficher les mots de passe
Windows LAPS Natif (2025+)
Disponibilité : - Windows Server 2025 (natif) - Windows Server 2022 (avec KB5025230 ou supérieur) - Windows 11 22H2+
Avantages du LAPS Natif : - â IntĂ©grĂ© dans l'OS (pas d'agent MSI) - â Chiffrement AES 256 du mot de passe dans l'AD - â Support Azure AD (pas seulement AD on-prem) - â Historique des rotations - â Gestion de plusieurs comptes (pas que Administrateur)
Configuration
Ătape 1 : Ătendre le schĂ©ma AD
# Sur le Domain Controller (Schema Admin)
# Vérifier que Windows LAPS est disponible
Get-Command *LAPS*
# Ătendre le schĂ©ma (nouveau schĂ©ma, diffĂ©rent de Legacy)
Update-LapsADSchema -Verbose
# Accorder les permissions
Set-LapsADComputerSelfPermission -Identity "Computers"
Set-LapsADReadPasswordPermission -Identity "Computers" -AllowedPrincipals "Domain Admins"
Ătape 2 : Configuration via GPO
GPO Path: Computer Configuration â Policies â Administrative Templates
â System â LAPS
ParamĂštres Ă configurer :
âââ Configure password backup directory â Enabled
â âââ Backup directory: Active Directory (ou Azure AD)
âââ Password Settings
â âââ Password Complexity â 4 (Large + Small + Numbers + Specials)
â âââ Password Length â 16 caractĂšres minimum
â âââ Password Age (Days) â 30 jours
âââ Post-authentication actions
â âââ Post-authentication action period â 24 hours (grace period aprĂšs rotation)
âââ Name of administrator account to manage â Administrator (ou personnalisĂ©)
Utilisation
# Lire le mot de passe (cmdlet native)
Get-LapsADPassword -Identity "SRV-WEB01" -AsPlainText
# Output:
# ComputerName Password ExpirationTime
# ------------ -------- --------------
# SRV-WEB01 Xz9#Lp2@Qm5!Vk8$Rt4 2024-02-15 14:32:11
# Forcer la rotation immédiate
Reset-LapsADPassword -Identity "SRV-WEB01" -Verbose
# Historique des mots de passe (NOUVEAU)
Get-LapsADPassword -Identity "SRV-WEB01" -IncludeHistory
# Chiffrer le mot de passe (pour stockage sécurisé)
Get-LapsADPassword -Identity "SRV-WEB01" -AsPlainText |
ConvertTo-SecureString -AsPlainText -Force
LAPS + Azure AD (Hybrid Join)
Pour les environnements hybrides (AD + Azure AD) :
# Configuration via Intune (Azure Portal)
# Endpoint Manager â Devices â Configuration profiles â Create profile
# Platform: Windows 10 and later
# Profile type: Templates â Local Admin Password Solution (LAPS)
# Settings:
# - Backup directory: Azure AD
# - Password age: 30 days
# - Password length: 16
# - Administrator account name: Administrator
# Lecture du mot de passe (Azure AD)
# Via Azure Portal â Devices â All devices â SRV-WEB01 â Local administrator password
Audit LAPS
Activer l'audit dans AD :
# Activer l'audit des accĂšs aux attributs LAPS
$ComputersOU = "OU=Computers,DC=corp,DC=local"
# Audit des lectures de mot de passe
$AuditRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
[System.Security.Principal.SecurityIdentifier]"S-1-1-0", # Everyone
[System.DirectoryServices.ActiveDirectoryRights]::ReadProperty,
[System.Security.AccessControl.AuditFlags]::Success,
[Guid]"ms-Mcs-AdmPwd" # Attribut LAPS
)
$ACL = Get-Acl -Path "AD:\$ComputersOU"
$ACL.AddAuditRule($AuditRule)
Set-Acl -Path "AD:\$ComputersOU" -AclObject $ACL
# Lire les logs d'audit
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4662 # Object Access
} | Where-Object {
$_.Message -like "*ms-Mcs-AdmPwd*"
} | Select-Object TimeCreated,
@{N='User';E={$_.Properties[1].Value}},
@{N='Computer';E={$_.Properties[6].Value}}
Astuce SecNumCloud
LAPS est obligatoire pour la conformité SecNumCloud (rotation automatique des mots de passe privilégiés).
Recommandations : - Rotation : 30 jours maximum - Longueur : 16 caractĂšres minimum - Audit : Activer les logs d'accĂšs aux mots de passe - Chiffrement : Utiliser Windows LAPS Natif (AES 256) sur Server 2025
Gestion Opérationnelle
Audit et Reporting
# Machines sans mot de passe LAPS
Get-ADComputer -Filter * -SearchBase "OU=Servers,DC=corp,DC=local" -Properties ms-Mcs-AdmPwdExpirationTime |
Where-Object { $_.'ms-Mcs-AdmPwdExpirationTime' -eq $null } |
Select-Object Name, DistinguishedName
# Mots de passe expirés (Legacy LAPS)
$now = Get-Date
Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwdExpirationTime |
Where-Object {
$_.'ms-Mcs-AdmPwdExpirationTime' -and
[DateTime]::FromFileTime($_.'ms-Mcs-AdmPwdExpirationTime') -lt $now
} |
Select-Object Name, @{N='Expiration';E={[DateTime]::FromFileTime($_.'ms-Mcs-AdmPwdExpirationTime')}}
# Windows LAPS - Rapport complet
Get-ADComputer -Filter * -SearchBase "OU=Servers,DC=corp,DC=local" |
ForEach-Object {
$laps = Get-LapsADPassword -Identity $_.Name -AsPlainText -ErrorAction SilentlyContinue
[PSCustomObject]@{
ComputerName = $_.Name
HasPassword = [bool]$laps
ExpirationTime = $laps.ExpirationTimestamp
LastUpdate = $laps.PasswordUpdateTime
}
} | Export-Csv "C:\Reports\laps-status.csv" -NoTypeInformation
Troubleshooting
# Vérifier si LAPS est actif sur une machine
# (Exécuter sur la machine cible)
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft Services\AdmPwd" -ErrorAction SilentlyContinue
# Event logs Legacy LAPS
Get-WinEvent -LogName "Application" -MaxEvents 100 |
Where-Object { $_.ProviderName -eq "AdmPwd" }
# Event logs Windows LAPS
Get-WinEvent -LogName "Microsoft-Windows-LAPS/Operational" -MaxEvents 50
# Forcer le traitement GPO
gpupdate /force
# Vérifier la CSE Legacy LAPS
Get-ChildItem "C:\Program Files\LAPS\CSE"
# Tester la connectivité AD
nltest /dsgetdc:corp.local
Migration Legacy vers Windows LAPS
# Windows LAPS peut coexister avec Legacy LAPS
# Mais il faut migrer progressivement
# 1. Déployer Windows LAPS GPO sur un groupe pilote
# 2. Désactiver Legacy LAPS GPO pour ce groupe
# 3. Vérifier que Windows LAPS fonctionne
# 4. Ătendre progressivement
# Les attributs sont différents :
# Legacy : ms-Mcs-AdmPwd
# Windows LAPS : msLAPS-Password, msLAPS-EncryptedPassword
# AprÚs migration, nettoyer les anciens attributs si souhaité
Intégration avec PAM/PIM
Utilisation avec un Coffre-Fort
# Exemple : Récupération automatisée pour CyberArk/Thycotic
# Script à exécuter par le PAM pour récupérer les credentials
param($ComputerName)
Import-Module LAPS
$password = Get-LapsADPassword -Identity $ComputerName -AsPlainText
if ($password) {
# Retourner au format attendu par le PAM
[PSCustomObject]@{
Username = ".\Administrator"
Password = $password.Password
Expiration = $password.ExpirationTimestamp
} | ConvertTo-Json
}
Rotation Manuelle Sécurisée
# Script de connexion sécurisée avec rotation post-utilisation
function Connect-WithLaps {
param(
[Parameter(Mandatory)]
[string]$ComputerName,
[switch]$RotateAfter
)
$laps = Get-LapsADPassword -Identity $ComputerName -AsPlainText
if (-not $laps) {
Write-Error "No LAPS password found for $ComputerName"
return
}
$secPassword = ConvertTo-SecureString $laps.Password -AsPlainText -Force
$cred = New-Object PSCredential("$ComputerName\Administrator", $secPassword)
# Connexion
Enter-PSSession -ComputerName $ComputerName -Credential $cred
# AprÚs déconnexion, forcer la rotation
if ($RotateAfter) {
Reset-LapsPassword -Identity $ComputerName
Write-Host "Password rotated for $ComputerName" -ForegroundColor Green
}
}
Bonnes Pratiques
Checklist LAPS:
Déploiement:
- [ ] Utiliser Windows LAPS si possible (chiffrement)
- [ ] Tester sur un groupe pilote
- [ ] Documenter les permissions accordées
- [ ] Former le helpdesk à la récupération
Sécurité:
- [ ] Limiter les droits de lecture au strict nécessaire
- [ ] Activer le chiffrement (Windows LAPS)
- [ ] Activer l'historique des mots de passe
- [ ] Auditer les accĂšs aux mots de passe
Opérations:
- [ ] Monitoring des machines sans LAPS
- [ ] Alertes sur échecs de rotation
- [ ] Rotation aprĂšs chaque utilisation sensible
- [ ] Plan de migration Legacy â Windows LAPS
Mot de passe:
- [ ] Longueur minimum 14-20 caractĂšres
- [ ] Tous les types de caractĂšres
- [ ] Rotation 30 jours (ou moins si sensible)
Ă lire aussi
- Hardening ANSSI - GPO de sécurité complÚtes
- Active Directory - Administration AD
- AD Delegation - Délégation de permissions
- Credential Guard - Protection des credentials