Module T6 — Terrain

Windows Event Logs & Sysmon

Les journaux d'evenements Windows et Sysmon sont les yeux et les oreilles du defenseur. Apprends a exploiter ces sources de telemetrie pour detecter les menaces et investiguer les incidents.

  • Comprendre l'architecture des Event Logs Windows et leur structure
  • Maitriser les Event IDs critiques pour la detection de menaces
  • Deployer et configurer Sysmon pour une visibilite avancee
  • Comprendre ETW (Event Tracing for Windows) et son role en securite
  • Detecter des scenarios d'attaque concrets via l'analyse de logs
  • Utiliser PowerShell pour l'investigation forensique des journaux

📖 T6.1 — Introduction aux Event Logs Windows

Les Windows Event Logs sont le systeme de journalisation centralise de Windows. Chaque action significative du systeme d'exploitation, des applications et des services de securite est enregistree sous forme d'evenement structure dans des fichiers .evtx.

Les Event Logs, ce sont les cameras de surveillance du systeme. Imagine un immeuble de bureaux : chaque etage a des cameras, des capteurs d'acces aux portes et des detecteurs de mouvement. Quand un incident survient (vol, intrusion), on consulte les enregistrements pour comprendre ce qui s'est passe. Les Event Logs Windows fonctionnent exactement pareil : ils enregistrent en permanence qui fait quoi, quand et comment sur la machine. Sans eux, tu enquetes a l'aveugle.

Categories de journaux

Windows organise ses journaux en plusieurs categories principales, chacune avec un role distinct :

JournalChemin dans Event ViewerDescriptionInteret securite
Application Windows Logs > Application Evenements generes par les applications installees Moyen — crashes d'apps, erreurs suspectes
Security Windows Logs > Security Audit des acces, authentifications, modifications de privileges Critique — source principale pour la detection
System Windows Logs > System Evenements du noyau, des drivers et des services systeme Eleve — installation de services, demarrage/arret
Setup Windows Logs > Setup Evenements d'installation de Windows et mises a jour Faible — utile pour le timeline
Forwarded Events Windows Logs > Forwarded Events Evenements collectes depuis d'autres machines (WEF) Eleve — centralisation des logs
Sysmon/Operational Applications and Services Logs > Microsoft > Windows > Sysmon Evenements detailles de Sysmon (si installe) Critique — visibilite avancee sur les processus, reseau, fichiers
PowerShell/Operational Applications and Services Logs > Microsoft > Windows > PowerShell Activite PowerShell detaillee Critique — detection de scripts malveillants

Structure d'un evenement

Chaque evenement Windows est un enregistrement structure au format XML contenant les champs suivants :

ChampDescriptionExemple
EventIDIdentifiant numerique unique de l'evenement4624 (logon reussi)
LevelGravite : Information, Warning, Error, CriticalInformation (0)
SourceComposant qui a genere l'evenementMicrosoft-Windows-Security-Auditing
TimeCreatedHorodatage precis en UTC2025-01-15T14:32:05.123Z
ComputerNom de la machine sourceDC01.corp.local
ChannelJournal de destinationSecurity
TaskCategorie de l'auditLogon (12544)
KeywordsAudit Success ou Audit FailureAudit Success
Message / EventDataDonnees detaillees specifiques a l'evenementTargetUserName, LogonType, IpAddress...

Localisation des fichiers de logs

Les fichiers .evtx sont stockes dans le repertoire systeme :

Emplacement des fichiers .evtx
# Emplacement par defaut des journaux Windows
C:\Windows\System32\winevt\Logs\

# Fichiers principaux
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Microsoft-Windows-Sysmon%4Operational.evtx
C:\Windows\System32\winevt\Logs\Microsoft-Windows-PowerShell%4Operational.evtx

# Taille par defaut : 20 Mo par journal (configurable)
# Format binaire .evtx (remplace le .evt depuis Vista/2008)
Visualiser la structure XML d'un evenement
# Exporter un evenement en XML avec PowerShell
Get-WinEvent -LogName Security -MaxEvents 1 | Format-List *

# Structure XML typique d'un evenement 4624
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{...}" />
    <EventID>4624</EventID>
    <Version>2</Version>
    <Level>0</Level>
    <Task>12544</Task>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2025-01-15T14:32:05.1234567Z" />
    <Computer>DC01.corp.local</Computer>
    <Channel>Security</Channel>
  </System>
  <EventData>
    <Data Name="TargetUserName">jdupont</Data>
    <Data Name="TargetDomainName">CORP</Data>
    <Data Name="LogonType">10</Data>
    <Data Name="IpAddress">192.168.1.50</Data>
    <Data Name="LogonProcessName">User32</Data>
    <Data Name="AuthenticationPackageName">Negotiate</Data>
  </EventData>
