Lorsque l’on souhaite superviser la modification de groupes à privilèges dans l’Active Directory il faut surveiller les Events suivants:
- EventId 4756: Ajout d’un membre dans le groupe
- EventId 4757: Retrait d’un membre dans le groupe
Scripts
A l’aide des quelques lignes de Powershell ci dessous, vous pourrez superviser la modification de ce groupe.
Pour cela il vous est possible de l’intégrer dans une boucle à intervalle de 30 secondes (c’est le plus petit intervalle de temps que j’ai eu l’occasion d’essayer sur un AD de production) et d’envoyer les alertes par Mail ou dans un canal Teams via Microsoft Graph ou un relai SMTP.
Note:
Il faudra toutefois prendre soins de remplacer la commande « Write-Host » (présente pour le lab) par la méthode qui vous convient le mieux (Variable, sortie dans un fichier de logs, envoie de mail…).
# Variables
$Date = Get-Date
$FullDate = $Date.ToString("yyyy-MM-dd")
$PDC = $AllDC = Get-ADDomainController -Filter * | where {$_.OperationMasterRoles -contains "PDCEmulator"}
$PDC = $PDC.Name
# Check Modification Time for Schema Admins
$SchemaAdminsProperties = Get-ADGroup "Schema Admins" -Properties Modified -Server $PDC
$LastModifiedDay = ($SchemaAdminsProperties.modified).ToString("yyyy-MM-dd")
$Details = $SchemaAdminsProperties.modified
$StorageSchema = $Details
# Looking for check if a modification was made today
If (($LastModifiedDay -eq $FullDate) -and ($Details -ne $LastModificationTimeSchema)) {
$EventSchemaAdmin = Get-WinEvent -ComputerName $PDC -FilterHashtable @{LogName='Security';Id=4756,4757} -MaxEvents 200 | where {$_.TimeCreated -match $Details}
$EventSchemaAdmin | foreach {
$TimeCreated = $_.TimeCreated
$SchemaAdminAction = $_
If($SchemaAdminAction.Properties[2].value -eq 'Schema Admins') {
$By = $SchemaAdminAction.Properties[6].value
$Account = $SchemaAdminAction.Properties[0].value
Switch ($SchemaAdminAction.ID) {
4756 {
Write-Host "$Account was added by $By on Schema Group at $Details"
}
4757 {
Write-Host "$Account was removed by $By on Schema Group at $Details"
}
}
}
}
$LastModificationTimeSchema = $StorageSchema
}
Else {
$LastModificationTimeSchema = $StorageSchema
}
# Release
$SchemaAdminsProperties = $null
$LastModifiedDay = $null
$Details = $null

0 commentaires