LAPS: unikalne hasło lokalnego administratora na każdej maszynie
To samo hasło lokalnego administratora na wszystkich stacjach z jednego obrazu to otwarta droga od pierwszej zainfekowanej maszyny do pozostałych. Windows LAPS rozwiązuje to bez dodatkowych licencji, a kilka zapytań pokazuje, czy ochrona obejmuje całą flotę.
Przewodnik Dostęp uprzywilejowany Część 2 z 5
- Konta uprzywilejowane w Active Directory: model warstw bez wdrażania całego PAM-a
- LAPS: unikalne hasło lokalnego administratora na każdej maszynie
- Logowanie do narzędzi administracyjnych przez Active Directory: LDAPS czy OIDC
- Konto awaryjne: dostęp, gdy logowanie przez katalog przestaje działać
- Zdalny dostęp dostawców: bramka z nagrywaniem sesji zamiast VPN dla każdego
Analiza incydentu pokazuje, że napastnik w ciągu jednego popołudnia przeszedł z zainfekowanego laptopa na kilkadziesiąt innych komputerów. Nie łamał haseł. Wszystkie stacje przygotowano z tego samego obrazu, z tym samym hasłem lokalnego administratora, więc wystarczyło odczytać jego skrót na pierwszej maszynie i użyć go na pozostałych.
Windows LAPS usuwa ten problem: każda maszyna ma własne, losowe hasło, zmieniane automatycznie i przechowywane w katalogu w postaci zaszyfrowanej. Wdrożenie zajmuje jedno popołudnie, a utrzymanie sprowadza się do kilku zapytań uruchamianych raz w miesiącu.
Czym jest Windows LAPS
Windows LAPS (Local Administrator Password Solution) jest wbudowany w Windows 10, Windows 11 oraz Windows Server 2019 i nowsze, z aktualizacjami od kwietnia 2023. Na każdej maszynie generuje losowe hasło wskazanego konta lokalnego, rotuje je według harmonogramu i zapisuje kopię w Active Directory albo w Microsoft Entra ID. Osoby z nadanym uprawnieniem mogą odczytać aktualne hasło konkretnej maszyny, gdy jest potrzebne.
Starsza wersja, instalowana osobno jako pakiet MSI z rozszerzeniem zasad grupy, jest wycofywana. Nowe wdrożenia powinny używać wersji wbudowanej, która dodaje szyfrowanie hasła w katalogu, historię haseł i akcje po użyciu konta.
Wdrożenie w Active Directory
Przygotowanie katalogu to trzy polecenia z modułu LAPS: rozszerzenie schematu, prawo zapisu dla komputerów i prawo odczytu dla wybranej grupy. Uprawnienia nadaje się osobno dla każdej jednostki organizacyjnej z komputerami.
Import-Module LAPS
# Jednorazowo, z konta członka Schema Admins
Update-LapsADSchema
$ou = 'OU=Stacje,OU=Komputery,DC=corp,DC=example,DC=com'
# Komputery w tej OU mogą zapisywać własne hasło
Set-LapsADComputerSelfPermission -Identity $ou
# Odczyt haseł tylko dla grupy wsparcia stacji
Set-LapsADReadPasswordPermission -Identity $ou -AllowedPrincipals 'CORP\GG-LAPS-Readers'
Audyt odczytu włącza Set-LapsADAuditing z parametrem -AuditedPrincipals, wskazującym, czyje odczyty mają być zapisywane. Zdarzenia trafiają do dziennika zabezpieczeń kontrolerów domeny, pod warunkiem że zasady audytu włączają inspekcję dostępu do usług katalogowych.
Zachowanie maszyn określa zasada grupy w ścieżce Konfiguracja komputera › Zasady › Szablony administracyjne › System › LAPS.
| Ustawienie (konsola angielska) | Wartość dla stacji roboczych |
|---|---|
| Configure password backup directory | Active Directory |
| Password Settings | duże i małe litery, cyfry, znaki specjalne; długość 20; wiek 30 dni |
| Name of administrator account to manage | nieustawione, czyli wbudowane konto Administrator |
| Enable password encryption | Enabled |
| Configure authorized password decryptors | CORP\GG-LAPS-Readers |
| Configure size of encrypted password history | 3 |
| Post-authentication actions | reset hasła i wylogowanie, okres karencji 8 godzin |
| Do not allow password expiration time longer than required by policy | Enabled |
Kto może odczytać hasło
Uprawnienie do odczytu jest równoważne uprawnieniu administratora na danej maszynie, więc nadaje się je zgodnie z modelem warstw:
- pracownicy wsparcia odczytują hasła stacji roboczych, ale nie serwerów,
- administratorzy serwerów odczytują hasła serwerów aplikacji, ale nie kontrolerów domeny,
- hasła maszyn warstwy 0 odczytują wyłącznie administratorzy warstwy 0.
W praktyce oznacza to osobną jednostkę organizacyjną i osobną zasadę grupy dla każdej warstwy, bo lista uprawnionych do odszyfrowania jest ustawieniem zasady, a nie jednostki.
Odczyt hasła i akcje po użyciu
Hasło konkretnej maszyny odczytuje się poleceniem Get-LapsADPassword albo na karcie LAPS we właściwościach obiektu komputera w konsoli użytkowników i komputerów.
Get-LapsADPassword -Identity PC-0142 -AsPlainText
ComputerName : PC-0142
DistinguishedName : CN=PC-0142,OU=Stacje,OU=Komputery,DC=corp,DC=example,DC=com
Account : Administrator
Password : (hasło)
PasswordUpdateTime : 2026-10-02 07:14:31
ExpirationTimestamp : 2026-11-01 07:14:31
Source : EncryptedPassword
DecryptionStatus : Success
AuthorizedDecryptor : CORP\GG-LAPS-Readers
Gdy maszyna nie zapisuje hasła
Maszyna przetwarza zasady LAPS co godzinę i każdą próbę opisuje w dzienniku Microsoft-Windows-LAPS/Operational. Większość problemów ma jedną z kilku przyczyn.
| Objaw | Najczęstsza przyczyna |
|---|---|
Aktywny komputer bez wartości msLAPS-PasswordExpirationTime | zasada nie obejmuje jego OU albo filtr zabezpieczeń GPO go pomija |
| Błąd zapisu do katalogu w dzienniku LAPS | brak Set-LapsADComputerSelfPermission dla OU, w której leży komputer |
| Hasło przeterminowane od tygodni | maszyna wyłączona albo poza siecią, bez kontaktu z kontrolerem domeny |
| Wsparcie widzi obiekt, ale nie hasło | grupa ma prawo odczytu, ale nie jest uprawniona do odszyfrowania |
Hasło w atrybucie ms-Mcs-AdmPwd zamiast nowych | konto nadal obsługuje starsza wersja LAPS |
Na samej maszynie diagnostyka zaczyna się od dziennika, a po usunięciu przyczyny można wymusić natychmiastowe przetworzenie zasad, zamiast czekać na kolejny cykl. Reset-LapsPassword zmienia hasło od razu, co przydaje się po incydencie na tej maszynie. Z serwera, bez logowania na komputer, to samo uzyskuje się przez Set-LapsADPasswordExpirationTime -Identity PC-0142: hasło zmieni się w najbliższym cyklu przetwarzania.
# Ostatnie błędy i ostrzeżenia LAPS
Get-WinEvent -FilterHashtable @{ LogName = 'Microsoft-Windows-LAPS/Operational'; Level = 2, 3 } -MaxEvents 20 |
Select-Object TimeCreated, Id, Message
# Natychmiastowe przetworzenie zasad LAPS
Invoke-LapsPolicyProcessing
# Natychmiastowa zmiana hasła zarządzanego konta
Reset-LapsPassword
Uzupełnienia
- Blokada logowania sieciowego kontami lokalnymi. Prawo „Deny access to this computer from the network” z identyfikatorem
S-1-5-114(konto lokalne i członek grupy Administratorzy) sprawia, że nawet znane hasło lokalne nie pozwala na logowanie przez sieć. Lokalny administrator służy do pracy przy konsoli, gdy maszyna straciła kontakt z domeną. - Kontrolery domeny. Ustawienie „Enable password backup for DSRM accounts” pozwala LAPS zarządzać hasłem trybu przywracania usług katalogowych. To hasło jest potrzebne przy odtwarzaniu katalogu, więc jego automatyczna kopia ma realną wartość.
- Migracja ze starszej wersji. Obie wersje nie mogą zarządzać tym samym kontem jednocześnie. Przejście planuje się per jednostka organizacyjna: nowa zasada włączona, stara wyłączona, weryfikacja, że maszyny zapisują hasła w atrybutach
msLAPS-*.
Sprawdź u siebie
Aktywne komputery bez hasła LAPS. Dobry wynik jest pusty. Komputer z niedawną datą LastLogonDate na tej liście to realna luka; komputer, który nie logował się od miesięcy, to kandydat do porządków w katalogu, a nie do naprawy LAPS.
$searchBase = 'OU=Komputery,DC=corp,DC=example,DC=com'
Get-ADComputer -SearchBase $searchBase -Filter 'Enabled -eq $true' -Properties 'msLAPS-PasswordExpirationTime', LastLogonDate, OperatingSystem |
Where-Object { -not $_.'msLAPS-PasswordExpirationTime' } |
Sort-Object LastLogonDate -Descending |
Select-Object Name, OperatingSystem, LastLogonDate
Hasła przeterminowane od ponad 7 dni. Maszyna z kontaktem z kontrolerem domeny zmienia hasło w ciągu godziny od wygaśnięcia, więc każda pozycja oznacza komputer poza siecią albo z błędem widocznym w dzienniku LAPS.
$searchBase = 'OU=Komputery,DC=corp,DC=example,DC=com'
$limit = (Get-Date).AddDays(-7).ToFileTimeUtc()
Get-ADComputer -SearchBase $searchBase -Filter 'Enabled -eq $true' -Properties 'msLAPS-PasswordExpirationTime' |
Where-Object { $_.'msLAPS-PasswordExpirationTime' -and $_.'msLAPS-PasswordExpirationTime' -lt $limit } |
Select-Object Name, @{ n = 'Wygasło'; e = { [datetime]::FromFileTimeUtc($_.'msLAPS-PasswordExpirationTime') } }
Kto ma prawo odczytu haseł w danej jednostce organizacyjnej. Lista powinna zawierać tylko NT AUTHORITY\SYSTEM, Domain Admins i grupę odczytu tej warstwy. Każda inna pozycja, na przykład konto narzędzia inwentaryzacyjnego albo dawna grupa wsparcia, ma pełny dostęp administracyjny do wszystkich maszyn w tej OU.
Find-LapsADExtendedRights -Identity 'OU=Stacje,OU=Komputery,DC=corp,DC=example,DC=com'