</Event>
Outils de visualisation
Event Viewer (eventvwr.msc) est l'outil graphique integre a Windows. Pour l'investigation avancee, on utilise Get-WinEvent (PowerShell), wevtutil (ligne de commande), ou des outils tiers comme EvtxECmd (Eric Zimmerman) et Hayabusa (detection rapide).

🔎 T6.2 — Event IDs critiques pour la securite

Sur les milliers d'Event IDs existants, une poignee sont essentiels pour la detection de menaces et l'investigation. Voici les incontournables que tout analyste SOC doit connaitre par coeur.

Tableau des Event IDs critiques

Event IDJournalDescriptionInteret securite
4624 Security Connexion reussie (Logon Success) Identifier les connexions legitimes et suspectes, correler avec le LogonType
4625 Security Echec de connexion (Logon Failure) Detecter le brute force, le password spraying, les tentatives d'acces non autorisees
4648 Security Connexion avec des identifiants explicites (runas) Detecter l'utilisation de credentials volee, mouvement lateral
4672 Security Privileges speciaux assignes a un nouveau logon Identifier les connexions administratives, elevation de privileges suspecte
4688 Security Un nouveau processus a ete cree Tracking de l'execution de programmes — necessite l'activation de l'audit
4697 Security Un service a ete installe dans le systeme Detection de persistance via services malveillants
7045 System Un nouveau service a ete installe Meme role que 4697 mais dans le journal System — toujours actif
4720 Security Un compte utilisateur a ete cree Creation de backdoor accounts, persistence
4726 Security Un compte utilisateur a ete supprime Suppression de traces apres creation de comptes malveillants
4732 Security Un membre a ete ajoute a un groupe local Ajout au groupe Administrators — elevation de privileges
4733 Security Un membre a ete retire d'un groupe local Nettoyage apres ajout malveillant a un groupe
1102 Security Le journal d'audit a ete efface Alerte maximale — un attaquant efface ses traces
4104 PowerShell/Operational Script Block Logging — contenu du script execute Critique — voir le code PowerShell execute meme s'il est obfusque
4656 Security Un handle a ete demande sur un objet Acces a lsass.exe (credential dumping), fichiers sensibles
4663 Security Une tentative d'acces a un objet a ete effectuee Acces aux fichiers et registres sensibles
4698 Security Une tache planifiee a ete creee Persistance via scheduled tasks

Types de connexion (Logon Types)

Le champ LogonType dans les evenements 4624/4625 revele comment l'utilisateur s'est connecte. C'est une information cruciale pour l'investigation :

LogonTypeNomDescriptionScenario typique
2 Interactive Connexion physique au clavier Utilisateur qui se connecte sur sa machine
3 Network Connexion reseau (partage, SMB) Acces a un partage reseau, mouvement lateral
4 Batch Execution de tache planifiee Scheduled task qui s'execute sous un compte specifique
5 Service Demarrage d'un service Windows Service qui demarre avec un compte de service
7 Unlock Deverrouillage de session Retour apres verrouillage ecran
8 NetworkCleartext Connexion reseau avec mot de passe en clair IIS Basic Auth — suspect si inattendu
9 NewCredentials Utilisation de credentials differents (runas /netonly) Mouvement lateral avec credentials volee
10 RemoteInteractive Connexion Bureau a Distance (RDP) Administration distante, mouvement lateral RDP
11 CachedInteractive Connexion avec credentials en cache Laptop deconnecte du reseau
Combinaisons suspectes a surveiller
  • 4624 Type 10 + source IP inhabituelle — Mouvement lateral via RDP
  • 4625 en rafale (>5 en 60s) — Brute force en cours
  • 4624 Type 3 + compte admin + heure anormale — Acces reseau suspect
  • 4648 + compte different du logon courant — Utilisation de credentials volee
  • 4672 sur un compte non-admin — Elevation de privileges suspecte
  • 1102 a n'importe quel moment — Effacement de traces, alerte maximale

👁 T6.3 — Sysmon : la visibilite avancee

Sysmon (System Monitor) est un outil gratuit de la suite Sysinternals (Microsoft) qui etend considerablement la visibilite sur l'activite systeme. La ou les Event Logs natifs manquent de details, Sysmon comble les lacunes avec une telemetrie riche et granulaire.

