PowerShell Event ID 4104 : Blocs de script journalisés
- Event ID
- 4104
- Journal
- Microsoft-Windows-PowerShell/Operational
- Fournisseur
- Microsoft-Windows-PowerShell
- Fichier
- Microsoft-Windows-PowerShell%4Operational.evtx
- Catégorie
- PowerShell
- Journalisation par défaut
- À configurer
Que signifie l’événement 4104
L'événement 4104 est écrit par le moteur PowerShell lorsqu'il compile un bloc de script. Le champ ScriptBlockText contient le code tel que PowerShell le voit : commandes saisies à l'invite, scripts entiers, fonctions et — surtout — le code encodé en Base64, téléchargé ou construit à l'exécution, car la journalisation intervient une fois cette couche retirée.
Les scripts volumineux sont répartis sur plusieurs événements partageant un même ScriptBlockId ; MessageNumber et MessageTotal indiquent comment les réassembler. Le champ Path est renseigné lorsque le bloc provient d'un fichier de script.
Même sans aucune stratégie, PowerShell 5 et ultérieur consigne au niveau Avertissement les blocs de script contenant des mots-clés connus pour être suspects. La journalisation complète de chaque bloc exige la stratégie Script Block Logging, et c'est ce qui fait du 4104 la colonne vertébrale des investigations PowerShell.
Quand il est journalisé
Computer Configuration > Administrative Templates > Windows Components > Windows PowerShell > Turn on PowerShell Script Block Logging (ou la valeur de registre HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging\EnableScriptBlockLogging = 1).
Sans la stratégie, Windows PowerShell 5.x consigne tout de même les blocs qu'il juge suspects sous forme de 4104 de niveau Avertissement. PowerShell 7 écrit dans le canal PowerShellCore/Operational et dispose de ses propres paramètres de stratégie.
Champs clés
| Champ | Ce qu’il indique |
|---|---|
| ScriptBlockText | Le code du bloc de script, une fois retirées les couches d'obfuscation comme -EncodedCommand. |
| ScriptBlockId | GUID commun à toutes les parties d'un même bloc de script ; regroupez sur ce champ pour réassembler les longs scripts. |
| MessageNumber | Numéro de la partie contenue dans cet événement pour un bloc de script découpé. |
| MessageTotal | Nombre total de parties du bloc de script. |
| Path | Fichier de script d'où provient le bloc ; vide pour du code interactif ou en mémoire. |
Sources légitimes courantes
- Scripts d'administration, gestion de configuration (SCCM, Intune, DSC) et agents de supervision.
- Modules propres à PowerShell et scripts de profil chargés au démarrage.
- Installateurs de logiciels et automatisation IT utilisant PowerShell en coulisses.
Ce que font les attaquants qui le produit
- Download cradles comme
IEX (New-Object Net.WebClient).DownloadString(...)etInvoke-WebRequestrécupérant des charges utiles. - Commandes encodées ou obfusquées, récupérées ici sous forme lisible.
- Frameworks et outils offensifs chargés en mémoire (dump d'identifiants, reconnaissance AD, tentatives de contournement de l'AMSI).
- Commandes d'altération des défenses comme
Set-MpPreference -DisableRealtimeMonitoring.
Pistes d’investigation
- Filtrez d'abord le niveau 3 (Avertissement) — ce sont les blocs que PowerShell lui-même a signalés comme suspects.
- Réassemblez les blocs découpés par ScriptBlockId dans l'ordre de MessageNumber avant de les lire.
- Recherchez dans ScriptBlockText des indicateurs réseau (URL, IP),
FromBase64String,Invoke-Expression,-bxor,Reflection.Assemblyet des chaînes liées à l'AMSI. - Identifiez le processus qui a exécuté le bloc avec Sysmon 1 / Sécurité 4688 (ligne de commande de powershell.exe) et l'événement 400 du journal classique (HostApplication).
Techniques MITRE ATT&CK
MITRE ATT&CK v19.2. Noms des techniques et tactiques tels que publiés par MITRE (en anglais).
Règles Sigma pour cet événement
162 règles de détection SigmaHQ (version r2026-07-01) ciblent cet événement. Affichage des 25 règles les plus sévères.
- Critique · 2
- Élevé · 51
- Moyen · 89
- Faible · 20
- CritiqueSilence.EDA DetectionRule by Alina Stepchenkova, Group-IB, oscd.community, SigmaHQ, DRL 1.1
- CritiqueSuspicious PowerShell Mailbox Export to Share - PSRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéAADInternals PowerShell Cmdlets Execution - PsScriptRule by Austin Songer (@austinsonger), Nasreddine Bencherchali (Nextron Systems), Swachchhanda Shrawan Poudel (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéAbuse of Service Permissions to Hide Services Via Set-Service - PSRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéAMSI Bypass Pattern Assembly GetTypeRule by Florian Roth (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéClearing Windows Console HistoryRule by Austin Songer @austinsonger, SigmaHQ, DRL 1.1
- ÉlevéCode Executed Via Office Add-in XLL FileRule by frack113, SigmaHQ, DRL 1.1
- ÉlevéCreate Volume Shadow Copy with PowershellRule by frack113, SigmaHQ, DRL 1.1
- ÉlevéDeletion of Volume Shadow Copies via WMI with PowerShell - PS ScriptRule by Tim Rauch, frack113, SigmaHQ, DRL 1.1
- ÉlevéDisable of ETW Trace - PowershellRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéDisable Powershell Command HistoryRule by Ali Alwashali, SigmaHQ, DRL 1.1
- ÉlevéDisable-WindowsOptionalFeature Command PowerShellRule by frack113, SigmaHQ, DRL 1.1
- ÉlevéDSInternals Suspicious PowerShell Cmdlets - ScriptBlockRule by Nasreddine Bencherchali (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéHackTool - Rubeus Execution - ScriptBlockRule by Christian Burkard (Nextron Systems), Florian Roth (Nextron Systems), SigmaHQ, DRL 1.1
- ÉlevéHackTool - WinPwn Execution - ScriptBlockRule by Swachchhanda Shrawan Poudel, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation CLIP+ Launcher - PowerShellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation Obfuscated IEX Invocation - PowerShellRule by Daniel Bohannon (@Mandiant/@FireEye), oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation STDIN+ Launcher - PowershellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation VAR+ Launcher - PowerShellRule by Jonathan Cheong, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation VAR++ LAUNCHER OBFUSCATION - PowerShellRule by Timur Zinniatullin, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation Via Stdin - PowershellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation Via Use Clip - PowershellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation Via Use MSHTA - PowerShellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéInvoke-Obfuscation Via Use Rundll32 - PowerShellRule by Nikita Nazarov, oscd.community, SigmaHQ, DRL 1.1
- ÉlevéLive Memory Dump Using PowershellRule by Max Altgelt (Nextron Systems), SigmaHQ, DRL 1.1
Règles de leurs auteurs cités, publiées par SigmaHQ sous licence Detection Rule License (DRL) 1.1.
Exécutez ces règles sur vos journaux
Déposez un fichier .evtx dans la visionneuse : les 2 395 règles SigmaHQ embarquées s’exécutent dans votre navigateur. Rien n’est envoyé.