HowTo #1 : Manipulation des fichiers de logs en Windows (FR)



1. Introduction

Bonjour à tous, nous voici dans le premier article de présentation de petits tips pour gagner du temps au quotidien sur des sujets divers et variés de la cybersécurité. Nous allons voir ici comment manipuler facilement les logs Windows via le Powershell.

En effet, si vous avez déjà visionné ces logs via l’observateur d’évènements Windows, vous vous êtes rendus compte que ce dernier avait quelques limites quand il faisait face à de gros fichiers ou quand vous souhaitiez faire des filtres plus complexes.

C’est donc pour cela que j’ai décidé de passer en Powershell qui embarque nativement des cmdlet faites pour la compréhension de ces fichiers. De plus, le point positif d’utiliser le Powershell est que l’automatisation peut être encore plus facile.

2. HowTo

Dans un premier temps, comment lire un ou plusieurs fichiers evtx en Powershell :

Get-WinEvent -Path "C:\Users\toto\evtx\my_evtx_file.evtx"
Get-WinEvent -Path "C:\Users\toto\evtx_files\*.evtx"

Bien entendu, il existe plusieurs formats supportés :

  • evt
  • evtx
  • etl

En terme d’affichage, voici le format ce que l’on a par défaut :

PS C:\Users\toto> Get-WinEvent -Path "C:\Users\toto\evtx_files\*.evtx"

   ProviderName: Microsoft-Windows-Security-Auditing

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
01/01/1970 10:10:10           4624 Information

Comme le Powershell est très puissant et malléable, il est possible de filtrer sur les journaux via leur nom directement comme ceci :

PS C:\Users\toto> Get-WinEvent Security

   ProviderName: Microsoft-Windows-Security-Auditing

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
01/01/1970 10:10:10           4624 Information	

PS C:\Users\toto> Get-WinEvent Application

   ProviderName: Windows Error Reporting

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
01/01/1970 10:10:10           1001 Information      Détecteur d'erreurs 0, type 4…

Comme la description des logs est très souvent à rallonge, il est possible d’utiliser les options suivantes pour avoir un affichage de toutes les propriétés de manière ajustée comme il se faut.

PS C:\Users\toto> Get-WinEvent Security | Format-Table -Property * -AutoSize -Wrap

Pour plus d’informations sur le formattage en PowerShell : https://learn.microsoft.com/en-us/powershell/scripting/samples/using-format-commands-to-change-output-view?view=powershell-7.3 

Si l’affichage en PowerShell ne vous convient pas il est également possible d’exporter tout cela dans un fichier CSV, pour cela il faut utiliser la fonction Export-CSV qui est expliquée plus en détail ici : https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-7.3 

Pour le filtrage il existe plusieurs possibilité :

  • -FilterXPath
  • -FilterHashtable

Le premier s’appuie sur le même filtrage que l’on peut faire dans l’observateur d’événements Windows.

Il faut ensuite récupérer le filtre entre les balises Select et l’insérer comme ceci dans la commande :

PS C:\Users\toto> Get-WinEvent Security -FilterXPath "*[System[(EventID=4104)]]"

Pour le deuxième type de filtrage, voici comment on peut effectuer un filtrage :

PS C:\Users\toto> Get-WinEvent -FilterHashtable @{ LogName='Application'; Id='1001' } -MaxEvent 1 | Format-Table -Property * -AutoSize -Wrap

Message
-------
Détecteur d'erreurs 0, type 4
Nom d’événement : APPCRASH
Réponse : Non disponible
ID de CAB : 0

[...]

On remarque ici que j’ai utilisé l’option -MaxEvent qui permet de limiter le nombre d’événements, cela permet de travailler sur sa requête sans faire une crise d’épilepsie. Il y a également la possibilité de jouer sur la temporalité en affichant anti-chronologiquement les logs avec l’option -Oldest.

Enfin, il est possible que vous souhaitiez faire un filtrage sur le message à la manière d’une recherche textuelle, il est possible d’utiliser la méthode suivante :

PS C:\Users\toto> Get-WinEvent Security | select @{Label='Messages';Expression={$_.properties.Value}} | Where-Object {$_.Messages -like "*docx*"}

3. Conclusion

Voilà pour l’essentiel, bien entendu il est possible de faire encore énormément de choses avec la cmdlet Get-WinEvent. A cela vient s’ajouter le fait que Powershell embarque beaucoup de fonctions permettant le filtrage, l’affichage ou encore l’export. Avec tout cela vous êtes donc en mesure de pouvoir mener vos investigations encore plus rapidement voire même de les automatiser.

4. Bibliographie


Merci d’avoir suivi ce petit tuto, en espérant que cela vous ait été utile. N’hésitez pas à me communiquer vos ressentis, tips…etc via le formulaire ci-dessous.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *