Chapitre 913 minAvancé
Journaliser et détecter : les événements à surveiller
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- activer l'audit nécessaire sur les contrôleurs de domaine ;
- associer chaque attaque aux identifiants d'événements qui la trahissent ;
- écrire les requêtes et les seuils d'alerte d'une première détection ;
- poser un compte leurre et centraliser les journaux vers le SIEM.
4 exercices corrigés2 schémas
Prévenir ne suffit pas : il faut aussi voir une attaque pendant qu'elle se déroule. Les contrôleurs de domaine enregistrent, si on le leur demande, les ouvertures de session, les demandes de tickets, les changements de groupes et les modifications de l'annuaire. Ce chapitre explique quel audit activer, quels identifiants d'événements trahissent chaque attaque du chapitre 3, comment écrire les premières alertes, et pourquoi il faut centraliser ces journaux hors de portée de l'attaquant, vers le SIEM de Sorbier.
Activer le bon audit
Le journal Sécurité ne contient que ce que la stratégie d'audit demande d'enregistrer. Sur les contrôleurs, une partie est activée par défaut ; sur les serveurs membres et les postes, beaucoup moins. On règle l'audit par GPO, avec la configuration avancée de la stratégie d'audit (plus précise que les neuf catégories de l'ancienne stratégie) : Configuration ordinateur > Stratégies > Paramètres Windows > Paramètres de sécurité > Configuration avancée de la stratégie d'audit > Stratégies d'audit. Le cours Windows Server en donne le tableau complet ; pour la sécurité de l'annuaire, les sous-catégories essentielles sur les contrôleurs :
| Catégorie > sous-catégorie | Audit | Ce qu'on y voit |
|---|---|---|
| Connexion de compte > Service d'authentification Kerberos | Succès et échec | Demandes de TGT (4768, 4771) : force brute, pulvérisation |
| Connexion de compte > Opérations de ticket du service Kerberos | Succès et échec | Tickets de service (4769) : Kerberoasting, types de chiffrement |
| Connexion de compte > Valider les informations d'identification | Succès et échec | Validations NTLM par les contrôleurs (4776) |
| Ouverture/Fermeture de session > Ouvrir la session | Succès et échec | Ouvertures et échecs (4624, 4625) |
| Gestion des comptes > Gestion des groupes de sécurité | Succès | Ajouts et retraits de membres (4728, 4732, 4756) |
| Gestion des comptes > Gestion des comptes d'utilisateur | Succès et échec | Créations, désactivations, réinitialisations (4720 à 4740) |
| Accès DS > Accès au service d'annuaire | Succès | Accès aux objets de l'annuaire (4662), utile contre DCSync |
| Accès DS > Modification du service d'annuaire | Succès | Modifications d'objets, avec ancienne et nouvelle valeur (5136) |
Pour que la configuration avancée soit prise en compte, on active aussi l'option Audit : force les paramètres de sous-catégorie... (Options de sécurité), et on vérifie le résultat avec auditpol /get /category:*. L'audit de l'accès à l'annuaire (4662) demande en plus une liste d'audit (SACL) sur l'objet concerné ; on ne l'active que là où c'est utile, pour ne pas noyer le journal.
Les événements qui trahissent chaque attaque
| Attaque (chapitre 3) | Événements révélateurs | Lecture |
|---|---|---|
| Pulvérisation de mots de passe | Beaucoup de 4771 (0x18) ou 4776 (0xC000006A) sur des comptes différents, un ou deux échecs chacun, même source | Une tentative répartie pour rester sous le seuil de verrouillage |
| Force brute | Rafale de 4625/4771 sur un compte, puis un 4624 | Un mot de passe enfin trouvé |
| Kerberoasting | 4769 avec un type de chiffrement 0x17 (RC4) pour un compte de service, ou une rafale de 4769 pour de nombreux SPN | Demande d'un ticket à casser hors ligne |
| Comptes sans pré-authentification | 4768 avec pré-authentification 0 | Réponse exploitable hors ligne |
| Pass-the-hash | 4624 de type 3 en NTLM sur plusieurs machines, avec le même compte, en peu de temps | Déplacement latéral ; souvent plus visible sur les postes que sur les contrôleurs |
| DCSync | 4662 avec le droit étendu de réplication des secrets, demandé par un compte qui n'est pas un contrôleur de domaine | Extraction des secrets de l'annuaire |
| Golden ticket | Incohérences : 4769 sans 4768 préalable, TGT de durée anormale, compte inexistant dans un ticket | Un TGT fabriqué hors du KDC |
| Création d'accès cachés | 4720 (compte créé), 4728 vers Admins du domaine, 5136 sur AdminSDHolder, 4672 inattendu | Persistance de l'attaquant |
| Effacement des traces | 1102 (journal Sécurité effacé) | Dissimulation |
Deux champs affinent la lecture. Le type d'ouverture de session du 4624 dit comment la connexion s'est faite : 2 au clavier, 3 par le réseau (un partage), 10 par le bureau à distance. Le code d'état du 4625 donne la cause : 0xC000006A mauvais mot de passe, 0xC0000064 compte inexistant, 0xC0000234 compte verrouillé.
Lire une séquence
Face à une telle séquence, on raconte l'histoire : force brute réussie sur adm2-mdiallo, un compte de tier 2 ; puis demande d'un ticket de service en RC4, dont l'attaquant a cassé hors ligne le mot de passe d'un compte de service privilégié, utilisé pour l'ajout au groupe ; puis élévation de privilèges, avec adm2-mdiallo placé dans Admins du domaine, ce qu'un compte de tier 2 ne devrait jamais être ; enfin effacement des traces, de nuit. On traite comme un incident (cours Réponse à incident) : isoler le poste source, désactiver le compte, retirer l'appartenance au groupe, chercher d'autres actions, et, parce que le compte a touché au tier 0, prévoir le changement du mot de passe de krbtgt (chapitre 7).
Écrire les premières alertes en PowerShell
Get-WinEvent lit les journaux. Le paramètre -FilterHashtable filtre côté système, bien plus vite qu'un Where-Object.
# Les échecs Kerberos des dernières 24 heures, groupés par source : repère une pulvérisation
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4771; StartTime = (Get-Date).AddDays(-1) } |
ForEach-Object { [pscustomobject]@{ Compte = $_.Properties[0].Value; Source = $_.Properties[6].Value } } |
Group-Object Source | Sort-Object Count -Descending |
Select-Object Count, Name -First 10
# Les ajouts aux groupes de sécurité de la dernière semaine (4728, 4732, 4756)
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4728, 4732, 4756; StartTime = (Get-Date).AddDays(-7) } |
Format-List TimeCreated, Id, Message
# Les tickets de service chiffrés en RC4 (0x17), indice de Kerberoasting, sur les deux contrôleurs
Invoke-Command -ComputerName srv-ad, srv-ad2 -ScriptBlock {
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4769 } -MaxEvents 500 |
Where-Object { $_.Message -match 'Type de chiffrement du ticket\s*:\s*0x17' }
} | Select-Object PSComputerName, TimeCreated
# Tout effacement du journal Sécurité, où qu'il soit, vu depuis le collecteur
Get-WinEvent -FilterHashtable @{ LogName = 'ForwardedEvents'; Id = 1102 }
La position des propriétés dépend de chaque identifiant d'événement ; pour un usage régulier, mieux vaut laisser le SIEM faire ces corrélations.
Poser un compte leurre (honeytoken)
Un compte leurre est un compte d'utilisateur qui ne sert à rien : personne ne s'en sert jamais, il n'a aucun droit, mais il porte un nom attirant (adm-sauvegarde, svc-backup-sql) et parfois un faux SPN. Comme aucun usage légitime ne le touche, toute activité le concernant (une tentative d'ouverture de session, une demande de ticket de service) est forcément le fait de quelqu'un qui explore l'annuaire. Une alerte sur un seul événement 4768, 4769 ou 4625 visant ce compte est donc à très faible taux de fausse alerte. C'est une mesure de détection simple et efficace, recommandée dans les guides de l'ANSSI et des éditeurs.
Centraliser : WEF et le SIEM
Les journaux laissés sur chaque machine ont trois défauts : il faut les lire un par un, ils sont écrasés quand ils sont pleins, et un attaquant qui a les droits d'administration peut les effacer (événement 1102). La parade est de les envoyer au fil de l'eau vers un point central, hors de sa portée.
- Le transfert d'événements Windows (WEF) envoie les événements choisis des postes, serveurs et contrôleurs vers un collecteur Windows, sans agent à installer, configuré par GPO. Le cours Windows Server détaille sa mise en place.
- Le SIEM reçoit, normalise, corrèle et alerte. Chez Sorbier, c'est Wazuh, installé sur
srv-journaux(192.168.10.180) : un agent sur chaque machine (ou le collecteur WEF) envoie les journaux, et les règles de Wazuh déclenchent les alertes. La mise en place d'un agent, l'écriture des règles et les tableaux de bord sont l'objet du cours Wazuh (voir en particulier détecter les incidents courants) ; la supervision et les alertes, du cours Supervision.
Trois conditions pour que ces journaux servent de preuve, rappelées par l'ANSSI : une heure fiable et commune (tous les équipements synchronisés par NTP, service porté par srv-ad), un transport protégé (le collecteur et le SIEM dans une zone dédiée, les journaux chiffrés en transit), et une conservation suffisante (la CNIL recommande en général de six mois à un an pour les journaux d'activité). Le cours Réponse à incident détaille quoi journaliser et combien de temps.
La détection avancée : EDR, MDI, SIEM
Au-delà des journaux bruts, des outils repèrent les comportements d'attaque :
- un EDR surveille postes et serveurs et bloque ou isole une machine suspecte ;
- Microsoft Defender for Identity (MDI) installe un capteur sur les contrôleurs et alerte sur les comportements typiques (reconnaissance massive, demandes de tickets suspectes, DCSync, usage de golden ticket) ;
- le SIEM (Wazuh chez Sorbier) corrèle les sources et applique des règles.
Ces outils ne remplacent pas le durcissement : ils détectent ce qui passe malgré lui. Un domaine bien configuré et surveillé est bien plus solide que l'un ou l'autre seul.
Exercices
Exercice 1 sur 4 Choisir six événements à collecter Réussi À revoir
Antoine veut un premier abonnement WEF limité, pour les deux contrôleurs de domaine. Choisis six identifiants d'événements à collecter en priorité et justifie chacun en une ligne.
Voir la réponseMasquer la réponse de l'exercice 1
Une sélection possible :
- 4625 / 4771 : les échecs d'authentification révèlent la force brute et la pulvérisation de mots de passe ;
- 4728, 4732, 4756 : les ajouts aux groupes de sécurité, dont les groupes d'administration (élévation de privilèges) ;
- 4769 : les tickets de service, avec leur type de chiffrement, contre le Kerberoasting ;
- 4720 : les créations de comptes, une façon pour un attaquant de garder un accès ;
- 4662 : les accès à l'annuaire portant le droit de réplication des secrets, contre DCSync ;
- 1102 : l'effacement du journal Sécurité, signe fort de dissimulation.
On ajoute ensuite 4672 (privilèges spéciaux), 4776 (NTLM), 5136 (modifications de l'annuaire) et 7045 (services installés), en surveillant le volume.
Tu avais trouvé ?
Exercice 2 sur 4 Lire une séquence Réussi À revoir
Sur srv-ad, un dimanche à 3 h : 60 événements 4625 pour le compte svc-backup-sql (code 0xC000006A) depuis 192.168.10.112, puis un 4624 de type 3 pour ce compte, puis un 4769 pour plusieurs SPN en RC4. Fait notable : svc-backup-sql est un compte leurre, qui ne fait tourner aucun service.
- Que s'est-il passé ?
- Pourquoi le fait que ce soit un compte leurre est-il important ?
- Quelles deux mesures immédiates prends-tu ?
Voir la réponseMasquer la réponse de l'exercice 2
- Depuis
192.168.10.112, quelqu'un a tenté 60 mots de passe sursvc-backup-sql, a fini par en trouver un valide (4624 de type 3), puis a demandé des tickets de service en RC4 pour plusieurs SPN : une reconnaissance suivie d'un Kerberoasting. svc-backup-sqlétant un compte leurre, aucune activité légitime ne devrait jamais le concerner. La moindre tentative d'authentification le visant est donc, à coup sûr, le fait d'un attaquant qui explore l'annuaire : l'alerte est fiable, sans fausse alerte à trier. Que le mot de passe ait été « trouvé » montre d'ailleurs qu'il était trop faible, ou que le leurre a été mal configuré (il devrait avoir un mot de passe incassable).- Isoler le poste
192.168.10.112du réseau et désactiver le comptesvc-backup-sql; puis déclencher la procédure d'incident (recherche d'autres actions, analyse des SPN visés, surveillance des comptes concernés).
Tu avais trouvé ?
Exercice 3 sur 4 Pourquoi centraliser Réussi À revoir
Dans la séquence du schéma de ce chapitre, l'attaquant termine par un événement 1102. Explique ce qu'il fait, le problème que cela pose, et comment la centralisation des journaux rend son geste inutile.
Voir la réponseMasquer la réponse de l'exercice 3
L'événement 1102 signale l'effacement du journal Sécurité : l'attaquant supprime la copie locale des événements pour masquer ses traces (les échecs, l'accès, l'élévation). Le problème : si les journaux ne vivent que sur le contrôleur, l'enquête perd l'historique de l'intrusion. Avec une centralisation (WEF vers un collecteur, puis Wazuh sur srv-journaux), les événements sont partis au fil de l'eau avant l'effacement : ils sont conservés hors de portée de l'attaquant, et l'événement 1102 lui-même a été transféré et déclenche une alerte. L'effacement n'efface plus que des copies déjà dupliquées.
Tu avais trouvé ?
Exercice 4 sur 4 Écrire la requête Réussi À revoir
Écris la commande PowerShell qui affiche, sur le contrôleur où tu es connecté, les ajouts à un groupe de sécurité global (4728) des 30 derniers jours, avec la date et le message.
Voir la réponseMasquer la réponse de l'exercice 4
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4728; StartTime = (Get-Date).AddDays(-30) } |
Select-Object TimeCreated, Id, Message
Si la commande renvoie « Aucun événement ne correspond aux critères de sélection », soit il n'y a eu aucun ajout, soit l'audit de la gestion des groupes de sécurité n'est pas activé, soit le journal a été écrasé : vérifier avec auditpol /get /subcategory:"Gestion des groupes de sécurité". Pour ne voir que les ajouts à Admins du domaine, on filtre ensuite le message sur le nom du groupe.
Tu avais trouvé ?