Crie Relatórios de Logon do Active Directory com o PowerShell. Como sabemos, a auditoria em um ambiente Active Directory (AD) é crucial para a segurança. É fundamental descobrir o que o usuário fez e em qual sistema eles fizeram login. Portanto, uma das tarefas essenciais com que a maioria dos administradores está lidando hoje em dia é 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
Uma vez que vamos utilizar o Visualizador de Eventos e monitorar os eventos por dias, precisamos garantir que o tamanho dos nossos logs de eventos seja suficiente. Embora possamos já ter habilitado essas configurações, iremos revisá-las novamente se outras pessoas precisarem aumentar o tamanho do log de eventos.
Se não tivermos alterado nenhuma configuração antes, o tamanho padrão do nosso log de eventos deve ser de cerca de 64 MB. No entanto, o aumento de tamanho pode ser necessário, principalmente se lidarmos com vários DCs em nosso ambiente. Por exemplo, se quisermos acompanhar as auditorias de logon por vários dias, precisaremos de muito mais espaço no visualizador de eventos.
Criar 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 então clique em Objetos de Diretiva de Grupo. Em seguida, clique em Ação, e então clique em Novo.
3. Localize o caminho abaixo dentro do novo 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 de vários sites. 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 o 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 do PowerShell, que será discutido na próxima seção do artigo.
A seguir, com a criação de Relatórios de Logon do 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
Para começar, faça o download e copie o script para um diretório ou pasta. Alternativamente, se você tiver o git instalado, podemos executar o seguinte comando.
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 a existência do módulo 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 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 que o script funcione. Explicaremos esses parâmetros mais adiante.
param (
[Parameter(Mandatory = $true)]
[String]$User,
[Parameter(Mandatory = $false)]
[Array]$Server = @((Get-ADDomainController -Filter *).Name) ,
[Parameter(Mandatory = $false)]
[Array]$Days = 90
)
Como prática recomendada, variáveis e informações gerais devem ser colocadas na seção Begin para evitar o congestionamento da 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 DC para reunir informações. Como podemos ver nestas linhas, existem algumas variáveis previamente discutidas, 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 faz consultas para os dados a fim de gerar um relatório. O bloco de código abaixo é o comando foreach que é executado toda 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 prosseguir para o próximo evento. Uma vez concluído com o primeiro DC, o script passa para outro DC e repete o processo.
Por último, 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
}
Também leia 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
Ao pressionarmos 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 uma janela 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 como um exemplo para descobrir quais estações de trabalho o usuário acessou 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 pressione 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 este parâmetro. Agora, se tivermos um DC específico em mente para direcionar uma consulta de pesquisa, podemos especificar 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 fez login nos últimos 15 dias.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Entendendo 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 próximo 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. Finalmente, 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 os passos subsequentes envolverão a coleta de dados valiosos dos eventos. Finalmente, 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 Crie 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 controladores de domínio 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/