Si les Event Logs natifs sont des cameras de surveillance standard, Sysmon est un systeme de videosurveillance HD avec vision nocturne. Les cameras standard captent les entrees et sorties, mais Sysmon te montre aussi chaque mouvement dans chaque piece, chaque objet manipule, chaque porte ouverte. C'est la difference entre savoir que quelqu'un est entre et savoir exactement ce qu'il a fait a l'interieur.

Pourquoi Sysmon est essentiel

CapaciteSans SysmonAvec Sysmon
Creation de processusEvent 4688 (basique, pas de ligne de commande par defaut)Event 1 — ligne de commande complete, hash, processus parent, user
Connexions reseauFirewall log (limites)Event 3 — processus source, IP/port destination, protocole
Chargement de DLLAucune visibiliteEvent 7 — quelle DLL, signee ou non, hash
Injection de threadAucune visibiliteEvent 8 — processus source et cible
Acces a la memoireEvent 4656 (limites)Event 10 — acces a LSASS detectable
Creation de fichiersAudit objet (bruyant)Event 11 — creation de fichiers ciblee
Requetes DNSDNS Debug Log (lourd)Event 22 — requete DNS par processus

Event IDs Sysmon cles

Event IDNomDescriptionCas d'usage detection
1 Process Create Creation d'un processus avec ligne de commande, hash, parent process Execution de malware, LOLBins, processus suspects
3 Network Connection Connexion TCP/UDP avec processus source, IP et port de destination C2 callbacks, exfiltration, connexions suspectes
7 Image Loaded Chargement d'une DLL/module par un processus DLL hijacking, side-loading, DLL injection
8 CreateRemoteThread Un processus cree un thread dans un autre processus Injection de code, Cobalt Strike, Meterpreter
10 Process Access Un processus ouvre un handle vers un autre processus Credential dumping (acces a lsass.exe), process hollowing
11 File Create Creation ou ecrasement d'un fichier Malware droppe sur disque, fichiers dans Temp/Startup
12/13/14 Registry Events Creation, modification, suppression de cles/valeurs de registre Persistance via Run keys, modification de securite
15 FileCreateStreamHash Creation d'un Alternate Data Stream (ADS) Malware cache dans des ADS, mark-of-the-web
17/18 Pipe Events Creation et connexion de named pipes C2 via named pipes (Cobalt Strike, PsExec)
22 DNS Query Requete DNS effectuee par un processus DNS C2, DGA domains, exfiltration DNS
23 File Delete Suppression de fichier (avec archivage optionnel) Suppression de traces par l'attaquant
25 Process Tampering Alteration d'image de processus (process hollowing, herpaderping) Techniques d'evasion avancees
26 File Delete Logged Suppression de fichier loguee (sans archivage) Tracking des fichiers supprimes

Installation et configuration de Sysmon

Installation de Sysmon
# Telecharger Sysmon depuis Sysinternals
# https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon

# Installation basique (configuration par defaut)
sysmon64.exe -accepteula -i

# Installation avec un fichier de configuration personnalise
sysmon64.exe -accepteula -i sysmonconfig.xml

# Mettre a jour la configuration sans reinstaller
sysmon64.exe -c sysmonconfig.xml

# Verifier le statut de Sysmon
sc query sysmon64

