A password do administrador local é o segredo melhor partilhado de uma rede Windows. O técnico carrega a mesma imagem em sessenta máquinas, do balcão ao escritório, e todas ficam com o mesmo código. Quando um atacante toma o PC do balcão e recolhe essa password, obtém a chave de todas as restantes. O movimento lateral não precisa de falhas novas, apenas dessa credencial repetida.
O Windows LAPS existe para apagar este cenário. A função, nativa e actualizada no Windows 10, Windows 11 e Server 2019/2022/2025 desde as actualizações de Abril de 2023, rotaciona automaticamente a password do administrador local de cada máquina com um código aleatório e distinto, e guarda-o no Active Directory ou no Microsoft Entra ID, visível só a quem tem permissão para o ler.
AD ou Entra ID — decidir antes da política
O LAPS grava a password num único destino, definido pela política BackupDirectory. O valor 2 aponta para o Active Directory, o 1 para o Entra ID e o 0 desliga o backup. Máquinas só-domínio vão para o AD, só-Entra para o Entra, e híbridos escolhem um lado.
| Critério | LAPS no AD | LAPS no Entra ID |
|---|---|---|
| Ponto de partida | Domínio AD com DFL 2016+ para cifrar | Dispositivo Entra-joined (o registado não serve) |
| Aplicação da política | GPO com o modelo LAPS.admx | LAPS CSP no Intune ou configuração local |
| Leitura da password | Get-LapsADPassword | Get-LapsAADPassword sobre o Microsoft Graph |
| Quem autoriza | Delegação por OU (Set-LapsADReadPasswordPermission) | A app registada precisa de DeviceLocalCredential.Read.All no Graph. Quem lê (portal ou Graph) passa por papéis Entra — ou papel personalizado com microsoft.directory/deviceLocalCredentials/password/read |
| Password em repouso | Atributo ms-LAPS-* com cifra opcional | Propriedade do dispositivo, com auditoria |
| Escolhe este quando | Controlo local e delegações por OU | O parque vive na cloud, sem domínio |
Num domínio clássico, o AD fica sob controlo local: delegações por OU e cifra no atributo. Sem servidor nenhum, o Entra ID é a única porta e o Intune trata da política.
Activar o LAPS por GPO
No AD, o LAPS precisa de três ajustes antes da primeira política: o esquema, o direito de escrita da máquina e as permissões de leitura.
Preparar o Active Directory
Update-LapsADSchema
Set-LapsADComputerSelfPermission -Identity OU-Balcao
Set-LapsADReadPasswordPermission -Identity OU-Balcao -AllowedPrincipals @("kbase\G-LapsLeitura")
Set-LapsADResetPasswordPermission -Identity OU-Balcao -AllowedPrincipals @("kbase\G-LapsRotacao")
Find-LapsADExtendedRights -Identity OU-Balcao
O Update-LapsADSchema estende o esquema da floresta com os atributos ms-LAPS-* e corre uma única vez. O Set-LapsADComputerSelfPermission deixa a máquina actualizar a própria password. As delegações separam quem lê de quem força a rotação. O Find-LapsADExtendedRights lista quem pode ler atributos confidenciais: o resultado saudável é NT AUTHORITY\SYSTEM e Domain Admins.
Comprimento, complexidade e cadência
A política vive em Computer Configuration\Policies\Administrative Templates\System\LAPS. O modelo LAPS.admx já vem no Server 2025 e no Windows 11 actual, e merece uma cópia para o Central Store.
| Definição | Valor recomendado | Efeito |
|---|---|---|
| BackupDirectory | 2 | grava no AD (1 = Entra, 0 = desliga) |
| AdministratorAccountName | vazio | o alvo é a built-in, identificada pelo RID |
| PasswordLength | 14 | de 8 a 64 caracteres |
| PasswordComplexity | 4 | maiúsculas + minúsculas + números + especiais |
| PasswordAgeDays | 30 | cadência máxima: Entra ID mínimo 7 dias, AD mínimo 1 dia (máximo 365 nos dois) |
| ADPasswordEncryptionEnabled | 1 | cifra o atributo, exige DFL 2016+ |
| PostAuthenticationActions | 3 | roda e termina sessões após uso |
| PostAuthenticationResetDelay | 24 | horas de tolerância (0 desliga) |
O LAPS processa a política de hora em hora. Para a aplicar já, corre Invoke-LapsPolicyProcessing na máquina. A gravação tem confirmação por destino: o 10018 quando o backup vai para o AD, o 10029 quando vai para o Entra ID — e a 10023 acusa uma política LAPS legada em cima.
Ler a password ao precisar dela
No Active Directory
Com a delegação de leitura, um cmdlet devolve a password e o prazo de validade.
Get-LapsADPassword -Identity PC-BALCAO01 -AsPlainText
# resultado esperado
ComputerName : PC-BALCAO01
Password : tR7@qQ+rkXEM0B29l3z
ExpirationTimestamp : 12/2/2026 10:14:02
Source : EncryptedPassword
DecryptionStatus : Success
AuthorizedDecryptor : KBASE\Domain Admins
O campo Source mostra EncryptedPassword e o DecryptionStatus confirma a descodificação pelo principal autorizado. Sem -AsPlainText, a password chega em SecureString, formato certo para scripts.
No Microsoft Entra ID
A leitura corre pelo Microsoft Graph. Primeiro, activa o LAPS nas device settings do tenant: por predefinição o Entra ID recusa gravações novas. Depois, um registo de aplicação com Device.Read.All e DeviceLocalCredential.Read.All, a permissão que entrega a password em claro. A variante ReadBasic.All fica-se pelos metadados.
Install-Module Microsoft.Graph -Scope AllUsers
Connect-MgGraph -TenantId <id-do-tenant> -ClientId <id-da-app>
Get-LapsAADPassword -DeviceIds PC-BALCAO01 -IncludePasswords -AsPlainText
# resultado esperado
DeviceName : PC-BALCAO01
Password : qX2!vG@7Rt#9LzW4u
PasswordExpirationTime : 12/2/2026 11:34:39
O -DeviceIds aceita nome ou ID. Com nomes duplicados no tenant, o cmdlet falha e o ID resolve.
Emergências — forçar a rotação
Suspeita de comprometimento manda tirar a password do ar já. Um cmdlet expira do lado do AD, o outro actua no dispositivo.
Set-LapsADPasswordExpirationTime -Identity PC-BALCAO01
# Status: PasswordReset (expirada no AD)
# no dispositivo, acelera o ciclo
Invoke-LapsPolicyProcessing
# no dispositivo, rotação imediata
Reset-LapsPassword
O Reset-LapsPassword manda o LAPS rodar de imediato no dispositivo, expirada ou não, e funciona nos dois destinos. O Set-LapsADPasswordExpirationTime só serve ao AD: põe a expiração no presente e o ciclo seguinte grava a password nova — o Entra ID não suporta expirar a password por timestamp, a rotinação forçada corre pelo Reset-LapsPassword no dispositivo. A confirmação chega pelo canal de eventos.
Armadilhas
- Cadência não é rotação. Mudar
PasswordAgeDaysnada faz à password em curso: condiciona a próxima rotação e não dispara nenhuma. Para rodar já, os comandos da secção anterior. - Ler não é expirar. As permissões vivem separadas por predefinição. O
Set-LapsADReadPasswordPermissionentrega a password. OSet-LapsADResetPasswordPermissionexpira a credencial à distância, forçando a rotação sem a revelar. No Entra, a fronteira fica no Graph:ReadBasic.Alldá metadados eRead.Alldá a password. - LAPS antigo não é LAPS novo. O legacy usa o módulo
AdmPwd.PSe o atributoms-Mcs-AdmPwdsem cifra. O LAPS actual usa os atributosms-LAPS-*, cifra opcional e cmdlets diferentes. Desde o Windows 11 23H2 o legacy está deprecado e o MSI deixa de instalar. Na migração, o modo de emulação honra as políticas antigas. - O Entra não recebe GPO. Máquinas unidas apenas ao Entra ID não processam GPO nenhuma. A política corre pelo LAPS CSP, de preferência via Intune, ou por configuração local sem MDM. Sem a activação de tenant, o backup nem arranca.
Cenário — a auditoria descobre a mesma password em 60 máquinas
A auditoria testa a credencial de administrador local numa amostra e acerta em 60 máquinas, do balcão ao servidor de impressão. A password andava numa folha Excel do helpdesk e o técnico novo usava-a há três meses. Quem toma uma máquina ganha as sessenta.
A resposta cabe num dia. Aplica o esquema, as permissões e a GPO pela OU das máquinas, e a primeira passagem do LAPS grava password nova e distinta em cada uma. Em seguida, o Get-LapsADPassword em dez amostras devolve dez passwords diferentes, e o Find-LapsADExtendedRights confirma que ninguém além do SYSTEM e dos Domain Admins lê atributos confidenciais. A password partilhada deixa de abrir qualquer máquina: quem a extraiu fica com o balcão e nada mais.