Elouan

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
  1. Les processus Windows et leur arborescence normale
  2. Comptes, SID et droits sous Windows
  3. Lire les journaux Windows
  4. La persistance sous Windows
  5. Linux : utilisateurs, permissions et processus
  6. Linux : journaux et persistance

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.

JournalContenu
SecurityAuthentifications, accès, gestion des comptes, selon la stratégie d’audit
SystemServices, pilotes, démarrages et arrêts
ApplicationÉvénements des applications
Microsoft-Windows-PowerShell/OperationalExécution de PowerShell (dont les scripts, si activé)
Microsoft-Windows-Sysmon/OperationalÉvénements Sysmon, s’il est installé
Microsoft-Windows-TaskScheduler/OperationalTâ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

IDSignificationÀ retenir
4624Ouverture de session réussieRegarder le type de logon, le compte, l’IP source, le processus
4625Échec d’ouverture de sessionRegarder le statut et le sous-statut
4634 / 4647Fermeture de session4647 = fermeture à l’initiative de l’utilisateur
4648Identifiants utilisés explicitementrunas, connexion avec un autre compte
4672Privilèges spéciaux attribuésLa session est administrative
4740Compte verrouilléSouvent après une force brute
4768Demande de TGT KerberosSur les contrôleurs de domaine
4769Demande de ticket de service KerberosSur les DC, base de la détection du Kerberoasting
4771Échec de pré-authentification KerberosSur les DC, mauvais mot de passe d’un compte du domaine
4776Validation d’identifiants NTLMSur 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é :

CodeSignification
0xC000006AMauvais mot de passe (le compte existe)
0xC0000064Le compte n’existe pas
0xC0000234Compte verrouillé
0xC0000072Compte désactivé
0xC000006FConnexion en dehors des horaires autorisés
0xC0000071Mot de passe expiré
0xC0000193Compte 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

IDJournalSignification
4688SecurityCréation de processus (avec la ligne de commande si activée)
4689SecurityFin de processus
4697SecurityService installé
7045SystemService installé (présent par défaut)
7036SystemUn service a démarré ou s’est arrêté
4698SecurityTâche planifiée créée
4702SecurityTâche planifiée modifiée
106TaskSchedulerTâche planifiée enregistrée
4104PowerShell/OperationalContenu d’un bloc de script PowerShell

Les comptes et les groupes

IDSignification
4720Compte créé
4722Compte activé
4724Tentative de réinitialisation de mot de passe
4726Compte supprimé
4728Membre ajouté à un groupe global de sécurité (ex. Admins du domaine)
4732Membre ajouté à un groupe local de sécurité (ex. Administrateurs)
4756Membre ajouté à un groupe universel de sécurité

Les traces d’effacement

IDJournalSignification
1102SecurityLe journal Sécurité a été effacé
104SystemUn 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énementPourquoi c’est utile
1Création de processusLigne de commande, hash, processus parent, utilisateur
3Connexion réseauQuel processus contacte quelle IP et quel port
7Image chargéeChargement de DLL
8CreateRemoteThreadInjection de code dans un autre processus
10Accès à un processusUn programme qui ouvre lsass.exe
11Création de fichierDépôt d’un fichier
12 / 13 / 14RegistreCréation, modification, renommage de clés
19 / 20 / 21WMIAbonnements WMI (persistance)
22Requête DNSQuel 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

Textes de référence en ligne