# Desinstaller Sysmon (si necessaire)
sysmon64.exe -u
Configuration SwiftOnSecurity (extrait simplifie)
<Sysmon schemaversion="4.90">
  <!-- Capturer les hash en SHA256 -->
  <HashAlgorithms>SHA256,IMPHASH</HashAlgorithms>

  <!-- Archiver les fichiers supprimes -->
  <ArchiveDirectory>SysmonArchive</ArchiveDirectory>

  <EventFiltering>

    <!-- Event ID 1 : Process Create -->
    <RuleGroup name="ProcessCreate" groupRelation="or">
      <ProcessCreate onmatch="exclude">
        <!-- Exclure les processus systeme bruyants -->
        <Image condition="is">C:\Windows\System32\conhost.exe</Image>
        <Image condition="is">C:\Windows\System32\backgroundTaskHost.exe</Image>
      </ProcessCreate>
    </RuleGroup>

    <!-- Event ID 3 : Network Connection -->
    <RuleGroup name="NetworkConnect" groupRelation="or">
      <NetworkConnect onmatch="include">
        <!-- Capturer les connexions de processus suspects -->
        <Image condition="end with">powershell.exe</Image>
        <Image condition="end with">cmd.exe</Image>
        <Image condition="end with">rundll32.exe</Image>
        <Image condition="end with">regsvr32.exe</Image>
        <Image condition="end with">mshta.exe</Image>
        <Image condition="end with">certutil.exe</Image>
      </NetworkConnect>
    </RuleGroup>

    <!-- Event ID 7 : Image Loaded (DLL) -->
    <RuleGroup name="ImageLoad" groupRelation="or">
      <ImageLoad onmatch="include">
        <!-- DLL non signees chargees depuis des repertoires suspects -->
        <Signed condition="is">false</Signed>
        <ImageLoaded condition="contains">\Temp\</ImageLoaded>
        <ImageLoaded condition="contains">\AppData\</ImageLoaded>
      </ImageLoad>
    </RuleGroup>

    <!-- Event ID 10 : Process Access (LSASS protection) -->
    <RuleGroup name="ProcessAccess" groupRelation="or">
      <ProcessAccess onmatch="include">
        <TargetImage condition="end with">lsass.exe</TargetImage>
      </ProcessAccess>
    </RuleGroup>

    <!-- Event ID 22 : DNS Query -->
    <RuleGroup name="DnsQuery" groupRelation="or">
      <DnsQuery onmatch="exclude">
        <!-- Exclure les requetes DNS systeme bruyantes -->
        <QueryName condition="end with">.microsoft.com</QueryName>
        <QueryName condition="end with">.windowsupdate.com</QueryName>
      </DnsQuery>
    </RuleGroup>

  </EventFiltering>
</Sysmon>
Configuration recommandee
La configuration SwiftOnSecurity/sysmon-config sur GitHub est la reference communautaire. Elle filtre le bruit tout en capturant les evenements pertinents pour la securite. Utilise-la comme base et adapte-la a ton environnement. Autre excellent choix : olafhartong/sysmon-modular qui offre une approche modulaire.

⚙️ T6.4 — Event Tracing for Windows (ETW)

ETW (Event Tracing for Windows) est le mecanisme de tracing bas niveau du noyau Windows. C'est l'infrastructure sur laquelle tous les Event Logs, Sysmon, et la plupart des outils de securite reposent. Comprendre ETW permet de debloquer des sources de telemetrie que les logs classiques ne couvrent pas.

Architecture ETW

Architecture ETW : Providers, Sessions, Consumers
Providers (Producteurs d'evenements)

Composants systeme et applications qui emettent des evenements. Chaque provider a un GUID unique. Exemples : Microsoft-Windows-Security-Auditing, Microsoft-Windows-Kernel-Process, Microsoft-Windows-DNS-Client.

Sessions (Canaux de transport)

Buffers en memoire qui collectent les evenements des providers et les acheminent vers les consumers. Gerees par le ETW Controller. Sessions notables : NT Kernel Logger, EventLog-Security.

Consumers (Recepteurs)

Applications qui lisent les evenements des sessions en temps reel ou depuis des fichiers .etl. Exemples : Event Viewer, Windows Defender, SIEM agents, outils de forensique.

ETW pour la securite

ETW donne acces a des telemetries invisibles dans les Event Logs classiques :

Provider ETWGUIDTelemetrie fournie
Microsoft-Windows-Threat-Intelligence {F4E1897A-BB5D-5668-F1D8-040F4D8DD344} Injection memoire, allocations RWX, modifications de memoire de processus
Microsoft-Windows-Kernel-Process {22FB2CD6-0E7B-422B-A0C7-2FAD1FD0E716} Creation/terminaison de processus au niveau noyau
Microsoft-Windows-DNS-Client {1C95126E-7EEA-49A9-A3FE-A378B03DDB4D} Requetes DNS detaillees
Microsoft-Windows-DotNETRuntime {E13C0D23-CCBC-4E12-931B-D9CC2EEE27E4} Chargement d'assemblies .NET (detection de .NET in-memory)
Microsoft-Windows-LDAP-Client {099614A5-5DD7-4788-8BC9-E29F43DB28FC} Requetes LDAP (BloodHound, AD enumeration)

Commandes ETW pratiques

Lister les providers ETW
# Lister tous les providers ETW enregistres
logman query providers

# Rechercher un provider specifique
logman query providers | findstr /i "security"
logman query providers | findstr /i "sysmon"

# Voir les details d'un provider
logman query providers "Microsoft-Windows-Security-Auditing"

# Lister les providers actifs sur une session
logman query -ets
Creer une session de trace ETW
# Creer une session de trace pour le provider DNS
logman create trace DNSTrace -p "Microsoft-Windows-DNS-Client" -o C:\Traces\dns.etl

# Demarrer la session
logman start DNSTrace

# Laisser la trace collecter pendant un moment...

# Arreter la session
logman stop DNSTrace

# Convertir le fichier .etl en texte lisible
tracerpt C:\Traces\dns.etl -o C:\Traces\dns_report.txt -of TEXT

# Convertir en CSV pour analyse
tracerpt C:\Traces\dns.etl -o C:\Traces\dns_report.csv -of CSV

# Supprimer la session de trace
logman delete DNSTrace
PowerShell : consommer des evenements ETW en temps reel
# Lister les sessions ETW actives
Get-EtwTraceSession

# Lister les providers d'une session
Get-EtwTraceProvider -SessionName "EventLog-Security"

# Creer une trace en PowerShell
New-EtwTraceSession -Name "MySecurityTrace" -LogFileMode 0x2 -FlushTimer 1
Add-EtwTraceProvider -SessionName "MySecurityTrace" `
  -Guid "{F4E1897A-BB5D-5668-F1D8-040F4D8DD344}" `
  -Level 5 -MatchAnyKeyword 0xFFFFFFFF

# Arreter et supprimer
Stop-EtwTraceSession -Name "MySecurityTrace"
Remove-EtwTraceSession -Name "MySecurityTrace"
ETW Tampering par les attaquants
Les attaquants avances peuvent desactiver des providers ETW pour aveugler les defenses. Techniques connues : patch de ntdll!EtwEventWrite en memoire, suppression de sessions de trace, ou desactivation de providers via logman. Surveiller les Event ID Sysmon 25 (Process Tampering) et les modifications des sessions ETW.

😈 T6.5 — Finding Evil : scenarios de detection

La theorie c'est bien, la pratique c'est mieux. Voici des scenarios d'attaque concrets et les requetes PowerShell correspondantes pour les detecter via les Event Logs et Sysmon.

Attaque : L'attaquant place une DLL malveillante dans un repertoire ou une application legitime va la charger a la place de la DLL legitime (DLL Search Order Hijacking).

Indicateurs : Sysmon Event ID 7 (Image Loaded) avec une DLL non signee chargee depuis un chemin inhabituel (Temp, AppData, Downloads).

Detection DLL Hijacking — Sysmon Event 7
# DLL non signees chargees depuis des repertoires suspects
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Sysmon/Operational'
    Id = 7
} | Where-Object {
    $_.Properties[6].Value -eq 'false' -and  # Signed = false
    ($_.Properties[5].Value -match '\\Temp\\|\\AppData\\|\\Downloads\\|\\Desktop\\|\\Public\\')
} | Select-Object TimeCreated,
    @{N='Process';E={$_.Properties[4].Value}},
    @{N='DLL';E={$_.Properties[5].Value}},
    @{N='Signed';E={$_.Properties[6].Value}} |
  Format-Table -AutoSize

# Chercher des DLL avec des noms de DLL systeme dans des chemins anormaux
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Sysmon/Operational'
    Id = 7
} | Where-Object {
    $_.Properties[5].Value -match '(version\.dll|winhttp\.dll|dbghelp\.dll|cryptsp\.dll)' -and
    $_.Properties[5].Value -notmatch 'C:\\Windows\\System32'
} | Format-List TimeCreated, Message

Attaque : L'attaquant execute des commandes PowerShell encodees en base64 ou obfusquees via des frameworks C2 (Empire, Cobalt Strike).

Indicateurs : Event ID 4104 (Script Block Logging) contenant des patterns suspects : -EncodedCommand, FromBase64String, IEX, Invoke-Expression, DownloadString.

Detection PowerShell malveillant — Event 4104
# Rechercher des commandes PowerShell suspectes dans le Script Block Log
$suspiciousPatterns = @(
    'FromBase64String',
    'EncodedCommand',
    'Invoke-Expression',
    'IEX\s*\(',
    'DownloadString',
    'DownloadFile',
    'Net\.WebClient',
    'Invoke-Mimikatz',
    'Invoke-Shellcode',
    'Start-Process.*-WindowStyle.*Hidden',
    'bypass',
    'AmsiUtils',
    'Reflection\.Assembly',
    'GetDelegateForFunctionPointer',
    'VirtualAlloc',
    'CreateThread'
)
$regex = ($suspiciousPatterns -join '|')

Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-PowerShell/Operational'
    Id = 4104
} -MaxEvents 1000 | Where-Object {
    $_.Message -match $regex
} | Select-Object TimeCreated,
    @{N='ScriptBlock';E={$_.Message.Substring(0, [Math]::Min(200, $_.Message.Length))}} |
  Format-Table -AutoSize

