Les journaux de blocs de scripts PowerShell se trouvent dans Applications and Services Logs → Microsoft → Windows → PowerShell → Operational, comme événement 4104. Ils ne sont complets que si l’enregistrement des blocs de scripts est activé. Pour les exporter :
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logspowershell.evtx
PowerShell 7 est un produit distinct avec un canal distinct, PowerShellCore/Operational, et son propre paramètre de politique.
Si un attaquant a accédé à une machine Windows, il y a de fortes chances que PowerShell soit impliqué. L’enregistrement des blocs de scripts enregistre le code réellement exécuté, souvent après que les couches d’obfuscation ont été retirées. Prime Core dispose de 663 règles de détection pour les journaux PowerShell, mappées à 417 techniques MITRE ATT&CK. Elles couvrent l’utilisation malveillante de PowerShell (T1059.001), l’obfuscation (T1027) et les cradles de téléchargement qui importent des outils (T1105).
Avant de commencer
L’enregistrement des blocs de scripts est-il activé ?
reg query "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging"
EnableScriptBlockLogging réglé sur 0x1 signifie oui. Si la clé n’existe pas, il est désactivé. Même dans ce cas, Windows PowerShell 5.1 enregistre toujours les blocs de scripts qu’il considère comme suspects, sous forme d’événements 4104 au niveau d’avertissement. Donc, vous pouvez trouver certains événements. Ne les prenez simplement pas pour l’ensemble complet.
L’activer aide à partir de maintenant, pas pour ce qui s’est déjà passé. Utilisez le paramètre de stratégie de groupe Modèles d’administration → Composants Windows → Windows PowerShell → Activer l’enregistrement des blocs de scripts PowerShell, ou définissez directement la valeur du registre :
reg add "HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f
PowerShell 7 lit sa propre clé de politique sous HKLMSOFTWAREPoliciesMicrosoftPowerShellCore. S’il a été installé à partir d’un zip plutôt qu’un MSI, son canal d’événements peut ne pas être enregistré jusqu’à ce que vous exécutiez RegisterManifest.ps1 depuis $PSHOME.
Attendez-vous à du volume. Chaque script et module qui s’exécute se retrouve dans le journal. Augmentez la taille maximale du canal, ou vous ne conserverez que quelques heures.
Attendez-vous à des secrets. Les scripts administratifs contiennent parfois des mots de passe et des clés API en texte clair, et l’enregistrement des blocs de scripts les enregistre fidèlement. Gardez cela à l’esprit avant que ce fichier n’aille quelque part, et lisez la section LogTotal ci-dessous.
Exporter les journaux
Dans l’Observateur d’événements, cliquez avec le bouton droit Opérationnel sous PowerShell et choisissez Enregistrer tous les événements sous… Depuis la ligne de commande :
:: uniquement les blocs de script
wevtutil epl "Microsoft-Windows-PowerShell/Operational" C:logsps_4104.evtx /q:"*[System[(EventID=4104)]]"
:: PowerShell 7
wevtutil epl "PowerShellCore/Operational" C:logspwsh.evtx
:: le journal classique "Windows PowerShell" : événements de démarrage du moteur avec la ligne de commande hôte
wevtutil epl "Windows PowerShell" C:logswindows_powershell.evtx
Ce dernier est facile à oublier, et ça vaut la peine de le récupérer. L’événement 400 enregistre chaque démarrage du moteur, y compris la version du moteur. Une EngineVersion de 2.0 sur un système moderne signifie généralement que quelqu’un a délibérément rétrogradé pour éviter l’enregistrement des blocs de scripts.
Téléchargez et passez en revue dans LogTotal
LogTotal lit les EVTX nativement. Une chose à savoir d’abord : LogTotal ne nettoie pas encore les fichiers EVTX. Avec les journaux PowerShell, cela compte plus que d’habitude, en raison des secrets mentionnés ci-dessus. Utilisez les téléchargements EVTX librement pour les machines de test. Pour les hôtes de production, obtenez un oui de celui qui gère les données d’abord.
- Télécharger. Ouvrir logtotal.com et déposez le fichier.
- Vérifiez.
Quand ça tourne mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| Aucun événement 4104 du tout | L’enregistrement des blocs de script est désactivé, et rien ne semblait suspect | Activez-le pour l’avenir ; vérifiez le journal Windows PowerShell pour voir ce que vous pouvez encore récupérer |
| Seulement une poignée d’événements 4104, tous en Avertissement | L’enregistrement est désactivé ; vous voyez l’enregistrement automatique des blocs suspects | Même que ci-dessus |
| PowerShellCore/Operational introuvable | PowerShell 7 n’est pas installé, ou son manifeste n’est pas enregistré | Exécutez RegisterManifest.ps1 depuis $PSHOME |
| Texte 4104 illisible en texte chiffré | L’enregistrement des événements protégés est activé | Vous avez besoin du certificat de déchiffrement |
| Le journal ne couvre que quelques heures | Taille par défaut, volume élevé | Augmentez la taille maximale du canal |
FAQ
L’enregistrement des blocs de scripts capture-t-il le code obfusqué ?
Largement oui. Il enregistre les blocs de script au fur et à mesure qu’ils sont compilés. Lorsque le code obfusqué construit et exécute l’étape suivante, cette étape est enregistrée comme son propre bloc, souvent sous une forme lisible.
Quelle est la différence avec la transcription ?
La transcription écrit des fichiers texte de l’entrée et de la sortie de session dans un dossier. L’enregistrement des blocs de scripts enregistre le code lui-même dans le journal des événements. Ils se complètent mutuellement, et les deux valent la peine d’être pris.