Auditoria alteração de senha não expira usuários em domínio

Objetivo

Esse post tem como objetivo identificar quando um atributo de usuário é alterado. Um usuário possui vários atributos e quando esses atributos são alterados o Active Directory registra o evento 4738. Alguns exemplos de atributos são Display Name, User Principal Name: user logon name, Password Last Set: last time password changed but also used for “user must change password at next logon” Account Expires, Logon Hours:  Day or week and time of day restrictions. Nesse post iremos abordar como o AD regista quando a senha do usuário é configurada para nunca expirar.

Esses eventos são gerados no domain contoller que a ação foi processada. Por isso, antes de realizar a análise verifique com o cliente o site que ele se encontra, pois torna mais fácil a busca. Também há outras formas de realizar a pesquisa do evento em todos os domain controllers ao mesmo tempo, como por exemplo o cmdlet Get-WinEvent.

Abaixo um exemplo de um script que pode ser utilizado, no meu caso possuo os domain controllers DC2016 e DC201602, altere o nome desses servidores para os que pretende realizar a busca.

# Lista dos Domain Controllers, altere para os de sua rede.
$DCs = @("DC2016", "DC201602")
# IDs de evento que desejamos buscar
$EventIDs = 4738

foreach ($DC in $DCs) {
    Write-Host "`nColetando eventos no servidor: $DC" -ForegroundColor Cyan

    try {
        $logs = Get-WinEvent -ComputerName $DC -FilterHashtable @{
            LogName = 'Security'
            Id      = $EventIDs
        }

        if ($logs.Count -eq 0) {
            Write-Host "Nenhum evento encontrado no DC: $DC" -ForegroundColor Yellow
        }
        else {
            $logs | Select-Object TimeCreated, Id, LevelDisplayName, Message, MachineName |
                Sort-Object TimeCreated |
                Format-Table -AutoSize
        }
    }
    catch {
        Write-Host "Erro ao consultar ${DC}:" -ForegroundColor Red
        Write-Host $_ -ForegroundColor DarkRed
    }
}

Pré-requisitos:

É necessário que a auditoria de gerenciamento de objetos esteja habilitada no servidor, seja através de GPO ou diretiva local (servidores em WORKGROUP), para verificar esse pré-requisito consultar o post Verificação de Auditoria – GPO e WORKGROUP

Procedimento – Alteração de conta, habilitado

Vamos simular a alteração do atributo “Password never expires” do usuário Zoro.

Execute o Event Viewer, navegue até Windows Logs\Security. Clique com o botão direito em Security e selecione Filter Current Log…

No campo Include/Excludes Event IDs informe o ID do evento que neste é 4738. Clique em OK.

O evento 4738 é filtrado. Procure o horário aproximado que o cliente reportou a solicitação e abra o evento.

No evento é possível verificar se a ação foi com sucesso ou falha, o usuário que alterou o atributo “’Don’t Expire Password’ – Enabled”. Neste caso o usuário administrator conseguiu habilitar a senha do usuário Zoro para nunca expirar com sucesso. Em Subject é o usuário que realizou a ação, em Target Account é o usuário que sofreu a ação, em Changed Attributes são os atributos que foram alterados na conta do usuário.

Procedimento – Alteração de conta, desabilitando

Vamos simular a alteração do atributo “Password never expires” do usuário Zoro, desabilitando a opção.

O evento 4738 é usado para quando o atributo é habilitado ou desabilitado. Procure o horário aproximado que o cliente reportou a solicitação e abra o evento.

Neste caso o usuário administrator conseguiu desabilitar a senha do usuário Zoro para nunca expirar com sucesso, ou seja, desabilitando essa opção a senha do usuário passa a respeitar a política de senha padrão do domínio. Em Subject é o usuário que realizou a ação, em Target Account é o usuário que sofreu a ação, em Changed Attributes são os atributos que foram alterados na conta do usuário.

Concluímos que através desses procedimentos é possível identificar um usuário que alterou o atributo de senha nunca expira.