Attaque : L'attaquant accede au processus lsass.exe pour extraire les credentials en memoire (Mimikatz, ProcDump, comsvcs.dll).

Indicateurs : Sysmon Event ID 10 (Process Access) ciblant lsass.exe avec des droits d'acces 0x1010 ou 0x1FFFFF. Security Event 4656 avec acces a lsass.

Detection Credential Dumping — Sysmon Event 10
# Detecter les acces suspects a LSASS via Sysmon
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Sysmon/Operational'
    Id = 10
} | Where-Object {
    $_.Properties[8].Value -match 'lsass\.exe'  # TargetImage
} | Select-Object TimeCreated,
    @{N='SourceProcess';E={$_.Properties[4].Value}},
    @{N='TargetProcess';E={$_.Properties[8].Value}},
    @{N='GrantedAccess';E={$_.Properties[10].Value}} |
  Format-Table -AutoSize

# Via Security Log — Event 4656
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id = 4656
} | Where-Object {
    $_.Message -match 'lsass\.exe'
} | Select-Object TimeCreated,
    @{N='Details';E={$_.Message.Substring(0, 300)}} |
  Format-Table -Wrap

Attaque : L'attaquant utilise des credentials volees pour se connecter a d'autres machines du reseau via SMB, WMI, PsExec ou RDP.

Indicateurs : Event 4624 Type 3 (Network) ou Type 10 (RDP) avec une source IP inhabituelle ou un compte qui ne se connecte normalement pas a cette machine.

Detection mouvement lateral — Event 4624
# Connexions reseau (Type 3) depuis des sources inhabituelles
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id = 4624
} -MaxEvents 5000 | Where-Object {
    # Logon Type 3 (Network) ou 10 (RDP)
    $logonType = $_.Properties[8].Value
    $sourceIP = $_.Properties[18].Value
    ($logonType -eq 3 -or $logonType -eq 10) -and
    $sourceIP -ne '-' -and
    $sourceIP -ne '::1' -and
    $sourceIP -ne '127.0.0.1'
} | Select-Object TimeCreated,
    @{N='User';E={$_.Properties[5].Value}},
    @{N='Domain';E={$_.Properties[6].Value}},
    @{N='LogonType';E={$_.Properties[8].Value}},
    @{N='SourceIP';E={$_.Properties[18].Value}},
    @{N='SourceHost';E={$_.Properties[11].Value}} |
  Sort-Object SourceIP |
  Format-Table -AutoSize

# Identifier les connexions RDP (Type 10) hors heures
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id = 4624
} -MaxEvents 10000 | Where-Object {
    $_.Properties[8].Value -eq 10 -and
    ($_.TimeCreated.Hour -lt 7 -or $_.TimeCreated.Hour -gt 20)
} | Select-Object TimeCreated,
    @{N='User';E={$_.Properties[5].Value}},
    @{N='SourceIP';E={$_.Properties[18].Value}} |
  Format-Table -AutoSize

Attaque : L'attaquant cree un service Windows malveillant pour maintenir son acces meme apres un redemarrage.

Indicateurs : Event 7045 (System) ou 4697 (Security) avec un nom de service suspect, un chemin d'executable inhabituel, ou un service en mode auto.

Detection persistence par service — Event 7045
# Nouveaux services installes (Event 7045 — System log)
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Id = 7045
} | Select-Object TimeCreated,
    @{N='ServiceName';E={$_.Properties[0].Value}},
    @{N='ImagePath';E={$_.Properties[1].Value}},
    @{N='ServiceType';E={$_.Properties[2].Value}},
    @{N='StartType';E={$_.Properties[3].Value}},
    @{N='AccountName';E={$_.Properties[4].Value}} |
  Format-Table -AutoSize

# Filtrer les services avec des chemins suspects
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Id = 7045
} | Where-Object {
    $path = $_.Properties[1].Value
    $path -match '\\Temp\\|\\AppData\\|\\Downloads\\|cmd\.exe|powershell|rundll32' -or
    $path -match '\.bat$|\.ps1$|\.vbs$'
} | Select-Object TimeCreated,
    @{N='ServiceName';E={$_.Properties[0].Value}},
    @{N='ImagePath';E={$_.Properties[1].Value}} |
  Format-Table -Wrap

Attaque : L'attaquant efface les Event Logs pour supprimer les traces de son intrusion.

