O PwdLastSet pode confundir?

Trabalhando em uma resposta a um incidente onde o Domain Admin foi comprometido, comecei a fazer um levantamento do campo PwdLastSet no Active Directory Domain Services com o objetivo de identificar, logicamente, os usuários que realizaram trocas de senhas antes e/ou durante o incidente. Sendo assim, me surgiu uma dúvida:

O atributo PwdLastSet pode ser alterado?

Primeiro, vamos a definição:

A data e a hora em que a senha dessa conta foi alterada pela última vez. Esse valor é armazenado como um inteiro grande que representa o número de intervalos de 100 nanossegundos desde 1º de janeiro de 1601 (UTC). Se esse valor for definido como 0 e o atributo User-Account-Control não contiver o sinalizador UF_DONT_EXPIRE_PASSWD, o usuário deverá definir a senha no próximo logon.

FONTE: https://learn.microsoft.com/en-us/windows/win32/adschema/a-PwdLastSet

Partimos para um laboratório onde subi um Active Directory Domain Services sobre um Windows Server 2022. Criei um usuário chamado lab.user com uma senha definida. O campo pwdLastSet adicionou as informações de data, hora e GMT configuradas no sistema operacional

Aí vem o teste. A primeira coisa que tentei foi adicionar um epoch time no usuárioporém sem sucesso em um script powershell.

Verificando a documentação entendi que é possível setar duas flags o 0 indicando que a senha nunca foi trocada e o -1 que utiliza do tempo atual.

O script e os resultados

OBS.: O script apresentado neste artigo é destinado exclusivamente para fins educativos e de aprendizado. Não nos responsabilizamos pelo uso indevido, aplicação em contextos não autorizados ou quaisquer consequências decorrentes da utilização deste código. Recomendamos que os leitores utilizem o script de forma ética e em conformidade com todas as leis e regulamentos aplicáveis.

Import-Module ActiveDirectory
    Import-Module ActiveDirectory
    Set-ADUser -Identity "lab.user" -Replace @{PwdLastSet="0"}
    Get-ADUser -Identity lab.user -Properties PasswordLastSet

Utilizando 0 como flag
Import-Module ActiveDirectory
    Import-Module ActiveDirectory
    Set-ADUser -Identity "lab.user" -Replace @{PwdLastSet="-1"}
    Get-ADUser -Identity lab.user -Properties PasswordLastSet
Adicionando -1 como flag

Entendo que existem outros campos como WhenChanged que podem ser utilizados para investigação porém o que me trouxe até aqui foi quanto isso poderia ser confuso para quem está respondendo ao incidente de cibersegurança

Publicado por

João Fuzinelli

João Fuzinelli, formado em Sistemas de informação possui algumas certificações de mercado e vasta experiência em ambientes de infraestrutura crítica e cibersegurança. Atualmente trabalha nas operações de SOC da CYLO Cybersecurity.