Chapitre 10 - Surveillance et Monitoring Active Directory
đ Objectifs d'apprentissage
à la fin de ce chapitre, vous serez capable de : - Comprendre l'importance du monitoring dans Active Directory - Identifier les événements critiques à surveiller - Utiliser les outils natifs Windows pour le monitoring - Configurer des alertes basiques - Analyser les logs d'événements AD - Détecter des anomalies de sécurité courantes
đŻ Pourquoi surveiller Active Directory ?
Active Directory est le cĆur de l'infrastructure IT dans la plupart des entreprises. Une dĂ©faillance ou une compromission peut paralyser toute l'organisation.
Scénarios critiques à détecter
| Scénario | Impact | Détection |
|---|---|---|
| Comptes verrouillés en masse | Perte de productivité, possible attaque brute force | Event ID 4740 |
| Modification non autorisĂ©e de groupes | ĂlĂ©vation de privilĂšges | Event ID 4728, 4732, 4756 |
| Ăchecs d'authentification rĂ©pĂ©tĂ©s | Tentative d'intrusion | Event ID 4625 |
| Réplication AD échouée | Incohérence des données | Event ID 2042, 1925 |
| Modification de GPO | Changement de configuration critique | Event ID 5136, 5137 |
đ Les 3 Piliers du Monitoring AD
1ïžâŁ DisponibilitĂ© (Availability)
- Les contrÎleurs de domaine sont-ils opérationnels ?
- Les services AD essentiels fonctionnent-ils ?
- La réplication fonctionne-t-elle correctement ?
2ïžâŁ Performance (Performance)
- Temps de réponse LDAP acceptable ?
- Charge CPU/Mémoire normale ?
- File d'attente de réplication sous contrÎle ?
3ïžâŁ SĂ©curitĂ© (Security)
- Activités suspectes (connexions anormales) ?
- Modifications non autorisées ?
- Tentatives d'élévation de privilÚges ?
đ Event IDs Essentiels Ă ConnaĂźtre
đ SĂ©curitĂ© (Security Log)
Authentification
- 4624 : Connexion réussie (logon successful)
- 4625 : Ăchec de connexion (logon failed)
- 4634 : Déconnexion (logoff)
- 4648 : Connexion avec identifiants explicites (runas)
Gestion des Comptes
- 4720 : Création de compte utilisateur
- 4722 : Activation de compte
- 4723 : Tentative de changement de mot de passe
- 4724 : Réinitialisation de mot de passe
- 4725 : Désactivation de compte
- 4726 : Suppression de compte
- 4740 : Verrouillage de compte
Gestion des Groupes
- 4728 : Membre ajouté à un groupe de sécurité global
- 4729 : Membre retiré d'un groupe de sécurité global
- 4732 : Membre ajouté à un groupe de sécurité local
- 4733 : Membre retiré d'un groupe de sécurité local
- 4756 : Membre ajouté à un groupe de sécurité universel
GPOs
- 5312 : Erreur d'application de GPO
- 5126 : La stratégie de groupe a reçu correctement les objets de stratégie de groupe applicables du contrÎleur du domaine
- 5017 : Temps de traitement GPO dépassé
- 5018 : Temps de traitement GPO précédent dépassé
- 5136 : Création d'un GPO
- 5137 : Modification d'un GPO
- 5138 : Suppression d'un GPO
Active Directory
- 4662 : Opération effectuée sur un objet AD
- 5136 : Modification d'objet AD (attribut changé)
- 5137 : Création d'objet AD
- 5138 : Récupération d'objet AD depuis la corbeille
- 5139 : Déplacement d'objet AD
- 5141 : Suppression d'objet AD
- 5016 : Avertissement traitement GPO
âïž SystĂšme (System Log)
Services AD
- 1000 : Active Directory Web Services démarré
- 1202 : Promotion/rétrogradation DC
- 1963 : Ăchec rĂ©solution DNS pour rĂ©plication
- 1925 : Ăchec de rĂ©plication
- 2042 : Réplication non effectuée depuis trop longtemps
đ ïž Outils Natifs de Monitoring
1. Event Viewer (Observateur d'événements)
Lancer l'observateur d'événements despuis le gestionnaire du serveur. Cet outil vous permet de chercher dans les logs du systÚme, tant les logs de Windows comme les logs des applications installées.
Vous pouvez observer directement les logs dans Journaux Windows et Journaux des applications et des services, ou bien créer un affichage personnalisé (ex: chercher tous les événements de verrouillage de compte, ou tous les événements de GPO echouée).
Filtrage rapide : - Clic droit sur un log â Filter Current Log - SĂ©lectionner les Event IDs pertinents - Sauvegarder comme Custom View pour rĂ©utilisation
2. PowerShell - Get-EventLog / Get-WinEvent
# Récupérer les 10 derniers échecs de connexion
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625} -MaxEvents 10
# Comptes verrouillés dans les derniÚres 24h
$date = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4740; StartTime=$date}
# Modifications de groupes privilégiés
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4728,4732,4756} -MaxEvents 50
3. Performance Monitor (PerfMon)
Compteurs AD critiques :
| Catégorie | Compteur | Seuil d'alerte |
|---|---|---|
| NTDS | DRA Pending Replication Synchronizations | > 50 |
| NTDS | LDAP Client Sessions | Baseline à établir |
| NTDS | LDAP Searches/sec | > 200 peut indiquer une charge élevée |
| Database | Database Cache % Hit | < 90% (besoin de RAM) |
| Processor | % Processor Time | > 80% soutenu |
| Memory | Available MBytes | < 1 GB critique |
4. Active Directory Health Check (dcdiag)
# Diagnostic complet du DC
dcdiag /v
# Tester la réplication (ne nous concerne pas, on n'a pas de replications)
# dcdiag /test:replications
# Vérifier la connectivité DNS
dcdiag /test:dns
# Tester les services AD
dcdiag /test:services
5. Replication Status (repadmin)
(Nous n'avons pas fait de replications pendant la formation)
# Voir l'état de réplication
repadmin /replsummary
# Forcer la réplication
repadmin /syncall /AdeP
# Afficher les partenaires de réplication
repadmin /showrepl
đš Configuration d'Alertes Basiques
Méthode 1 : Planificateur de tùches + Event Trigger
Scénario : Alerte email sur verrouillage de compte
- Ouvrir Planificateur de tĂąches (
taskschd.msc) - Create Basic Task â "Alert Account Lockout"
- Trigger : "When a specific event is logged"
- Log : Security
- Source : Microsoft Windows Security Auditing
- Event ID : 4740
- Action : Send an email (nécessite configuration SMTP)
- OU exécuter un script PowerShell :
# C:\Scripts\Alert-AccountLockout.ps1
$event = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4740} -MaxEvents 1
$user = $event.Properties[0].Value
$computer = $event.Properties[1].Value
Send-MailMessage -To "admin@entreprise.com" `
-From "dc01@entreprise.com" `
-Subject "â ïž ALERTE: Compte verrouillĂ© - $user" `
-Body "Compte: $user`nOrdinateur: $computer`nHeure: $($event.TimeCreated)" `
-SmtpServer "smtp.entreprise.com"
Méthode 2 : PowerShell Scheduled Job
# Script de surveillance actif (à exécuter toutes les 15 min via tùche planifiée)
$depuis = (Get-Date).AddMinutes(-15)
# Vérifier les échecs de connexion massifs
$echecs = Get-WinEvent -FilterHashtable @{
LogName='Security';
ID=4625;
StartTime=$depuis
} -ErrorAction SilentlyContinue
if ($echecs.Count -gt 20) {
Write-Warning "â ïž $($echecs.Count) Ă©checs de connexion dĂ©tectĂ©s en 15 minutes!"
# Envoyer alerte
}
# Vérifier les modifications de groupes Admin
$modifGroupes = Get-WinEvent -FilterHashtable @{
LogName='Security';
ID=4728,4732,4756;
StartTime=$depuis
} -ErrorAction SilentlyContinue | Where-Object {
$_.Message -match "Domain Admins|Enterprise Admins|Schema Admins"
}
if ($modifGroupes) {
Write-Warning "â ïž CRITIQUE: Modification de groupe privilĂ©giĂ© dĂ©tectĂ©!"
# Envoyer alerte immédiate
}
đ Reporting Basique
Script : Rapport Quotidien de Sécurité
# Rapport-Quotidien-AD.ps1
param(
[int]$Heures = 24,
[string]$EmailDest = "admin@entreprise.com"
)
$debut = (Get-Date).AddHours(-$Heures)
$rapport = @"
âââââââââââââââââââââââââââââââââââââââââââââââ
RAPPORT QUOTIDIEN ACTIVE DIRECTORY
Période: $debut à $(Get-Date)
âââââââââââââââââââââââââââââââââââââââââââââââ
"@
# 1. Comptes créés
$comptesCreated = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4720; StartTime=$debut} -ErrorAction SilentlyContinue
$rapport += "`nđ€ COMPTES CRĂĂS: $($comptesCreated.Count)`n"
$comptesCreated | ForEach-Object {
$rapport += " - $($_.Properties[0].Value) Ă $($_.TimeCreated)`n"
}
# 2. Comptes verrouillés
$verrouilles = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4740; StartTime=$debut} -ErrorAction SilentlyContinue
$rapport += "`nđ COMPTES VERROUILLĂS: $($verrouilles.Count)`n"
$verrouilles | ForEach-Object {
$rapport += " - $($_.Properties[0].Value) verrouillé par $($_.Properties[1].Value)`n"
}
# 3. Modifications de groupes
$groupesModif = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4728,4732,4756; StartTime=$debut} -ErrorAction SilentlyContinue
$rapport += "`nđ„ MODIFICATIONS DE GROUPES: $($groupesModif.Count)`n"
# 4. Ăchecs de connexion (top 5 utilisateurs)
$echecs = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4625; StartTime=$debut} -ErrorAction SilentlyContinue
$topEchecs = $echecs | Group-Object {$_.Properties[5].Value} | Sort-Object Count -Descending | Select-Object -First 5
$rapport += "`nâ ĂCHECS DE CONNEXION: $($echecs.Count) total`n"
$topEchecs | ForEach-Object {
$rapport += " - $($_.Name): $($_.Count) échecs`n"
}
Write-Output $rapport
# Optionnel: Envoyer par email
# Send-MailMessage -To $EmailDest -From "dc01@entreprise.com" -Subject "Rapport AD Quotidien" -Body $rapport -SmtpServer "smtp.entreprise.com"
đ Bonnes Pratiques pour DĂ©butants
â Ă FAIRE
-
Ătablir une baseline : Savoir ce qui est « normal » avant de dĂ©tecter les anomalies (ex. : attaque par dĂ©ni de service par quelqu'un qui simule beaucoup de connexions simultanĂ©es)
# Exemple: Combien de connexions/jour normalement ? $baseline = Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4624} -MaxEvents 1000 $baseline.Count / 7 # Moyenne sur 7 jours -
Créer des Custom Views dans Event Viewer pour les événements fréquents
- Security â Filter â Event IDs: 4625, 4740, 4728
-
Sauvegarder comme "Surveillance Sécurité Quotidienne"
-
Documenter les alertes : Tenir un journal des incidents
Date | Event ID | Description | Action Prise | Résolu ? -----|----------|-------------|--------------|---------- -
Tester les alertes : Simuler des événements pour vérifier la détection
# Simuler un verrouillage (3 mauvais mots de passe) # Avec un compte de test bien sûr ! -
Archiver les logs : Politique de rétention claire
- Security log : Minimum 90 jours
- System log : 30 jours
- Exporter réguliÚrement vers stockage sécurisé
â Ă ĂVITER
- â Ignorer les avertissements de rĂ©plication (ne nous concerne pas dans cette formation)
- â Ne surveiller qu'un seul DC (seulement si on en a plusieurs)
- â Alertes trop sensibles (alert fatigue)
- â Ne pas sĂ©curiser les logs (cible d'attaquants)
- â Oublier de monitorer les admins eux-mĂȘmes
đ Ressources ComplĂ©mentaires
Documentation Microsoft
Outils Tiers (Aperçu)
- Netwrix Auditor : Auditing AD complet (commercial)
- ManageEngine ADAudit Plus : Monitoring temps réel
- Splunk : SIEM pour agrégation logs
- Graylog : Alternative open-source Ă Splunk
Scripts Communautaires
đ Points ClĂ©s Ă Retenir
- Le monitoring AD n'est pas optionnel : C'est une nécessité de sécurité
- Commencer simple : Event IDs critiques + PowerShell de base
- Automatiser progressivement : Scripts â TĂąches planifiĂ©es â SIEM (outils de centralisations d'alertes en temps rĂ©el)
- Documenter les baselines : Savoir ce qui est normal
- Tester réguliÚrement : Vérifier que les alertes fonctionnent
- Corrélation : Un événement seul ne fait pas un incident