Créer des Rapports de Connexion Active Directory avec PowerShell

Créez des rapports de connexion à Active Directory avec PowerShell. Comme nous le savons, l’audit dans un environnement Active Directory (AD) est crucial pour la sécurité. Il est essentiel de savoir ce que l’utilisateur a fait et sur quel système il s’est connecté. Par conséquent, l’une des tâches essentielles auxquelles la plupart des administrateurs sont confrontés aujourd’hui est de savoir où un utilisateur s’est connecté. Cet article vous guidera pas à pas pour apprendre comment utiliser l’Observateur d’événements intégré sur les contrôleurs de domaine (DC), trouver où un utilisateur s’est connecté et générer un rapport de connexion complet à l’aide de PowerShell.

Alors, continuons avec l’article Créer des rapports de connexion à Active Directory avec PowerShell.

Créer des rapports de connexion à Active Directory

Prérequis

Puisque nous utiliserons l’Explorateur d’événements et le surveillance des événements sur une période de jours, nous devons nous assurer que la taille de nos journaux d’événements est suffisante. Bien que nous avons peut-être déjà activé ces paramètres, nous les examinerons à nouveau si d’autres personnes doivent augmenter la taille du journal d’événements.

Si nous n’avons pas modifié de configuration avant, la taille par défaut de notre journal d’événements devrait être d’environ 64 MB. Cependant, une augmentation de taille peut s’avérer nécessaire, principalement si nous traitons plusieurs serveurs de noms de domaine (DC) dans notre environnement. Par exemple, si nous souhaitons suivre les inscriptions d’audit sur plusieurs jours, nous aurons besoin d’un espace beaucoup plus grand dans l’Explorateur d’événements.

Création d’une GPO

1. Comme première étape dans la préparation de l’environnement, nous allons créer un Objet de Stratégie de Groupe (GPO) qui contient les paramètres de Taille du Journal d’événements. Ouvrons la Console de Gestion des Stratégies de Groupe (GPMC), créons un GPO. Pour ouvrir la console, recherchez Stratégie de Groupe ou tapez gpmc.msc dans la fenêtre Exécuter (Ctrl+R).

2. Dans le volet de navigation, développez Forêt: NomDeLaForêt, développez Domaines, développez NomDuDomaine, puis cliquez sur Objets de Stratégie de Groupe. Ensuite, cliquez sur Action, puis sur Nouveau.

3. Localisez le chemin ci-dessous à l’intérieur du nouveau GPO:

4. Modifiez la taille de l’événement de Sécurité en fonction de nos environnements et de nos besoins. De plus, s’il n’y a pas de préoccupations concernant l’espace disque et les performances, il est possible de configurer les paramètres au niveau maximal de 4 Go.

5. L’étape suivante est facultative si les contrôleurs de domaine n’ont pas de paramètres de pare-feu. Cependant, nous devons être en mesure d’interroger les journaux d’événements à partir de plusieurs contrôleurs de domaine et éventuellement de plusieurs sites. Par conséquent, il est prudent de s’assurer que la Surveillance des journaux d’événements à distance est activée via le pare-feu.

Malheureusement, il est seulement possible de couvrir quelques détails concernant la configuration des paramètres de pare-feu. Cependant, l’image ci-dessous montrera tous les paramètres nécessaires pour activer la Surveillance des Journaux d’Événements à Distance sur nos contrôleurs de domaine.

6. Maintenant, connectez le GPO que nous venons de créer à l’OU Domain Controllers et attendez que certains événements se remplissent. L’événement dépend de l’environnement, et nous pouvons commencer à interroger les audits immédiatement ou attendre quelques jours. Maintenant que nous avons correctement configuré notre journalisation, nous pouvons passer à l’exécution du script PowerShell, qui sera discuté dans la prochaine section de l’article.

La prochaine étape avec la création de rapports de connexion Active Directory avec PowerShell est la partie principale du titre de l’article. Veuillez continuer à lire.

Créer des rapports de connexion AD avec PowerShell

Pour commencer, téléchargez et copiez le script dans un répertoire ou un dossier. Alternativement, si vous avez git installé, vous pouvez exécuter la commande suivante.

git clone https://github.com/InfraSOS/Get-UserLastLogon.git

Le script utilise le module ActiveDirectory , mais nous n’aurons pas besoin de l’installer manuellement car le script vérifie la présence du module dans notre système. Une fois téléchargé, lancez PowerShell et accédez au dossier ou au lecteur où se trouve le script téléchargé.

Si nous éditons le fichier téléchargé, nous verrons quatre fonctions principales. Ces quatre fonctions principales sont Param, Begin, Process et End.

Explication du script PowerShell

La section Param contient les paramètres nécessaires à l’exécution du script. Comme le montre le bloc de code ci-dessous, nous avons besoin de trois paramètres pour que le script fonctionne. Nous expliquerons ces paramètres plus tard.

param (
    [Parameter(Mandatory = $true)]
    [String]$User,

    [Parameter(Mandatory = $false)]
    [Array]$Server = @((Get-ADDomainController -Filter *).Name) ,

    [Parameter(Mandatory = $false)]
    [Array]$Days = 90
)

Comme bonne pratique, les variables et les informations générales doivent être placées dans la section Begin pour éviter d’encombrer la partie principale du 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

