Blog Agility

Auditoria de logon através do Windows PowerShell

Auditoria de logon através do Windows PowerShell

Existem no mercado diversas ferramentas bem completas, porém pagas, para auditoria de AD. Mas às vezes necessitamos de informações pontuais e não dispomos de verba para investimento.

Neste artigo vamos mostrar como obter de forma simples os eventos de falha de logon registrados no Windows EventViewer através de comandos do Windows PowerShell.

Corpo do Artigo:

 

O comando PowerShell que iremos utilizar para realizar a captura dos eventos é “Get-EventLog”.

No Windows Server 2008 e 2008/R2 o evento que traz as informações que preciso é o 4776.

Segue exemplo mostrando todas as propriedades do event ID 4776 mais recente:

Get-EventLog -logName Security -InstanceID 4776 -EntryType "FailureAudit" -newest 1 | format-list -property *

2016_06_FernandoMatarese_LogonAudit_PowerShell_Imagem01
Imagem 01

Ao visualizar todas as propriedades do evento, você pode identificar quais delas são relevantes e extraí-las.

No meu caso, preciso saber apenas em que momento ocorreu o evento, qual o usuário, estação de trabalho o motivo da falha de logon.

Note que Informações como “Logon Account”, “Source Workstation” e “Error Code” fazem parte do campo “Message” e por este motivo, são bem mais difíceis de serem extraídas em formato de tabela por exemplo.

Por sorte, o campo “ReplacementStrings” também traz estas informações e é bem mais simples de extrair.

Segue um exemplo do comando:

Get-EventLog -logName Security -InstanceID 4776 -EntryType "FailureAudit" -newest 1| format-table -property TimeGenerated,ReplacementStrings -AutoSize

2016_06_FernandoMatarese_LogonAudit_PowerShell_Imagem02
Imagem 02

O motivo da falha de logon é representado pelo campo “Error Code”, porém em formato de código.

Ex.: Error Code: 0xC000006A

Para facilitar a interpretação destes códigos, eu montei uma tabela com a conversão destes valores:

2016_06_FernandoMatarese_LogonAudit_PowerShell_Imagem03

Você pode inclusive aprimorar o comando acrescentando por exemplo o período de coleta, e os controladores de domínio do ambiente, além de exportar o conteúdo para um arquivo TXT.

$Inicio_Mes = get-date 01/05/2016
$Fim_Mes = get-date 31/05/2016
Get-EventLog -ComputerName "hostnameDC1"," hostnameDC2" -logName Security -InstanceID 4776 -EntryType "FailureAudit" -after $Inicio_Mes -before $Fim_Mes | format-table -property TimeGenerated,ReplacementStrings -AutoSize > arquivo.txt

Após a extração dos dados, basta tratá-los por exemplo em uma planilha Excel.

Para mais informações sobre o comando “Get-EventLog” consulte o arquivo de ajuda incluindo exemplos através do comando “Get-help Get-EventLog -Full” ou on-line no link http://go.microsoft.com/fwlink/?LinkID=113314.