Indicateurs : Event 1102 (Security log cleared) — cet evenement est toujours enregistre meme quand le journal est efface, car il est ecrit apres le vidage. C'est une alerte de severite maximale.

Detection effacement de logs — Event 1102
# Detecter l'effacement du journal Security
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id = 1102
} | Select-Object TimeCreated,
    @{N='ClearedBy';E={$_.Properties[1].Value}},
    @{N='Domain';E={$_.Properties[2].Value}} |
  Format-Table -AutoSize

# Detecter l'effacement de TOUT journal (Event 104 — System)
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Id = 104
} | Select-Object TimeCreated,
    @{N='LogCleared';E={$_.Properties[0].Value}},
    @{N='User';E={$_.Properties[1].Value}} |
  Format-Table -AutoSize

# Verifier s'il y a des trous dans les logs (gap analysis)
$events = Get-WinEvent -LogName Security -MaxEvents 10000
$gaps = for ($i = 1; $i -lt $events.Count; $i++) {
    $diff = ($events[$i-1].TimeCreated - $events[$i].TimeCreated).TotalMinutes
    if ($diff -gt 60) {
        [PSCustomObject]@{
            GapStart = $events[$i].TimeCreated
            GapEnd   = $events[$i-1].TimeCreated
            GapMinutes = [math]::Round($diff)
        }
    }
}
$gaps | Format-Table -AutoSize

🔨 T6.6 — PowerShell pour l'investigation

Get-WinEvent est l'outil PowerShell principal pour interroger les Event Logs Windows. Il remplace l'ancien Get-EventLog et supporte les requetes XPath pour un filtrage precis et performant.

Syntaxe et methodes de filtrage

FilterHashtable — methode recommandee
# Syntaxe de base : FilterHashtable
# Filtre cote provider = RAPIDE (pas de chargement complet en memoire)
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'       # Nom du journal
    Id        = 4625             # Event ID
    StartTime = (Get-Date).AddDays(-7)  # Depuis 7 jours
    EndTime   = Get-Date         # Jusqu'a maintenant
} -MaxEvents 100

# Filtrer plusieurs Event IDs
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id      = 4624, 4625, 4672   # Logons, echecs, privileges
}

# Filtrer par niveau de severite
Get-WinEvent -FilterHashtable @{
    LogName = 'System'
    Level   = 1, 2               # 1=Critical, 2=Error
}

# Filtrer par provider
Get-WinEvent -FilterHashtable @{
    ProviderName = 'Microsoft-Windows-Security-Auditing'
    Id = 4688
}
FilterXML — requetes XPath avancees
# XPath permet de filtrer sur les champs EventData (plus precis)

# Echecs de logon pour un utilisateur specifique
Get-WinEvent -FilterXml @"
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4625)]]
      and
      *[EventData[Data[@Name='TargetUserName']='admin']]
    </Select>
  </Query>
</QueryList>
"@

# Connexions RDP (LogonType 10) depuis une IP specifique
Get-WinEvent -FilterXml @"
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4624)]]
      and
      *[EventData[Data[@Name='LogonType']='10']]
      and
      *[EventData[Data[@Name='IpAddress']='192.168.1.50']]
    </Select>
  </Query>
</QueryList>
"@

# Processus crees par cmd.exe ou powershell.exe (Event 4688)
Get-WinEvent -FilterXml @"
<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4688)]]
      and
      *[EventData[Data[@Name='ParentProcessName']='C:\Windows\System32\cmd.exe'
        or Data[@Name='ParentProcessName']='C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe']]
    </Select>
  </Query>
</QueryList>
"@

Requetes d'investigation pratiques

Requetes forensiques courantes
# === TIMELINE : reconstituer la chronologie d'un incident ===

# Tous les evenements de securite pour un utilisateur compromis
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    StartTime = '2025-01-15 08:00:00'
    EndTime   = '2025-01-15 20:00:00'
} | Where-Object { $_.Message -match 'jdupont' } |
  Select-Object TimeCreated, Id,
    @{N='Summary';E={$_.Message.Split("`n")[0]}} |
  Sort-Object TimeCreated |
  Export-Csv -Path C:\Investigation\timeline_jdupont.csv -NoTypeInformation

# === BRUTE FORCE : detecter les tentatives en rafale ===

# Top 10 des comptes avec le plus d'echecs de connexion
Get-WinEvent -FilterHashtable @{
    LogName = 'Security'
    Id      = 4625
    StartTime = (Get-Date).AddHours(-24)
} | ForEach-Object {
    $_.Properties[5].Value  # TargetUserName
} | Group-Object | Sort-Object Count -Descending |
  Select-Object -First 10 Name, Count

