Lire les journaux Windows
Où Windows enregistre ce qui se passe, les identifiants d'événements à connaître, les codes d'échec de connexion, et ce qu'apporte Sysmon.
Elouan
Série Systèmes Windows et Linux · article 3 sur 6
Presque tout ce qui se passe sur une machine Windows laisse une trace dans ses journaux d’événements : une ouverture de session, un service installé, un compte créé, un processus lancé. Il faut juste savoir où regarder, et quels numéros chercher. Ces numéros reviennent dans toutes les enquêtes, au point que beaucoup de gens finissent par les connaître par cœur (Microsoft aurait pu choisir des noms plutôt que des nombres à quatre chiffres, mais c’est comme ça).
Où sont les journaux
Les journaux sont des fichiers .evtx rangés dans C:\Windows\System32\winevt\Logs. On les lit avec l’Observateur d’événements (eventvwr.msc), en PowerShell avec Get-WinEvent, ou dans un SIEM qui les centralise.
| Journal | Contenu |
|---|---|
| Security | Authentifications, accès, gestion des comptes, selon la stratégie d’audit |
| System | Services, pilotes, démarrages et arrêts |
| Application | Événements des applications |
| Microsoft-Windows-PowerShell/Operational | Exécution de PowerShell (dont les scripts, si activé) |
| Microsoft-Windows-Sysmon/Operational | Événements Sysmon, s’il est installé |
| Microsoft-Windows-TaskScheduler/Operational | Tâches planifiées |
| Microsoft-Windows-TerminalServices-… | Sessions RDP |
Ce qui n’est pas audité n’est pas journalisé
Le journal Security ne contient que ce que la stratégie d’audit demande. Une machine mal configurée peut ne rien enregistrer d’utile. Deux réglages font une énorme différence : l’audit de création de processus avec la ligne de commande (événement 4688 complet), et la journalisation des blocs de script PowerShell (événement 4104).
Les authentifications
| ID | Signification | À retenir |
|---|---|---|
| 4624 | Ouverture de session réussie | Regarder le type de logon, le compte, l’IP source, le processus |
| 4625 | Échec d’ouverture de session | Regarder le statut et le sous-statut |
| 4634 / 4647 | Fermeture de session | 4647 = fermeture à l’initiative de l’utilisateur |
| 4648 | Identifiants utilisés explicitement | runas, connexion avec un autre compte |
| 4672 | Privilèges spéciaux attribués | La session est administrative |
| 4740 | Compte verrouillé | Souvent après une force brute |
| 4768 | Demande de TGT Kerberos | Sur les contrôleurs de domaine |
| 4769 | Demande de ticket de service Kerberos | Sur les DC, base de la détection du Kerberoasting |
| 4771 | Échec de pré-authentification Kerberos | Sur les DC, mauvais mot de passe d’un compte du domaine |
| 4776 | Validation d’identifiants NTLM | Sur le DC (ou la machine pour un compte local) |
Lire un échec de connexion (4625)
Le 4625 contient un code d’état qui explique pourquoi la connexion a échoué :
| Code | Signification |
|---|---|
0xC000006A | Mauvais mot de passe (le compte existe) |
0xC0000064 | Le compte n’existe pas |
0xC0000234 | Compte verrouillé |
0xC0000072 | Compte désactivé |
0xC000006F | Connexion en dehors des horaires autorisés |
0xC0000071 | Mot de passe expiré |
0xC0000193 | Compte expiré |
Force brute ou password spraying ?
Force brute : beaucoup d’échecs 0xC000006A sur un seul compte, puis un 0xC0000234 quand il se verrouille. Password spraying : un ou deux essais sur beaucoup de comptes différents, avec un mot de passe courant, pour rester sous le seuil de verrouillage. Un 4624 qui suit une série d’échecs sur le même compte est le signal à ne pas rater.
Les processus, services et tâches
| ID | Journal | Signification |
|---|---|---|
| 4688 | Security | Création de processus (avec la ligne de commande si activée) |
| 4689 | Security | Fin de processus |
| 4697 | Security | Service installé |
| 7045 | System | Service installé (présent par défaut) |
| 7036 | System | Un service a démarré ou s’est arrêté |
| 4698 | Security | Tâche planifiée créée |
| 4702 | Security | Tâche planifiée modifiée |
| 106 | TaskScheduler | Tâche planifiée enregistrée |
| 4104 | PowerShell/Operational | Contenu d’un bloc de script PowerShell |
Les comptes et les groupes
| ID | Signification |
|---|---|
| 4720 | Compte créé |
| 4722 | Compte activé |
| 4724 | Tentative de réinitialisation de mot de passe |
| 4726 | Compte supprimé |
| 4728 | Membre ajouté à un groupe global de sécurité (ex. Admins du domaine) |
| 4732 | Membre ajouté à un groupe local de sécurité (ex. Administrateurs) |
| 4756 | Membre ajouté à un groupe universel de sécurité |
Les traces d’effacement
| ID | Journal | Signification |
|---|---|---|
| 1102 | Security | Le journal Sécurité a été effacé |
| 104 | System | Un journal a été effacé |
Effacer les journaux est une technique classique pour masquer une intrusion (T1070.001). C’est l’une des raisons pour lesquelles on envoie les journaux vers un collecteur ou un SIEM : ce qui est déjà parti ne peut plus être effacé localement.
Sysmon : des journaux beaucoup plus riches
Sysmon (System Monitor) est un outil gratuit de Microsoft (suite Sysinternals). Une fois installé avec une configuration adaptée, il enregistre des événements bien plus détaillés que ceux de Windows par défaut.
| ID | Événement | Pourquoi c’est utile |
|---|---|---|
| 1 | Création de processus | Ligne de commande, hash, processus parent, utilisateur |
| 3 | Connexion réseau | Quel processus contacte quelle IP et quel port |
| 7 | Image chargée | Chargement de DLL |
| 8 | CreateRemoteThread | Injection de code dans un autre processus |
| 10 | Accès à un processus | Un programme qui ouvre lsass.exe |
| 11 | Création de fichier | Dépôt d’un fichier |
| 12 / 13 / 14 | Registre | Création, modification, renommage de clés |
| 19 / 20 / 21 | WMI | Abonnements WMI (persistance) |
| 22 | Requête DNS | Quel processus a résolu quel nom |
Sysmon ne vaut que par sa configuration. Des configurations publiques servent de point de départ, comme celle de SwiftOnSecurity ou le projet sysmon-modular d’Olaf Hartong.
Le prochain article utilise ces journaux pour traquer la persistance : comment un attaquant fait pour revenir après un redémarrage.
L'essentiel
- Les journaux sont des fichiers .evtx dans C:\Windows\System32\winevt\Logs. Les principaux : Security, System, Application, et les journaux d'applications (PowerShell, Sysmon, planificateur de tâches…).
- 4624 = ouverture de session réussie, 4625 = échec, 4634 / 4647 = fermeture, 4648 = utilisation explicite d'identifiants, 4672 = privilèges spéciaux attribués.
- 4688 = création de processus (la ligne de commande n'y figure que si la stratégie l'active). 4697 et 7045 = service installé. 4698 = tâche planifiée créée.
- 4720 = compte créé, 4728 / 4732 / 4756 = membre ajouté à un groupe global / local / universel, 4740 = compte verrouillé.
- 4768 = demande de TGT Kerberos, 4769 = demande de ticket de service, 4776 = validation NTLM. 1102 = journal Sécurité effacé.
- Codes d'échec 4625 : 0xC000006A mauvais mot de passe, 0xC0000064 utilisateur inexistant, 0xC0000234 compte verrouillé, 0xC0000072 compte désactivé.
- Sysmon ajoute des événements beaucoup plus riches : 1 création de processus (avec hash et parent), 3 connexion réseau, 10 accès à un processus, 11 création de fichier, 22 requête DNS.
Idées reçues
Une rafale d'événements 4625 avec le sous-statut 0xC0000064 sur des noms variés. De quoi s'agit-il ?
L'erreur courante. Conclure à une force brute classique sur un compte.
En réalité. 0xC0000064 signifie que le compte n'existe pas. Des tentatives sur beaucoup de noms différents évoquent plutôt une énumération de comptes ou un password spraying avec une liste de noms devinés. Une force brute sur un compte existant donnerait plutôt 0xC000006A (mauvais mot de passe), puis 0xC0000234 (verrouillé).
Où voit-on les échecs d'authentification Kerberos d'un utilisateur du domaine ?
L'erreur courante. Chercher uniquement des 4625 sur le poste.
En réalité. Sur les contrôleurs de domaine : l'événement 4771 (échec de pré-authentification Kerberos, code 0x18 pour un mauvais mot de passe) et le 4768 en échec. Le 4625 apparaît sur la machine où l'on a tenté d'ouvrir la session, mais la vue d'ensemble se trouve sur les DC.
Les événements 4688 n'affichent pas la ligne de commande. Le journal est-il altéré ?
L'erreur courante. Soupçonner une manipulation.
En réalité. Non, c'est la configuration par défaut. Il faut activer la stratégie « Inclure la ligne de commande dans les événements de création de processus » (et l'audit de création de processus). Sans ça, on sait qu'un processus a été lancé, mais pas avec quels arguments.
Un événement 1102 apparaît en pleine journée sur un serveur. Pourquoi est-ce important ?
L'erreur courante. Penser à une simple maintenance sans vérifier.
En réalité. Le 1102 signale que le journal Sécurité a été effacé, et il indique quel compte l'a fait. Les attaquants effacent souvent les journaux pour masquer leurs traces (technique T1070.001). Même si c'est légitime, il faut retrouver qui et pourquoi, et récupérer les événements envoyés vers un collecteur ou un SIEM avant l'effacement.
Quelle différence entre le 4697 et le 7045 ?
L'erreur courante. Dire que c'est le même événement.
En réalité. Les deux signalent l'installation d'un service, mais pas dans le même journal : 4697 est dans le journal Sécurité (s'il est audité), 7045 dans le journal Système (présent par défaut). Le 7045 est donc souvent le plus fiable pour repérer un PsExec ou un service malveillant.
Tester ses connaissances
Références
- Windows Security Monitoring : Scenarios and PatternsAndrei Miroshnichenko · Wiley
- Applied Incident ResponseSteve Anson · Wiley
- Troubleshooting with the Windows Sysinternals Tools (2e éd.)Mark Russinovich, Aaron Margosis · Microsoft Press