Skip to content

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

  1. Ouvrir Planificateur de tĂąches (taskschd.msc)
  2. Create Basic Task → "Alert Account Lockout"
  3. Trigger : "When a specific event is logged"
  4. Log : Security
  5. Source : Microsoft Windows Security Auditing
  6. Event ID : 4740
  7. Action : Send an email (nécessite configuration SMTP)
  8. 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

  1. É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
    

  2. Créer des Custom Views dans Event Viewer pour les événements fréquents

  3. Security → Filter → Event IDs: 4625, 4740, 4728
  4. Sauvegarder comme "Surveillance Sécurité Quotidienne"

  5. Documenter les alertes : Tenir un journal des incidents

    Date | Event ID | Description | Action Prise | Résolu ?
    -----|----------|-------------|--------------|----------
    

  6. 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 !
    

  7. Archiver les logs : Politique de rétention claire

  8. Security log : Minimum 90 jours
  9. System log : 30 jours
  10. Exporter réguliÚrement vers stockage sécurisé

❌ À ÉVITER

  1. ❌ Ignorer les avertissements de rĂ©plication (ne nous concerne pas dans cette formation)
  2. ❌ Ne surveiller qu'un seul DC (seulement si on en a plusieurs)
  3. ❌ Alertes trop sensibles (alert fatigue)
  4. ❌ Ne pas sĂ©curiser les logs (cible d'attaquants)
  5. ❌ 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

  1. Le monitoring AD n'est pas optionnel : C'est une nécessité de sécurité
  2. Commencer simple : Event IDs critiques + PowerShell de base
  3. Automatiser progressivement : Scripts → TĂąches planifiĂ©es → SIEM (outils de centralisations d'alertes en temps rĂ©el)
  4. Documenter les baselines : Savoir ce qui est normal
  5. Tester réguliÚrement : Vérifier que les alertes fonctionnent
  6. Corrélation : Un événement seul ne fait pas un incident