Chapitre 1416 minIntermédiaire
Journaux d'événements et transfert d'événements Windows (WEF)
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- configurer la stratégie d'audit avancée par GPO ;
- reconnaître les identifiants d'événements importants ;
- centraliser les journaux avec le transfert d'événements Windows ;
- interroger les journaux avec Get-WinEvent.
4 exercices corrigés1 schéma
Windows enregistre ce qui se passe sur chaque machine dans des journaux d'événements : ouvertures de session, créations de comptes, erreurs des services, modifications de l'annuaire. Encore faut-il activer les bons audits, garder les journaux assez longtemps et les rassembler en un point central, hors de portée d'un attaquant. Ce chapitre configure la stratégie d'audit, donne les identifiants d'événements à connaître, puis met en place le transfert d'événements Windows (WEF), qui centralise les journaux des postes et des serveurs sur un collecteur. L'analyse des journaux et le SIEM sont traités dans le cours Réponse à incident.
Les journaux de Windows
La console Observateur d'événements (eventvwr.msc) affiche les journaux d'une machine, locale ou distante.
| Journal | Contenu |
|---|---|
| Application | Événements des applications (antivirus, logiciel de sauvegarde, SQL Server) |
| Sécurité | Événements d'audit : ouvertures de session, gestion des comptes, accès aux objets. Seul le système y écrit |
| Système | Événements de Windows et des pilotes : démarrage des services, erreurs matérielles, installation de services |
| Installation | Installation des mises à jour et des rôles |
| Événements transférés | Événements reçus d'autres machines, sur un collecteur WEF |
| Journaux des applications et des services | Un journal par composant : Directory Service, DNS Server, DFS Replication sur les contrôleurs ; Microsoft-Windows-GroupPolicy/Operational, Microsoft-Windows-PowerShell/Operational, Microsoft-Windows-Windows Defender/Operational, Microsoft-Windows-TerminalServices-LocalSessionManager/Operational… |
Chaque événement porte un identifiant (Event ID), un niveau (information, avertissement, erreur, critique ; succès ou échec de l'audit pour le journal Sécurité), une source, une date, la machine et, souvent, le compte concerné. L'identifiant ne suffit pas toujours : le détail de l'événement (type d'ouverture de session, adresse source, code d'échec) dit ce qui s'est réellement passé.
Configurer la stratégie d'audit
Le journal Sécurité ne contient que ce que la stratégie d'audit demande d'enregistrer. Sur les contrôleurs de domaine, une partie est activée par défaut ; sur les postes et les serveurs membres, beaucoup moins. On règle l'audit par GPO, avec la configuration avancée de la stratégie d'audit : 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. Elle propose une soixantaine de sous-catégories, plus précises que les neuf catégories de l'ancienne stratégie d'audit (qu'il ne faut pas mélanger avec elle).
Une base raisonnable, inspirée des recommandations de Microsoft et de l'ANSSI :
| Catégorie > sous-catégorie | Audit | Ce qu'on y voit |
|---|---|---|
| Connexion de compte > Valider les informations d'identification | Succès et échec | Validations NTLM par les contrôleurs (4776) |
| Connexion de compte > Service d'authentification Kerberos | Succès et échec | Demandes de tickets (4768, 4771) |
| Connexion de compte > Opérations de ticket du service Kerberos | Succès et échec | Tickets de service (4769), utiles contre le Kerberoasting |
| Ouverture/Fermeture de session > Ouvrir la session | Succès et échec | Ouvertures de session (4624, 4625) |
| Ouverture/Fermeture de session > Verrouillage du compte | Échec | Comptes verrouillés (4625 avec le code de verrouillage) |
| Ouverture/Fermeture de session > Ouverture de session spéciale | Succès | Sessions avec des privilèges d'administration (4672) |
| Gestion des comptes > Gestion des comptes d'utilisateur | Succès et échec | Créations, modifications, désactivations, réinitialisations (4720 à 4740) |
| Gestion des comptes > Gestion des groupes de sécurité | Succès | Ajouts et retraits de membres (4728, 4732, 4756) |
| Accès DS > Modification du service d'annuaire | Succès | Modifications d'objets de l'annuaire, avec l'ancienne et la nouvelle valeur (5136) |
| Suivi détaillé > Création du processus | Succès | Programmes lancés (4688), avec la ligne de commande si on l'active aussi |
| Changement de stratégie > Audit de modification de la stratégie | Succès | Modifications de la stratégie d'audit elle-même |
| Système > Extension système de sécurité | Succès | Services installés |
Pour que la configuration avancée soit prise en compte, active aussi l'option Audit : force les paramètres de sous-catégorie de stratégie d'audit à se substituer aux paramètres de catégorie de stratégie d'audit (Options de sécurité). Vérifie le résultat sur une machine avec auditpol /get /category:*.
L'audit des accès aux fichiers demande deux réglages : la sous-catégorie Accès à l'objet > Système de fichiers, et une liste de contrôle d'accès système (SACL) sur le dossier à surveiller (paramètres de sécurité avancés > onglet Audit : par exemple, échecs et suppressions pour Tout le monde sur D:\Partages\Paie). On ne l'active que sur des dossiers sensibles : auditer tous les accès à tous les fichiers noie l'information.
Les événements à connaître
| ID | Journal | Signification |
|---|---|---|
| 4624 | Sécurité | Ouverture de session réussie. Le type compte : 2 interactive (au clavier), 3 réseau (partage), 4 tâche planifiée, 5 service, 7 déverrouillage, 10 bureau à distance |
| 4625 | Sécurité | Échec d'ouverture de session, avec un code : 0xC000006A mauvais mot de passe, 0xC0000064 compte inexistant, 0xC0000234 compte verrouillé, 0xC0000072 compte désactivé |
| 4634, 4647 | Sécurité | Fermeture de session |
| 4648 | Sécurité | Ouverture de session avec des identifiants explicites (« Exécuter en tant que ») |
| 4672 | Sécurité | Privilèges spéciaux attribués à une session : un compte d'administration vient de se connecter |
| 4688 | Sécurité | Création d'un processus |
| 4720, 4722, 4725, 4726 | Sécurité | Compte utilisateur créé, activé, désactivé, supprimé |
| 4723, 4724 | Sécurité | Changement de son propre mot de passe ; réinitialisation du mot de passe d'un autre compte |
| 4728, 4732, 4756 | Sécurité | Membre ajouté à un groupe de sécurité global, local (ou de domaine local), universel |
| 4740, 4767 | Sécurité | Compte verrouillé ; compte déverrouillé |
| 4768, 4769, 4771 | Sécurité | Ticket Kerberos d'authentification (TGT) demandé ; ticket de service demandé ; échec de la pré-authentification Kerberos |
| 4776 | Sécurité | Validation d'identifiants NTLM par un contrôleur |
| 5136 | Sécurité | Objet de l'annuaire modifié |
| 1102 | Sécurité | Journal d'audit effacé |
| 7045 | Système | Nouveau service installé |
| 4104 | PowerShell/Operational | Bloc de script PowerShell exécuté |
Quelques lectures types :
- une série de 4625 sur un même compte depuis une même adresse, puis un 4624 : un mot de passe deviné par force brute ;
- des 4625 sur de nombreux comptes différents, un ou deux essais chacun, depuis la même adresse : une pulvérisation de mots de passe (password spraying), qui reste sous le seuil de verrouillage ;
- un 4728 qui ajoute un compte inconnu à Admins du domaine, en dehors des heures de travail : à traiter comme un incident ;
- un 1102 : quelqu'un a effacé le journal Sécurité, souvent pour masquer ses traces ;
- un 7045 inattendu sur un serveur : un outil d'administration à distance ou une charge malveillante installés comme service.
Taille et rétention des journaux
Par défaut, chaque journal a une taille maximale limitée et remplace les événements les plus anciens quand il est plein. Sur un contrôleur de domaine chargé, le journal Sécurité peut ainsi ne couvrir que quelques heures ou quelques jours : le jour où l'on cherche la trace d'une intrusion vieille de trois semaines, elle a disparu.
On augmente la taille par GPO (Configuration ordinateur > Stratégies > Modèles d'administration > Composants Windows > Service Journal des événements > Sécurité > Spécifier la taille maximale du fichier journal) ou en ligne de commande, et surtout on centralise.
# Taille et mode de rétention du journal Sécurité
wevtutil gl Security
# Porter la taille maximale à 1 Go (en octets)
wevtutil sl Security /ms:1073741824
La durée de conservation dépend des besoins et des obligations : la CNIL recommande en général une conservation des journaux d'activité de six mois à un an. Le chapitre Journalisation du cours Réponse à incident détaille quoi journaliser et combien de temps.
Centraliser avec le transfert d'événements Windows
Les journaux restés sur chaque machine ont trois défauts : il faut aller les lire un par un, ils sont écrasés quand ils sont pleins, et un attaquant qui a les droits d'administrateur sur la machine peut les effacer. Le transfert d'événements Windows (WEF, Windows Event Forwarding), inclus gratuitement dans Windows, envoie au fil de l'eau les événements choisis vers un serveur collecteur.
Deux composants :
- sur le collecteur, le service Collecteur d'événements de Windows (
wecsvc) reçoit les événements et les range dans le journal Événements transférés ; - sur les sources (postes, serveurs, contrôleurs), le service Gestion à distance de Windows (WinRM) envoie les événements demandés par un abonnement, sur le port TCP 5985 (HTTP, avec un contenu chiffré par Kerberos dans un domaine) ou 5986 (HTTPS).
Deux modes d'abonnement :
| Mode | Fonctionnement | Quand |
|---|---|---|
| Initié par la source | Les sources, configurées par GPO, contactent le collecteur et récupèrent les abonnements qui les concernent | Le choix normal dans un domaine : les nouveaux postes sont pris en compte automatiquement |
| Initié par le collecteur | Le collecteur interroge une liste de machines qu'on lui donne | Quelques serveurs précis |
Mettre en place WEF initié par la source chez Sorbier :
- Sur le collecteur
srv-collecte(192.168.10.182, un serveur Windows membre dédié, de tier 1, ou de tier 0 s'il collecte les contrôleurs) : configurer le service.wecutil qc /q # démarre le collecteur et le règle en démarrage automatique - Créer l'abonnement dans l'Observateur d'événements du collecteur > Abonnements > Créer un abonnement : type Initié par l'ordinateur source, groupes d'ordinateurs concernés (par exemple Ordinateurs du domaine et Contrôleurs de domaine), événements à collecter (le journal Sécurité avec les identifiants choisis, le journal Système avec 7045, le journal PowerShell avec 4104), et l'option de remise Réduire la latence pour les événements critiques.
- Une GPO pour les sources, liée aux OU des ordinateurs et à l'OU Domain Controllers :
| Réglage | Valeur |
|---|---|
| Composants Windows > Transfert d'événements > Configurer le gestionnaire d'abonnements cible | Server=http://srv-collecte.ad.sorbier.example:5985/wsman/SubscriptionManager/WEC,Refresh=60 |
| Service Gestion à distance de Windows (WS-Management) | Démarrage automatique (Paramètres de sécurité > Services système) |
| Accès au journal Sécurité pour le compte Service réseau | Ajouter Service réseau au groupe local Lecteurs des journaux d'événements (préférence Utilisateurs et groupes locaux), car le service de transfert s'exécute avec ce compte et doit lire le journal Sécurité |
| Pare-feu | Règle entrante WinRM (5985) sur le collecteur ; les sources se connectent en sortie |
- Vérifier : sur une source,
gpupdate /force, puis le journalMicrosoft-Windows-Forwarding/Operational; sur le collecteur, l'état de l'abonnement (wecutil gr <nom de l'abonnement>) et l'arrivée des événements dans Événements transférés.
Le collecteur ne remplace pas un SIEM : il rassemble, il n'analyse pas. On y installe en général l'agent du SIEM (ou un relais Syslog), qui envoie les événements vers srv-journaux (192.168.10.180), le serveur central de journaux et de supervision de Sorbier, où ils sont analysés et corrélés (Journaux, SIEM et détection des incidents, Centraliser les logs : syslog, SIEM et SOC et le cours Supervision).
Interroger les journaux en PowerShell
Get-WinEvent lit les journaux locaux, distants ou transférés. Le paramètre -FilterHashtable filtre côté système, bien plus vite qu'un Where-Object :
# Les échecs d'ouverture de session des dernières 24 heures sur ce contrôleur
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4625; StartTime = (Get-Date).AddDays(-1) } |
Select-Object TimeCreated, @{ n = 'Compte'; e = { $_.Properties[5].Value } }, @{ n = 'Source'; e = { $_.Properties[19].Value } }
# Les ajouts à des groupes de sécurité (global, local, universel) sur la dernière semaine
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4728, 4732, 4756; StartTime = (Get-Date).AddDays(-7) } |
Format-List TimeCreated, Id, Message
# Les comptes verrouillés, sur les deux contrôleurs
Invoke-Command -ComputerName srv-ad, srv-ad2 -ScriptBlock {
Get-WinEvent -FilterHashtable @{ LogName = 'Security'; Id = 4740 } -MaxEvents 20
} | Select-Object PSComputerName, TimeCreated, Message
# Sur le collecteur : les journaux effacés n'importe où dans le parc
Get-WinEvent -FilterHashtable @{ LogName = 'ForwardedEvents'; Id = 1102 }
Dans l'événement 4625, la propriété 5 est le nom du compte visé et la propriété 19 l'adresse IP source ; la position des propriétés est propre à chaque identifiant d'événement. Pour un usage ponctuel, les affichages personnalisés de l'Observateur d'événements font la même chose à la souris, et peuvent être exportés pour l'équipe.
Exercices
Exercice 1 sur 4 Lire une séquence d'événements Réussi À revoir
Sur srv-ad, entre 2 h 10 et 2 h 14 une nuit, le journal Sécurité contient : 48 événements 4625 pour le compte adm-cdupuis (code 0xC000006A) depuis 192.168.10.93, puis un 4624 de type 3 pour ce compte depuis la même adresse, puis un 4728 qui ajoute adm-cdupuis au groupe Admins du domaine, puis un 1102.
- Raconte ce qui s'est probablement passé.
- Quel problème pose le dernier événement, et quelle mesure l'aurait rendu sans effet ?
- Cite deux autres mesures qui auraient empêché ou signalé l'attaque.
Voir la réponseMasquer la réponse de l'exercice 1
- Depuis le poste
192.168.10.93, quelqu'un a tenté 48 mots de passe sur le compteadm-cdupuis(code0xC000006A: mauvais mot de passe), a fini par trouver le bon et s'est authentifié par le réseau (type 3). Il a ensuite ajouté ce compte aux Admins du domaine (4728) : le compte avait donc déjà des droits de gestion des groupes, ou l'attaquant a utilisé un autre compte privilégié. Enfin, il a effacé le journal Sécurité (1102) pour masquer ses traces. Le tout de nuit : une intrusion très probable, à traiter immédiatement comme un incident (isoler le poste.93, désactiver le compte, retirer l'appartenance au groupe, rechercher d'autres actions). - L'effacement fait disparaître la copie locale des événements. Avec un transfert d'événements (WEF) vers un collecteur, ou un envoi vers un SIEM, les événements seraient déjà partis au moment de l'effacement : la trace serait conservée, et l'événement 1102 lui-même aurait été transféré et aurait déclenché une alerte.
- Un seuil de verrouillage (par exemple 10 échecs) aurait bloqué l'attaque par force brute ; une alerte sur les rafales de 4625 et sur tout 4728 concernant Admins du domaine aurait prévenu l'équipe en temps réel. On peut ajouter un mot de passe long et l'authentification multifacteur pour les comptes d'administration, et l'interdiction pour ces comptes de s'authentifier depuis un poste ordinaire.
Tu avais trouvé ?
Exercice 2 sur 4 Quels événements collecter ? Réussi À revoir
Antoine Mercier veut un premier abonnement WEF, limité, pour les 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 2
Une sélection possible :
- 4625 : les échecs d'ouverture de session révèlent la force brute et la pulvérisation de mots de passe ;
- 4740 : les verrouillages de comptes, conséquence de ces attaques (ou d'un mot de passe oublié resté enregistré quelque part) ;
- 4728, 4732, 4756 : les ajouts aux groupes de sécurité, dont les groupes d'administration ;
- 4720 : les créations de comptes, une façon pour un attaquant de garder un accès ;
- 4724 : les réinitialisations de mot de passe d'un autre compte ;
- 1102 : l'effacement du journal Sécurité, signe fort d'une tentative de dissimulation.
On ajoute ensuite 4672 (connexions avec privilèges), 4769 (tickets de service, contre le Kerberoasting), 5136 (modifications de l'annuaire) et 7045 (services installés), en surveillant le volume.
Tu avais trouvé ?
Exercice 3 sur 4 Les réglages d'une source WEF Réussi À revoir
Après la création de l'abonnement et de la GPO des sources, le collecteur reçoit bien les événements des journaux Système et PowerShell des postes, mais aucun événement du journal Sécurité. Quelle est la cause la plus probable, et comment la corriger ?
Voir la réponseMasquer la réponse de l'exercice 3
Le service de transfert s'exécute sous le compte Service réseau, qui n'a pas le droit de lire le journal Sécurité par défaut (les journaux Système et PowerShell, eux, lui sont lisibles). Il faut l'ajouter au groupe local Lecteurs des journaux d'événements des sources, par une préférence de GPO Utilisateurs et groupes locaux (ou donner ce droit dans le descripteur d'accès du journal Sécurité par GPO), puis redémarrer le service WinRM ou la machine pour que le nouveau droit soit pris en compte.
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 créations de comptes utilisateurs (4720) et les suppressions (4726) 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 = 4720, 4726; 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 aucune création ni suppression, soit l'audit de la gestion des comptes d'utilisateur n'est pas activé, soit le journal a été écrasé depuis : vérifie avec auditpol /get /subcategory:"Gestion des comptes d'utilisateur" (le nom de la sous-catégorie est en français sur un système en français).
Tu avais trouvé ?