Crie Relatórios de Logon do Active Directory com o PowerShell. Como sabemos, a auditoria em um ambiente Active Directory (AD) é crucial para segurança. É fundamental descobrir o que o usuário fez e em qual sistema eles fizeram login. Portanto, uma das tarefas essenciais com as quais a maioria dos administradores está lidando hoje é descobrir onde um usuário fez login. Este artigo guiará passo a passo para aprender como utilizar o Event Viewer interno nos controladores de domínio (DC), descobrir onde um usuário fez login e gerar um relatório abrangente de logon usando PowerShell.
Então, vamos continuar com o artigo Criar Relatórios de Logon do Active Directory com o PowerShell.
Criar Relatórios de Logon do Active Directory
Pré-requisitos
Como utilizaremos o Visualizador de Eventos e monitoraremos os eventos por dias, precisamos garantir que o tamanho de nossos logs de eventos seja suficiente. Embora possamos já ter habilitado essas configurações, as revisaremos novamente caso outras pessoas precisem aumentar o tamanho do log de eventos.
Se não alteramos nenhuma configuração anteriormente, a configuração de tamanho padrão de nosso log de eventos deve ser de cerca de 64 MB. No entanto, o aumento do tamanho pode ser necessário, principalmente se lidarmos com vários DCs em nosso ambiente. Por exemplo, se desejarmos acompanhar logons de auditoria por vários dias, precisaremos de muito mais espaço no Visualizador de Eventos.
Criando uma GPO
1. Como primeiro passo na preparação do ambiente, vamos criar um Objeto de Diretiva de Grupo (GPO) que contenha as configurações de Tamanho do Log de Eventos. Vamos abrir o Console de Gerenciamento de Diretiva de Grupo (GPMC), criar um GPO. Para abrir o console, pesquise por Diretiva de Grupo ou digite gpmc.msc na janela Executar (Ctrl+R).
2. No painel de navegação, expanda Floresta: NomeDaFloresta, expanda Domínios, expanda NomeDoDomínio, e em seguida clique em Objetos de Diretiva de Grupo. Depois, clique em Ação, e então clique em Novo.
3. Localize o caminho abaixo dentro do novamente criado GPO:
4. Altere o tamanho do evento de Segurança com base em nossos ambientes e requisitos. Além disso, se não houver preocupações com espaço em disco e desempenho, é possível configurar as configurações em um nível máximo de 4 GB.
5. O próximo passo é opcional se os controladores de domínio não tiverem configurações de firewall. No entanto, devemos ser capazes de consultar logs de eventos de vários controladores de domínio e possivelmente vários locais. Como resultado, é prudente garantir que o Monitoramento de Log de Eventos Remotos esteja habilitado via firewall.
Infelizmente, só é possível cobrir alguns detalhes sobre a configuração das configurações de firewall. Ainda assim, a imagem abaixo mostrará todas as configurações necessárias para habilitar Monitoramento de Log de Eventos Remotos em nossos controladores de domínio.
6. Agora, conecte o GPO que acabamos de criar à OU de Controladores de Domínio e aguarde alguns eventos para serem populados. O evento depende do ambiente e podemos começar a consultar auditorias imediatamente ou esperar alguns dias. Agora que configuramos corretamente nosso registro, podemos prosseguir com a execução do script PowerShell, que será discutido na próxima seção do artigo.
A seguir, com a Criação de Relatórios de Logon no Active Directory com PowerShell é a parte principal do título do artigo. Por favor, continue lendo.
Crie Relatórios de Logon do AD com PowerShell
git clone https://github.com/InfraSOS/Get-UserLastLogon.git
O script utiliza o módulo ActiveDirectory , mas não será necessário instalá-lo manualmente, pois o script verifica se o módulo está presente em nosso sistema. Uma vez baixado, inicie o PowerShell e navegue até a pasta ou unidade onde o script foi baixado.
Se editarmos o arquivo baixado, veremos quatro funções principais. Essas quatro funções principais são Param, Begin, Process e End.
Explicando o Script do PowerShell
A seção Param contém os parâmetros necessários para executar o script. Como mostrado no bloco de código abaixo, precisamos de três parâmetros para o script funcionar. Explicaremos esses parâmetros mais tarde.
param (
[Parameter(Mandatory = $true)]
[String]$User,
[Parameter(Mandatory = $false)]
[Array]$Server = @((Get-ADDomainController -Filter *).Name) ,
[Parameter(Mandatory = $false)]
[Array]$Days = 90
)
Como uma melhor prática, variáveis e informações gerais devem ser colocadas na seção Begin para evitar lotar a parte principal do script.
[Array]$Table = $null
$DomainControllers = $Server
$AllDomainControllers = @((Get-ADDomainController -Filter *).Name)
[Array]$ExclusionList = @($User,'krbtgt')
$DCCount = $DomainControllers.Count
$UPN = ((get-addomain).DNSRoot).toUpper()
$DateFilter = "-"+$days
$DateThen = (((Get-Date).AddDays($DateFilter)).ToString("yyyy-MM-dd"))+"T20:30:00.000Z"
$DateNow = (Get-Date -Format yyyy-MM-dd)+"T20:30:00.999Z"
$ForestRoot = ((Get-ADForest).rootDomain).toUpper()
$Counter = 0
O script Begin também formula um filtro primário para consultar o log de eventos. Em seguida, o script enviará esse filtro para cada controlador de domínio para reunir informações. Como podemos ver nessas linhas, existem algumas variáveis discutidas anteriormente, como $UPN e $User.
[xml]$FilterXML = @"
*[System[(EventID=4769)
and TimeCreated[@SystemTime>='$DateThen'
and @SystemTime<='$DateNow']]]
and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]
"@
A seção Processo é a função essencial, onde o script consulta os dados para gerar um relatório. O bloco de código abaixo é o comando foreach que é executado cada vez que fazemos login em outro DC para consultar dados.
Foreach($DCName in $DomainControllers){...}
Primeiro, reunimos eventos em nosso primeiro DC. Em seguida, o próximo passo é extrair informações valiosas de cada evento e salvá-las em um objeto antes de passar para o próximo evento. Uma vez concluído com o primeiro DC, o script passa para outro DC e repete o processo.
Por fim, a seção Fim mostrará o relatório final gerado.
end{
$Table = $Table | Where-Object {($_.Location -notin $AllDomainControllers) -and ($_.Location -ne $ForestRoot) -and ($_.Location -notin $ExclusionList)}
$Table | Sort Time | FT Time,User,Location,Domain,DC -AutoSize
}
Leia também Confira o Gerenciamento do Active Directory
Executando o Script do PowerShell
Para começar, abra o PowerShell e digite o seguinte comando abaixo para carregar o cmdlet na memória.
. .\Get-UserLastLogon.ps1
Quando pressionamos a tecla Enter, pode ocorrer um erro indicando que a execução do script está desabilitada devido à política de execução do PowerShell, ou não ocorrerá nenhum erro. No caso de um erro, abra um console do PowerShell com privilégios administrativos, digite os comandos a seguir para permitir a execução de scripts e, em seguida, repita o comando anterior.
Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1
Agora que o script está totalmente carregado, vamos considerá-lo um exemplo para descobrir em quais estações de trabalho o usuário se conectou nos últimos 15 dias. Primeiro, digite o nome de usuário com o –User parâmetro e o período de tempo com o –Days parâmetro e aperte a tecla Enter.
Get-UserLastLogon -User marion -Days 15
Como você deve se lembrar, temos outro parâmetro chamado -Server parâmetro. Se não fornecemos um valor para o -Server parâmetro, consideraremos todos os controladores de domínio para preencher esse parâmetro. Agora, se tivermos um DC específico em mente para um target de consulta de pesquisa, podemos especificá-lo como um valor do -Server parâmetro.
Após a execução, o script exibirá uma barra de progresso informando-nos sobre seu status e quanto tempo levará para ser concluído. Agora podemos ver um relatório gerado após a execução do script. O relatório nos diz em quais estações de trabalho o usuário se conectou nos últimos 15 dias.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Compreendendo o Script do PowerShell
Quando executamos o script, no início, ele verifica se a conta de usuário existe ou não. Portanto, é evidente que se o nome de usuário ou ID inserido não existir, não precisamos executar o restante dos scripts.
No seguinte passo, calculamos as variáveis necessárias e as enviamos para o DC, juntamente com o filtro necessário para consultar os eventos para o usuário escolhido. Por fim, o script envia uma solicitação ao primeiro controlador de domínio na lista e os eventos consultados relacionados ao usuário selecionado são salvos em uma variável.
A lista de eventos salvos que o script iniciará e as etapas subsequentes envolverão a coleta de dados valiosos a partir dos eventos. Por fim, o script atribui os dados extraídos a uma variável, como o domínio, nome do DC, hora de login e estação de trabalho de login.
No final, o script passa pelo seguinte DC e repete o processo.
O script exibirá uma lista de computadores para nós assim que contatar o último DC e coletar suas informações.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Obrigado por ler Criar Relatórios de Login do Active Directory com PowerShell. Vamos concluir.
Conclusão da Criação de Relatórios de Login do Active Directory
Neste guia, aprendemos como usar o visualizador de eventos essencial e combiná-lo com scripts PowerShell para encontrar uma lista de estações de trabalho onde um usuário fez login. O script consulta todos os DCs em um domínio, encontra os resultados e os analisa em um formato legível que podemos exportar como um relatório. Lembre-se de executar para verificar os pré-requisitos antes de executar o script fornecido.
Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/