Les journaux de blocs de script PowerShell se trouvent dans Journaux d’Applications et de Services → Microsoft → Windows → PowerShell → Opérationnel, en tant qu’événement 4104. Ils sont complets uniquement si l’enregistrement des blocs de script est activé. Pour les exporter :
wevtutil epl « Microsoft-Windows-PowerShell/Operational » C:logspowershell.evtx
PowerShell 7 est un produit distinct avec un canal séparé, PowerShellCore/Operational, et ses propres paramètres de politique.
Si un attaquant a touché une machine Windows, il y a de fortes chances que PowerShell ait été impliqué. L’enregistrement des blocs de script enregistre le code réellement exécuté, souvent après que les couches d’obscurcissement aient été retirées. Prime Core a 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’obscurcissement (T1027) et les cradles de téléchargement qui intègrent des outils (T1105).
Avant de commencer
L’enregistrement des blocs de script est-il activé ?
reg query « HKLMSOFTWAREPoliciesMicrosoftWindowsPowerShellScriptBlockLogging »
EnableScriptBlockLogging réglé à 0x1 signifie oui. Si la clé n’existe pas, c’est désactivé. Même dans ce cas, Windows PowerShell 5.1 enregistre toujours les blocs de script qu’il considère comme suspects, en tant qu’événements 4104 au niveau Avertissement. Donc, vous pouvez trouver des événements. Ne les confondez pas simplement avec la vue d’ensemble complète.
L’activer aide à partir de maintenant, pas pour ce qui s’est déjà passé. Utilisez le paramètre de la stratégie de groupe Modèles d’administration → Composants Windows → Windows PowerShell → Activer l’enregistrement des blocs de script 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 que via l’MSI, son canal d’événements peut ne pas être enregistré tant que vous n’avez pas exécuté RegisterManifest.ps1 depuis $PSHOME.
Attendez-vous à un volume. Chaque script et module exécuté finit dans le journal. Augmentez la taille maximale du canal, sinon 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 script les enregistre fidèlement. Gardez cela à l’esprit avant que ce fichier ne soit partagé quelque part, et lisez la section LogTotal ci-dessous.
Exportez les journaux
Dans l’Observateur d’événements, faites un clic droit sur 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
Le dernier est facile à oublier, et il vaut la peine d’être capturé. L’événement 400 enregistre chaque démarrage du moteur, y compris la version du moteur. Un 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 script.
Téléchargez et examinez dans LogTotal
LogTotal lit les fichiers EVTX de manière native. Une chose à savoir d’abord : LogTotal ne désinfecte pas encore les fichiers EVTX. [PROOF: confirm which formats the sanitize step covers today.] With PowerShell logs, that matters more than usual, because of the secrets mentioned above. Use EVTX uploads freely for test machines. For production hosts, get a yes from whoever owns data handling first.
- Télécharger. Ouvrez logtotal.com et déposez le fichier. [PROOF: écran de téléchargement, limite de taille]
- Examiner. [PROOF: what the results screen shows for PowerShell data]
À quoi cela ressemble sur de vraies données. Nous avons utilisé [PROOF: source d’échantillon, par ex. une machine virtuelle de test avec l’enregistrement des blocs de script activé, après avoir exécuté un craddle de téléchargement encodé et une chaîne de test inoffensive de modification AMSI]. LogTotal a signalé [PROOF: constatations réelles]. [PROOF: lien vers le fichier d’échantillon]
Quand ça se passe mal
| Symptôme | Cause probable | Fix |
|---|---|---|
| Aucun événement 4104 du tout | L’enregistrement des blocs de script est désactivé, et rien n’a semblé suspect | Activez-le pour l’avenir ; vérifiez le journal Windows PowerShell pour ce que vous pouvez encore obtenir |
| Seulement une poignée d’événements 4104, tous Avertissement | L’enregistrement est désactivé ; vous voyez l’enregistrement automatique des blocs suspects | Même qu’au-dessus |
| PowerShellCore/Operational non trouvé | PowerShell 7 n’est pas installé, ou son manifeste n’est pas enregistré | Exécutez RegisterManifest.ps1 depuis $PSHOME |
| Le texte du 4104 est un chiffrement illisible | 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 script capture-t-il le code obfusqué ?
Pour une grande part, oui. Il enregistre les blocs de script lorsqu’ils sont compilés. Lorsque le code obfusqué construit et exécute la prochaine étape, cette étape est enregistrée comme un bloc à part entière, souvent sous une forme lisible.
Quelle est la différence avec la transcription ?
La transcription écrit des fichiers texte de la saisie et sortie de la session dans un dossier. L’enregistrement des blocs de script enregistre le code lui-même dans le journal des événements. Ils se complètent et les deux valent la peine d’être conservés.