# === PROCESS TREE : tracer l'arbre de processus ===

# Sysmon Event 1 — voir les processus et leurs parents
Get-WinEvent -FilterHashtable @{
    LogName = 'Microsoft-Windows-Sysmon/Operational'
    Id = 1
    StartTime = (Get-Date).AddHours(-1)
} | Select-Object TimeCreated,
    @{N='Process';E={$_.Properties[4].Value}},
    @{N='CommandLine';E={$_.Properties[10].Value}},
    @{N='ParentProcess';E={$_.Properties[20].Value}},
    @{N='ParentCommandLine';E={$_.Properties[21].Value}},
    @{N='User';E={$_.Properties[12].Value}} |
  Format-Table -Wrap

# === STATISTIQUES : vue d'ensemble rapide ===

# Distribution des Event IDs dans le Security log
Get-WinEvent -LogName Security -MaxEvents 50000 |
  Group-Object Id |
  Sort-Object Count -Descending |
  Select-Object -First 20 Name, Count |
  Format-Table -AutoSize
wevtutil — outil ligne de commande natif
# Lister les journaux disponibles
wevtutil el

# Statistiques d'un journal
wevtutil gli Security

# Exporter un journal complet
wevtutil epl Security C:\Export\Security_backup.evtx

# Requete XPath en ligne de commande
wevtutil qe Security /q:"*[System[(EventID=4625)]]" /c:10 /f:text

# Effacer un journal (attention !)
wevtutil cl Security

# Nombre d'evenements dans un journal
wevtutil gli Security | findstr "numberOfLogRecords"
Performance : FilterHashtable vs Where-Object
Toujours privilegier FilterHashtable ou FilterXml plutot que Where-Object pour le filtrage initial. FilterHashtable filtre cote provider (rapide), alors que Where-Object charge tous les evenements en memoire puis filtre (lent). Sur un journal Security de plusieurs millions d'evenements, la difference est enorme. Utilise Where-Object uniquement pour un filtrage supplementaire apres FilterHashtable.

🔨 T6.7 — Lab : Terminal interactif

Exercice 1 : Investigation PowerShell

Utilise le terminal ci-dessous pour pratiquer les commandes d'investigation. Tape help pour voir les commandes disponibles.

PowerShell Investigation Lab — Windows Event Logs & Sysmon
# Bienvenue dans le lab d'investigation Windows !
# Scenario : Une machine a ete compromise. Analyse les logs.
# Tape 'help' pour voir les commandes disponibles
PS C:\Investigation>

Exercice 2 : Associe chaque Event ID a sa signification

Glisse chaque Event ID dans la zone correspondant a sa description.

4624
4625
4688
7045
1102
4104
4720
4672
✅ Connexion reussie
❌ Echec de connexion
⚙️ Nouveau processus
🔧 Service installe
🚨 Journal efface
📜 Script PowerShell
👤 Compte cree
👑 Privileges speciaux

✅ T6.8 — Quiz Windows Event Logs & Sysmon

Teste tes connaissances sur les journaux Windows et Sysmon. 15 questions pour valider ta maitrise du module.

Points cles du Module T6

  • Les Event Logs Windows sont stockes en fichiers .evtx dans C:\Windows\System32\winevt\Logs\ — le journal Security est la source principale pour la detection
  • Chaque evenement a un EventID, un Level, une Source, un TimeCreated et des EventData specifiques
  • Les Event IDs critiques : 4624/4625 (logon), 4688 (process), 7045 (service), 1102 (log cleared), 4104 (PowerShell)
  • Le LogonType dans les events 4624/4625 revele le mode de connexion : Type 2 (local), 3 (reseau/SMB), 10 (RDP)
  • Sysmon etend la visibilite avec des evenements detailles : processus (1), reseau (3), DLL (7), acces memoire (10), DNS (22)
  • La configuration Sysmon SwiftOnSecurity est la reference communautaire — elle filtre le bruit et capture l'essentiel
  • ETW (Event Tracing for Windows) est l'infrastructure sous-jacente de toute la telemetrie Windows — les providers ETW offrent des donnees invisibles dans les logs classiques
  • Get-WinEvent avec -FilterHashtable est la methode la plus performante pour interroger les logs — privilegier le filtrage cote provider
  • Les requetes XPath via -FilterXml permettent de filtrer sur les champs EventData specifiques
  • Toujours correler plusieurs sources (Security + Sysmon + PowerShell) pour reconstituer une timeline d'incident complete