Artéfacts Windows · Leçon 7 sur 9
Journaux d’événements : ouvertures de session, RDP, services et PowerShell
13 min de lecture
Les journaux d’événements Windows enregistrent qui a ouvert une session, depuis où et comment, quels services et tâches ont été installés, quand le système a démarré et s’est arrêté, et parfois le code PowerShell exécuté, chaque événement étant accompagné d’une heure UTC précise. Cette leçon présente le format EVTX, les événements les plus utilisés par les examinateurs sous Windows 10 et 11, et la manière de corréler plusieurs journaux pour reconstituer le déroulement d’une session.
Où se trouvent les journaux et comment le format EVTX est structuré
Les journaux se trouvent dans C:\Windows\System32\winevt\Logs, avec un fichier par canal. Les journaux classiques sont Security.evtx, System.evtx et Application.evtx. Les autres canaux utilisent le nom du canal, en remplaçant la barre oblique par %4 : le canal Microsoft-Windows-TerminalServices-LocalSessionManager/Operational est stocké sous le nom Microsoft-Windows-TerminalServices-LocalSessionManager%4Operational.evtx. Une collecte de triage copie ces fichiers en conservant leurs chemins d’origine ; vérifiez que les canaux dont vous avez besoin ont été collectés avant de conclure qu’un événement ne s’est jamais produit.
Le format EVTX est simple dans sa structure générale :
| Partie | Taille | Signature | Contenu |
|---|---|---|---|
| En-tête de fichier | 4 096 octets | ElfFile | Numéros du premier et du dernier bloc, identifiant de l’enregistrement suivant, indicateurs (par exemple, état non propre) |
| Bloc | 65 536 octets (64 KB) | ElfChnk | En-tête de bloc de 512 octets, tables de chaînes et de modèles, enregistrements |
| Enregistrement d’événement | variable | octets 2A 2A 00 00 | Taille de l’enregistrement, identifiant de l’enregistrement, heure d’écriture (FILETIME), XML binaire |
Les enregistrements sont stockés en XML binaire, un encodage compact qui fait référence à des modèles conservés dans le bloc ; les analyseurs reconstruisent le XML que vous voyez dans l’Observateur d’événements. Des blocs autonomes peuvent également être récupérés par carving dans l’espace non alloué.
Champs des enregistrements
Chaque enregistrement comporte une section System et une section de données :
- Provider (le composant qui l’a écrit, par exemple
Microsoft-Windows-Security-Auditing) et EventID. Un même numéro peut avoir des significations différentes selon le fournisseur ; lisez-les donc toujours ensemble. - TimeCreated SystemTime, toujours en UTC, par exemple
2026-03-14T22:47:33.2014417Z. - EventRecordID, un numéro de séquence propre à chaque journal ; des lacunes ou un redémarrage à 1 méritent un examen approfondi.
- Channel et Computer (le nom de l’hôte au moment de l’écriture de l’événement).
- EventData (ou UserData) : des champs nommés tels que
TargetUserNameouIpAddress.
Taille et écrasement des anciens événements
Chaque journal possède une taille maximale et, par défaut, écrase ses événements les plus anciens lorsqu’il est plein. La taille par défaut du journal Security est souvent de 20 MB ; sur un système très actif, il peut donc ne couvrir que quelques jours. Les canaux opérationnels ont leurs propres limites, souvent plus petites, mais reçoivent moins d’événements ; ils peuvent donc remonter plus loin que Security. Pour les journaux classiques, la taille configurée correspond à la valeur MaxSize sous ControlSet00x\Services\EventLog\<log> dans la ruche SYSTEM ; comparez l’enregistrement le plus ancien à la période faisant l’objet de l’investigation.
Ouvertures de session dans le journal Security
Les événements de sécurité dépendent de la stratégie d’audit. Windows 10 et 11 auditent par défaut les réussites et les échecs d’ouverture de session, mais de nombreuses catégories, dont la création de processus, sont désactivées tant qu’elles ne sont pas explicitement activées. L’absence d’un événement ne prouve pas que l’action n’a pas eu lieu.
4624 (ouverture de session réussie) est l’événement central. Ses principaux champs sont TargetUserName, TargetUserSid, TargetLogonId, LogonType, IpAddress, WorkstationName (le nom du client), LogonProcessName (par exemple User32, NtLmSsp, Kerberos) et AuthenticationPackageName (par exemple Negotiate, NTLM, Kerberos).
| LogonType | Nom | Cause habituelle |
|---|---|---|
| 2 | Interactif | Ouverture de session au clavier sur la console |
| 3 | Réseau | Accès à un partage, ou NLA avant RDP |
| 4 | Traitement par lots | Tâche planifiée |
| 5 | Service | Service démarré sous un compte |
| 7 | Déverrouillage | Poste de travail déverrouillé, ou session reconnectée |
| 8 | Réseau en texte clair | Identifiants envoyés en texte clair (par exemple, authentification de base IIS) |
| 9 | Nouveaux identifiants | runas /netonly : nouveaux identifiants pour les connexions sortantes |
| 10 | Interactif à distance | Bureau à distance |
| 11 | Interactif avec identifiants en cache | Ouverture de session de domaine avec des identifiants en cache, sans contrôleur de domaine |
4625 (échec d’ouverture de session) présente la même structure, avec en plus Status et SubStatus. La valeur SubStatus 0xC000006A signifie qu’un mot de passe incorrect a été fourni pour un compte existant ; 0xC0000064 signifie que le nom d’utilisateur n’existe pas. De nombreux échecs 0xC0000064 provenant d’une même adresse IP suggèrent des tentatives de découverte de noms d’utilisateur ; une rafale de 0xC000006A suivie d’un événement 4624 pour ce compte suggère qu’un mot de passe a été deviné avec succès.
Autres événements de la même famille :
- 4634 fermeture de session (la session s’est terminée) et 4647 fermeture de session à l’initiative de l’utilisateur (l’utilisateur a choisi de se déconnecter).
- 4648 ouverture de session avec des identifiants explicites, par exemple avec
runasou lors du mappage d’un lecteur avec un autre compte. - 4672 privilèges spéciaux attribués à une nouvelle ouverture de session : le compte détient des privilèges sensibles ; il s’agit généralement d’un administrateur (ou de SYSTEM).
- 4720 création d’un compte utilisateur, 4722 activation, 4724 tentative de réinitialisation du mot de passe, 4732 ajout d’un membre à un groupe local de sécurité (par exemple, Administrateurs).
- 4688 création de processus, uniquement lorsque « Auditer la création de processus » est activé ; le champ
CommandLinen’est renseigné que si la stratégie supplémentaire « Inclure la ligne de commande dans les événements de création de processus » est également définie.
L’identifiant d’ouverture de session (TargetLogonId dans 4624, une valeur de 64 bits affichée en hexadécimal) identifie une session ouverte jusqu’à sa fin. Les événements ultérieurs le portent dans SubjectLogonId (4672, 4688, 4648) ou TargetLogonId (4634, 4647) ; un filtrage sur cet identifiant permet donc de regrouper toutes les actions effectuées dans cette session. Les identifiants d’ouverture de session ne sont uniques que jusqu’au redémarrage suivant ; associez donc l’identifiant à la plage temporelle.
Le Bureau à distance dans trois journaux
Une session RDP laisse des événements sur la cible dans trois canaux :
- RemoteConnectionManager/Operational 1149, « Authentification de l’utilisateur réussie », avec l’utilisateur, le domaine et l’adresse IP source. Il indique qu’une connexion RDP provenant de cette adresse IP a été acceptée pour ce nom d’utilisateur ; il ne montre pas qu’une session de bureau a démarré.
- Security 4624 de type 10 avec la même adresse IP dans
IpAddress. Avec l’authentification au niveau du réseau (NLA), une ouverture de session de type 3 depuis la même adresse IP apparaît souvent juste avant. Une reconnexion ou un déverrouillage peut présenter le type 7 à la place. - LocalSessionManager/Operational (LSM) 21 (ouverture de session réussie), 22 (notification de démarrage du shell reçue), 24 (session déconnectée) et 25 (reconnexion de session réussie), chacun avec l’utilisateur, l’identifiant de session et l’adresse source. Les ouvertures de session sur la console affichent
LOCALcomme adresse. - Security 4778 (session reconnectée) et 4779 (session déconnectée), avec
LogonID,ClientNameetClientAddress, si « Autres événements d’ouverture/fermeture de session » fait l’objet d’un audit.
La fermeture de la fenêtre RDP déconnecte la session sans la fermer : les événements 24 et 4779 apparaissent, mais 4634 n’apparaît que lorsque l’utilisateur ferme sa session ou que celle-ci est réinitialisée.
Services, tâches, démarrage et arrêt
Dans le journal System, 7045 (fournisseur Service Control Manager) enregistre l’installation d’un service avec ServiceName, ImagePath, StartType et AccountName. Un nom aléatoire avec un ImagePath exécutant cmd.exe ou powershell.exe est caractéristique des outils d’exécution à distance. 7036 enregistre le passage d’un service à l’état en cours d’exécution ou arrêté. 6005 et 6006 (démarrage/arrêt du service de journalisation des événements) marquent le démarrage et l’arrêt normal du système, 6008 enregistre le fait que l’arrêt précédent était inattendu, et 1074 (fournisseur User32) indique le processus et l’utilisateur à l’origine d’un arrêt ou d’un redémarrage.
Dans Microsoft-Windows-TaskScheduler/Operational, 106 enregistre l’enregistrement d’une tâche avec son nom et l’utilisateur qui l’a enregistrée, et 200/201 enregistrent le démarrage et l’achèvement d’une action de tâche. Ce canal peut être désactivé ; vérifiez donc qu’il contient des événements. La leçon 2.6 traite des événements liés aux périphériques USB.
PowerShell
- Microsoft-Windows-PowerShell/Operational 4104 (journalisation des blocs de script) enregistre le code exécuté, après décodage, avec un
ScriptBlockId; les scripts longs s’étendent sur plusieurs enregistrements (« 1 sur 3 »). Lorsque la stratégie est activée, tous les blocs sont journalisés. Sans elle, Windows PowerShell 5.x peut journaliser automatiquement certains blocs de script, au niveau Avertissement, lorsqu’il considère leur contenu comme suspect. - 4103 (journalisation des modules) enregistre les détails d’exécution du pipeline, tels que les commandes et les paramètres, lorsque la journalisation des modules est activée.
- Windows PowerShell.evtx 400 et 403 marquent le démarrage et l’arrêt du moteur ; leur champ
HostApplicationmontre la ligne de commande qui a lancé PowerShell, y compris les valeurs de-EncodedCommand. L’événement 600 enregistre le démarrage des fournisseurs. - PowerShell 7 utilise son propre canal
PowerShellCore/Operational.
En dehors des journaux, PSReadLine enregistre les commandes saisies dans la console dans %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt pour chaque utilisateur, en conservant par défaut les 4 096 dernières lignes. Ce fichier ne comporte aucun horodatage ; datez donc ses entrées par corrélation (4104, horodatages du système de fichiers).
Journaux effacés
Les événements Security 1102 (« Le journal d’audit a été effacé ») et System 104 (effacement d’un autre journal) enregistrent qui a effacé un journal. Le module 7 traite de l’effacement des journaux en tant que technique anti-forensique.
Outils et méthode
L’Observateur d’événements peut ouvrir un fichier .evtx copié pour des vérifications ponctuelles, mais il affiche l’heure locale de la machine d’analyse. Pour l’analyse, traitez tous les journaux afin de les réunir dans un seul tableau : EvtxECmd, par exemple, utilise des tables de correspondance qui normalisent les champs des événements dans des colonnes communes (utilisateur, hôte distant, exécutable) et produit des fichiers CSV en UTC. Des outils de recherche de menaces tels que Hayabusa et Chainsaw appliquent des règles de détection à de nombreux journaux ; vérifiez chaque résultat dans l’enregistrement d’origine.
Exemple détaillé : une session RDP
Une collecte de triage du poste de travail WS-FIN-07 montre les événements suivants (UTC) :
| Heure (UTC) | Journal | ID | Valeurs clés |
|---|---|---|---|
| 2026-03-14T22:47:31.512Z | RemoteConnectionManager | 1149 | Utilisateur mreyes, source 203.0.113.45 |
| 2026-03-14T22:47:33.201Z | Security | 4624 | Type 10, mreyes, TargetLogonId 0x3E1A2B, IpAddress 203.0.113.45, poste de travail DESKTOP-K2M9QX |
| 2026-03-14T22:47:33.215Z | Security | 4672 | SubjectLogonId 0x3E1A2B |
| 2026-03-14T22:47:33.640Z | LocalSessionManager | 21 | WS-FIN-07\mreyes, identifiant de session 3, 203.0.113.45 |
| 2026-03-14T22:47:34.902Z | LocalSessionManager | 22 | Identifiant de session 3 |
| 2026-03-14T23:31:05.117Z | LocalSessionManager | 24 | Identifiant de session 3, 203.0.113.45 |
| 2026-03-14T23:31:05.140Z | Security | 4779 | LogonID 0x3E1A2B, ClientName DESKTOP-K2M9QX |
Mise en relation. L’utilisateur et l’adresse IP relient 1149 à 4624 ; le champ TargetLogonId de 4624 le relie à 4672 et 4779 ; l’utilisateur, l’adresse IP et l’identifiant de session relient les trois événements LocalSessionManager. Certains outils affichent les identifiants d’ouverture de session en décimal : 0x3E1A2B = 62 × 65 536 + 0x1A2B (6 699) = 4 069 931.
Interprétation. mreyes s’est connecté depuis 203.0.113.45 (ordinateur client DESKTOP-K2M9QX), a ouvert une session à 22:47:33Z avec des privilèges spéciaux (4672) et s’est déconnecté à 23:31:05Z. Durée : 23:31:05.117 − 22:47:33.201 = 43 min 31,916 s. Aucun événement 4634 ou 4647 ne suit ; la session est donc restée ouverte, mais déconnectée. Un filtrage sur 0x3E1A2B dans cette plage temporelle montrerait ce qui a été exécuté dans la session, si 4688 faisait l’objet d’un audit.
Référence des identifiants d’événement
| Journal | ID | Signification |
|---|---|---|
| Security | 4624 / 4625 | Réussite / échec d’ouverture de session |
| Security | 4634 / 4647 | Fermeture de session / fermeture de session à l’initiative de l’utilisateur |
| Security | 4648 | Ouverture de session avec des identifiants explicites |
| Security | 4672 | Privilèges spéciaux attribués à une nouvelle ouverture de session |
| Security | 4720 / 4722 / 4724 / 4732 | Compte créé / activé / mot de passe réinitialisé / ajout à un groupe local |
| Security | 4688 | Processus créé (si audité) |
| Security | 4778 / 4779 | Session RDP reconnectée / déconnectée |
| Security | 1102 | Journal Security effacé |
| RemoteConnectionManager/Operational | 1149 | Authentification de l’utilisateur RDP réussie |
| LocalSessionManager/Operational | 21 / 22 / 24 / 25 | Ouverture de session / démarrage du shell / déconnexion / reconnexion |
| System | 7045 / 7036 | Service installé / changement d’état du service |
| System | 6005 / 6006 / 6008 | Service de journalisation des événements démarré / arrêté / arrêt inattendu du système |
| System | 1074 | Arrêt ou redémarrage déclenché |
| System | 104 | Journal effacé |
| TaskScheduler/Operational | 106 / 200 / 201 | Tâche enregistrée / action démarrée / terminée |
| PowerShell/Operational | 4104 / 4103 | Journalisation des blocs de script / des modules |
| Windows PowerShell | 400 / 403 / 600 | Moteur démarré / arrêté / fournisseur démarré |
Points clés pour l'examen : Attendez-vous à devoir relever une heure d’ouverture de session en UTC, une adresse IP source, un identifiant d’ouverture de session, un nom de poste de travail client ou le champImagePathd’un service dans des journaux analysés, et à choisir l’événement adapté à une question (1149, 4624 de type 10 ou LSM 21). Connaissez les types d’ouverture de session et les deux codes SubStatus courants de 4625, et soyez prêt à expliquer pourquoi un événement manquant peut résulter de la stratégie d’audit ou de l’écrasement des anciens événements plutôt que d’une absence d’activité. Relevez les heures dansSystemTime, et non dans une visionneuse qui les convertit en heure locale.
Points essentiels
- Les fichiers EVTX se trouvent dans
C:\Windows\System32\winevt\Logs; un en-têteElfFilede 4 KB est suivi de blocsElfChnkde 64 KB contenant des enregistrements XML binaires avec des heures UTC et un EventRecordID. - Les journaux écrasent leurs anciens événements : le journal Security ne fait souvent que 20 MB ; comparez donc son enregistrement le plus ancien à la période qui vous intéresse.
- 4624 fournit l’utilisateur, le SID, le LogonType, l’identifiant d’ouverture de session, l’adresse IP et le poste de travail ; les champs Status/SubStatus de 4625 expliquent les échecs ; 4672 signale les ouvertures de session avec privilèges.
- RDP apparaît sous les événements 1149, 4624 de type 10, LSM 21/22/24/25 et 4778/4779 ; reliez-les par l’utilisateur, l’adresse IP, l’identifiant de session et l’identifiant d’ouverture de session.
- 7045 enregistre les nouveaux services, 106/200/201 les tâches planifiées, 4104 le code PowerShell ; ConsoleHost_history.txt conserve les commandes saisies sans horodatage.
- De nombreux événements dépendent de la stratégie d’audit ou de journalisation ; leur absence ne prouve donc pas l’absence d’activité.