Cree informes de inicio de sesión de Directorio Activo con PowerShell. Como sabemos, la auditoría en un entorno de Directorio Activo (AD) es fundamental para la seguridad. Es crucial saber qué ha hecho el usuario y en qué sistema ha iniciado sesión. Por lo tanto, una de las tareas esenciales con las que la mayoría de los administradores se han de ocupar en estos días es descubrir dónde un usuario ha iniciado sesión. En este artículo se le guiará paso a paso a aprender cómo utilizar el visor de eventos integrado en los controladores de dominio (DC), descubrir dónde un usuario ha iniciado sesión y generar un informe de inicio de sesióncompleto utilizando PowerShell.
Por lo tanto, vamos a seguir con el artículo Cree informes de inicio de sesión de Directorio Activo con PowerShell.
Cree informes de inicio de sesión de Directorio Activo
Requisitos
Como vamos a usar el Visor de Eventos y monitorear los eventos por días, necesitamos asegurarnos de que el tamaño de nuestros registros de eventos es suficiente. Aunque podríamos haber ya habilitado estas configuraciones, las revisaremos de nuevo si otras personas necesitan aumentar el tamaño del registro de eventos.
Si antes no hemos cambiado ninguna configuración, el tamaño predeterminado de nuestro registro de eventos debería ser de alrededor de 64 MB. Sin embargo, puede ser necesario aumentar el tamaño, principalmente si tenemos varios DCs en nuestro entorno. Por ejemplo, si queremos mantener un seguimiento de entradas de auditoría de inicios de sesión por varios días, necesitará mucho más espacio en el visor de eventos.
Creando una GPO
1. Como primer paso en la preparación del entorno, crearemos un Objeto de Directiva de Grupo (GPO) que contenga la configuración de Tamaño del Registro de Eventos. Abramos la Consola de Administración de Directivas de Grupo (GPMC), creemos un GPO. Para abrir la consola, busque Directiva de Grupo o escriba gpmc.msc en la ventana Ejecutar (Ctrl+R).
2. En el panel de navegación, expanda Bosque: NombreDelBosque, expanda Dominios, expanda NombreDelDominio, y luego haga clic en Objetos de Directiva de Grupo. A continuación, haga clic en Acción, y luego haga clic en Nuevo.
3. Localiza la ruta a continuación dentro del nuevo GPO:
4. Cambia el tamaño del evento de Seguridad según nuestros entornos y requisitos. Además, si no hay preocupaciones sobre el espacio en disco y el rendimiento, es posible configurar los ajustes en un nivel máximo de 4 GB.
5. El siguiente paso es opcional si los controladores de dominio no tienen configuraciones de firewall. Sin embargo, debemos poder consultar los registros de eventos desde varios controladores de dominio y posiblemente varios sitios. Como resultado, es prudente asegurarse de que Monitoreo de Registro de Eventos Remotos esté habilitado a través del firewall.
Desafortunadamente, solo es posible cubrir algunos detalles sobre la configuración de los ajustes del firewall. Aún así, la imagen a continuación mostrará todas las configuraciones necesarias para habilitar el Monitoreo de Registros de Eventos Remotos en nuestros controladores de dominio.
6. Ahora, conecta el GPO que acabamos de crear a la OU de Controladores de Dominio y espera a que se populen algunos eventos. El evento depende del entorno, y podemos comenzar a consultar auditorías inmediatamente o esperar un par de días. Ahora que hemos configurado correctamente nuestro registro, podemos pasar a ejecutar el script de PowerShell, el cual se discutirá en la próxima sección del artículo.
A continuación, la parte principal del título del artículo: Crear Informes de Inicio de Sesión en Active Directory con PowerShell. Por favor, continúa leyendo.
También lee Prueba las Herramientas de Monitoreo de Azure AD
Crear Informes de Inicio de Sesión en AD con PowerShell
Para empezar, descarga y copia el script en un directorio o carpeta. Alternativamente, si tienes git instalado, podemos ejecutar el siguiente comando.
git clone https://github.com/InfraSOS/Get-UserLastLogon.git
El script utiliza el módulo ActiveDirectory , pero no será necesario instalarlo manualmente ya que el script verifica la presencia del módulo en nuestro sistema. Una vez descargado, inicie PowerShell y navegue hasta la carpeta o unidad del script descargado.
Si editamos el archivo descargado, veremos cuatro funciones principales. Estas cuatro funciones principales son Param, Begin, Process y End.
Explicación del Script de PowerShell
La sección Param contiene los parámetros necesarios para ejecutar el script. Como se muestra en el bloque de código a continuación, necesitamos tres parámetros para que el script funcione. Explicaremos estos parámetros más adelante.
param (
[Parameter(Mandatory = $true)]
[String]$User,
[Parameter(Mandatory = $false)]
[Array]$Server = @((Get-ADDomainController -Filter *).Name) ,
[Parameter(Mandatory = $false)]
[Array]$Days = 90
)
Como buena práctica, las variables y la información general se colocan en la sección Begin para evitar saturar la parte principal del 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
El script Begin también formula un filtro primario para consultar el registro de eventos. Luego, el script enviará este filtro a cada DC para recopilar información. Como podemos ver en estas líneas, hay algunas variables discutidas previamente, como $UPN y $User.
[xml]$FilterXML = @"
*[System[(EventID=4769)
and TimeCreated[@SystemTime>='$DateThen'
and @SystemTime<='$DateNow']]]
and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]
"@
La sección Proceso es la función esencial, donde el script consulta los datos para generar un informe. El bloque de código a continuación es el comando foreach que se ejecuta cada vez que iniciamos sesión en otro DC para consultar datos.
Foreach($DCName in $DomainControllers){...}
Primero recopilamos eventos en nuestro primer DC. Luego, el siguiente paso es extraer información valiosa de cada evento y guardarla en un objeto antes de pasar al siguiente evento. Una vez hecho con el primer DC, el script se mueve a otro DC y repite el proceso.
Por último, la sección Fin mostrará el informe final generado.
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
}
También lea Consulte la Gestión de Directorio Activo
Ejecutando el Script de PowerShell
Para empezar, abra PowerShell y escriba el siguiente comando a continuación para cargar el cmdlet en la memoria.
. .\Get-UserLastLogon.ps1
Cuando presionamos la tecla Enter, podría aparecer un error indicando que la ejecución del script está deshabilitada debido a la directiva de ejecución de PowerShell, o no habrá error. En caso de error, abra una consola de PowerShell con privilegios administrativos, escriba los siguientes comandos a continuación para permitir la ejecución de scripts y luego repita el comando anterior.
Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1
Ahora que el script está completamente cargado, consideremos un ejemplo para averiguar en qué estaciones de trabajo el usuario inició sesión durante los últimos15 días. Primero, escriba el nombre de usuario con el –User parámetro y el período de tiempo con el –Days parámetro y presione Enter.
Get-UserLastLogon -User marion -Days 15
Como recordará, tenemos otro parámetro llamado el parámetro -Server. Si no proporcionamos un valor al parámetro -Server, consideraremos todos los controladores de dominio para llenar este parámetro. Ahora, si tenemos un DC específico en mente para dirigir una consulta de búsqueda, podemos especificarlo como un valor del parámetro -Server.
Después de ejecutarse, el script mostrará una barra de progreso informándonos de su estado y cuánto tiempo tardará en completarse. Ahora podemos ver un informe generado después de ejecutar el script. El informe nos dice en qué estaciones de trabajo el usuario ha iniciado sesión durante los últimos15 días.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Entendiendo el Script de PowerShell
Cuando ejecutamos el script, al principio, verifica si la cuenta de usuario existe o no. Por lo tanto, es evidente que si el nombre de usuario o ID ingresado no existe, no necesitamos ejecutar el resto de los scripts.
En el siguiente paso, calculamos las variables requeridas y las enviamos al DC, junto con el filtro necesario para consultar los eventos para nuestro usuario elegido. Finalmente, el script envía una solicitud al primer controlador de dominio en la lista y los eventos consultados relacionados con el usuario seleccionado se guardan en una variable.
La lista de eventos guardados que el script comenzará y los pasos posteriores implicarán la recopilación de datos valiosos de los eventos. Finalmente, el script asigna los datos extraídos a una variable, como el dominio, el nombre del DC, hora de inicio de sesión y estación de trabajo de inicio de sesión.
Al final, el script pasa por el siguiente DC y repite el proceso.
El script nos mostrará una lista de computadoras una vez que se comunique con el último DC y recopile su información.
Time User Location Domain DC
---- ---- -------- ------ --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01
Gracias por leer Crear Informes de Inicio de Sesión de Active Directory con PowerShell. Concluiremos.
Conclusión de Informes de Inicio de Sesión de Active Directory
En esta guía, aprendimos cómo utilizar el visor de eventos esencial y combinarlo con scripts de PowerShell para encontrar una lista de estaciones de trabajo donde un usuario ha iniciado sesión. El script realiza consultas en todos los controladores de dominio de un dominio, encuentra los resultados y los analiza en un formato legible que podemos exportar como un informe. Recuerda ejecutar una comprobación de los requisitos previos antes de ejecutar el script proporcionado.
Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/