Skip to content

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