Le script Begin formule également un filtre primaire pour interroger le journal des événements. Ensuite, le script enverra ce filtre à chaque contrôleur de domaine pour collecter des informations. Comme nous pouvons le voir dans ces lignes, il y a des variables précédemment discutées, telles que $UPN et $User.

[xml]$FilterXML = @"


    *[System[(EventID=4769)
	and TimeCreated[@SystemTime>='$DateThen'
	and @SystemTime<='$DateNow']]]
	and*[EventData[Data[@Name='TargetUserName'] and (Data='$User@$UPN')]]


"@

La section Processus est la fonction essentielle, où le script interroge les données pour générer un rapport. Le bloc de code ci-dessous est la commande foreach qui s’exécute à chaque fois que nous nous connectons à un autre DC pour interroger les données.

Foreach($DCName in $DomainControllers){...}

Nous collectons d’abord les événements sur notre premier DC. Ensuite, l’étape suivante consiste à extraire des informations précieuses de chaque événement et à les sauvegarder dans un objet avant de passer à l’événement suivant. Une fois terminé avec le premier DC, le script passe à un autre DC et répète le processus.

Enfin, la section Fin affichera le rapport final généré.

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
}

Exécution du script PowerShell

Pour commencer, ouvrez PowerShell et tapez la commande suivante ci-dessous pour charger la cmdlet en mémoire. Lorsque nous appuyons sur la touche Entrée, il peut y avoir une erreur indiquant que l’exécution du script est désactivée en raison de la stratégie d’exécution PowerShell, ou il n’y aura pas d’erreur. En cas d’erreur, ouvrez une console PowerShell avec des privilèges d’administration, tapez les commandes suivantes ci-dessous pour autoriser l’exécution du script, puis répétez la commande précédente.

. .\Get-UserLastLogon.ps1

Lorsque nous appuyons sur la touche Entrée, il se peut qu’une erreur indique que l’exécution du script est désactivée en raison de la stratégie d’exécution PowerShell, ou il n’y aura pas d’erreur. En cas d’erreur, ouvrez une console PowerShell avec des privilèges d’administrateur, tapez les commandes suivantes pour permettre l’exécution du script, puis répétez la commande précédente.

Set-ExecutionPolicy RemoteSigned
. .\Get-UserLastLogon.ps1

Maintenant que le script est entièrement chargé, considérons-le comme un exemple pour déterminer quels postes de travail l’utilisateur a utilisés au cours des 15 derniers jours. Tout d’abord, tapez le nom d’utilisateur avec le –Utilisateur paramètre et la période de temps avec le –Jours paramètre et appuyez sur Entrée

Get-UserLastLogon -User marion -Days 15

Comme vous vous en souvenez peut-être, nous avons un autre paramètre appelé le -Server paramètre. Si nous ne fournissons pas de valeur au -Server paramètre, nous considérerons tous les domaines contrôleurs pour remplir ce paramètre. Maintenant, si nous avons un DC spécifique en tête pour cibler une requête de recherche, nous pouvons le spécifier comme valeur du -Server paramètre.

Après l’exécution, le script affichera une barre de progression nous informant de son statut et du temps qu’il faudra pour se terminer. Maintenant, nous pouvons voir un rapport généré après l’exécution du script. Le rapport nous indique quels postes de travail l’utilisateur a utilisés au cours des 15 derniers jours.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

Comprendre le script PowerShell

Lorsque nous exécutons le script, au début, il vérifie si le compte d’utilisateur existe ou non. Par conséquent, il est évident que si le nom d’utilisateur ou l’ID entré n’existe pas, nous n’avons pas besoin d’exécuter le reste des scripts.

Dans l’étape suivante, nous calculons les variables requises et les envoyons au contrôleur de domaine, ainsi que le filtre nécessaire pour interroger les événements pour notre utilisateur choisi. Enfin, le script envoie une requête au premier contrôleur de domaine de la liste et les événements interrogés liés à l’utilisateur sélectionné sont enregistrés dans une variable.

La liste des événements enregistrés que le script va démarrer et les étapes suivantes impliqueront la collecte de données précieuses à partir des événements. Enfin, le script attribue les données extraites à une variable, telles que le domaine, le nom du contrôleur de domaine, l’heure de connexion et le poste de travail de connexion.

À la fin, le script passe à travers le DC suivant et répète le processus.

Le script affichera une liste d’ordinateurs à nous une fois qu’il aura contacté le dernier contrôleur de domaine et recueilli ses informations.

Time                  User   Location      Domain  DC
----                  ----   --------      ------  --
11/19/2022 7:31:11 AM marion DESKTOP-IGK57 abc.com MARION-DC01

Merci de lire Créer des rapports de connexion Active Directory avec PowerShell. Nous allons conclure.

Conclusion des rapports de connexion Active Directory

Dans ce guide, nous avons appris comment utiliser l’observateur d’événements essentiel et le combiner avec des scripts PowerShell pour trouver une liste de postes de travail où un utilisateur s’est connecté. Le script interroge tous les DC (Contrôleurs de domaine) dans un domaine, trouve les résultats et les analyse dans un format lisible que nous pouvons exporter en tant que rapport. N’oubliez pas de vérifier les prérequis avant d’exécuter le script fourni.

Source:
https://infrasos.com/create-active-directory-logon-reports-with-powershell/