Partager via


about_Logging_Windows

Description courte

PowerShell journalise les opérations internes du moteur, des fournisseurs et des applets de commande dans le journal des événements Windows.

Description longue

PowerShell enregistre des détails sur les opérations PowerShell, telles que le démarrage et l’arrêt du moteur et des fournisseurs, et l’exécution de commandes PowerShell.

Pour plus d’informations sur la journalisation dans Windows PowerShell 5.1, consultez about_Logging.

PowerShell prend en charge la configuration de deux catégories de journalisation :

  • Journalisation des modules : enregistrez les événements d’exécution de pipeline pour les membres des modules spécifiés. La journalisation des modules doit être activée pour la session et des modules spécifiques. Pour plus d’informations sur la configuration de cette journalisation, consultez about_PowerShell_Config.

    Si la journalisation des modules est activée via la configuration, vous pouvez activer et désactiver la journalisation pour des modules spécifiques dans une session en définissant la valeur de la propriété LogPipelineExecutionDetails du module.

    Par exemple, pour activer la journalisation des modules pour le module PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Journalisation des blocs de script : enregistrez le traitement des commandes, blocs de script, fonctions et scripts, qu’ils soient appelés de manière interactive ou via l’automatisation.

    Lorsque vous activez la journalisation des blocs de script, PowerShell enregistre le contenu de tous les blocs de script qu’il traite. Une fois activée, toute nouvelle session PowerShell enregistre ces informations. Pour plus d’informations, consultez Activation de la journalisation des blocs de script.

Inscription du fournisseur d’événements PowerShell sur Windows

Contrairement à Linux ou macOS, Windows exige que le fournisseur d’événements soit inscrit avant que les événements puissent être écrits dans le journal des événements. Pour activer le fournisseur d’événements PowerShell, exécutez la commande suivante à partir d’une invite PowerShell avec élévation de privilèges.

$PSHOME\RegisterManifest.ps1

Affichage des entrées du journal des événements PowerShell sur Windows

Les journaux PowerShell peuvent être consultés à l’aide de Windows observateur d'événements. Le journal des événements se trouve dans le groupe Journaux des applications et des services et est nommé PowerShellCore. Le GUID du fournisseur ETW associé est {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Lorsque la journalisation des blocs de script est activée, PowerShell journalise les événements suivants dans le journal PowerShellCore/Opérationnel :

Champ Valeur
EventId 4104 / 0x1008
Canal Operational
Level Verbose
Opcode Create
Tâche CommandStart
Mot clé Runspace

Annulation de l’inscription du fournisseur d’événements PowerShell sur Windows

L’inscription du fournisseur d’événements place un verrou dans la bibliothèque binaire utilisée pour décoder les événements. Pour mettre à jour cette bibliothèque, le fournisseur doit être désinscrit pour libérer ce verrou.

Pour annuler l’inscription du fournisseur PowerShell, exécutez la commande suivante à partir d’une invite PowerShell avec élévation de privilèges.

$PSHOME\RegisterManifest.ps1 -Unregister

Après la mise à jour de PowerShell, exécutez $PSHOME\RegisterManifest.ps1 pour inscrire le fournisseur d’événements mis à jour.

Activation de la journalisation des blocs de script

Lorsque vous activez la journalisation des blocs de script, PowerShell enregistre le contenu de tous les blocs de script qu’il traite. Une fois activée, toute nouvelle session PowerShell enregistre ces informations.

Notes

Il est recommandé d’activer la journalisation des événements protégés, comme décrit ci-dessous, lors de l’utilisation de la journalisation des blocs de script à d’autres fins que diagnostics.

La journalisation des blocs de script peut être activée via stratégie de groupe ou un paramètre de Registre.

Utilisation de la stratégie de groupe

Pour activer la transcription automatique, activez la fonctionnalité Activer la journalisation des blocs de script PowerShell dans stratégie de groupe via modèles d’administration ->PowerShell Core.

Utilisation du Registre

Exécutez la fonction suivante :

function Enable-PSScriptBlockLogging {
    $basePath = @(
        'HKLM:\Software\Policies\Microsoft'
        'PowerShellCore\ScriptBlockLogging'
    ) -join '\'

    if (-not (Test-Path $basePath)) {
        $null = New-Item $basePath -Force
    }

    Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}

Utilisation du fichier de configuration PowerShell

Vous pouvez définir l’option ScriptBlockLogging dans le fichier qui contrôle le powershell.config.json comportement de PowerShell. Pour plus d’informations, consultez about_PowerSHell_Config.

Journalisation des événements protégés

L’augmentation du niveau de journalisation sur un système augmente la possibilité que le contenu journalisé puisse contenir des données sensibles. Par exemple, lorsque la journalisation des scripts est activée, les informations d’identification ou d’autres données sensibles utilisées par un script peuvent être écrites dans le journal des événements. Lorsqu’une machine qui a journalisé des données sensibles est compromise, les journaux peuvent fournir à un attaquant les informations nécessaires pour étendre sa portée.

Pour protéger ces informations, Windows 10 introduit la journalisation des événements protégés. La journalisation des événements protégées permet aux applications participantes de chiffrer les données sensibles écrites dans le journal des événements. Plus tard, vous pourrez déchiffrer et traiter ces journaux sur un collecteur de journaux plus sécurisé et centralisé.

Le contenu du journal des événements est protégé à l’aide de la norme CMS (Cryptographic Message Syntax) IETF. CMS utilise le chiffrement à clé publique. Les clés utilisées pour chiffrer le contenu et déchiffrer le contenu sont séparées.

La clé publique peut être partagée à grande échelle et n’est pas des données sensibles. Tout contenu chiffré avec cette clé publique ne peut être déchiffré que par la clé privée. Pour plus d’informations sur le chiffrement à clé publique, consultez Wikipédia - Chiffrement à clé publique.

Pour activer une stratégie de journalisation des événements protégés, déployez une clé publique sur toutes les machines qui ont des données de journal des événements à protéger. La clé privée correspondante est utilisée pour post-traiter les journaux des événements à un emplacement plus sécurisé, tel qu’un collecteur de journaux d’événements central ou un agrégateur SIEM . Vous pouvez configurer SIEM dans Azure. Pour plus d’informations, consultez Intégration SIEM générique.

Activation de la journalisation des événements protégés via stratégie de groupe

Pour activer la journalisation des événements protégés, activez la Enable Protected Event Logging fonctionnalité dans stratégie de groupe via Administrative Templates -> Windows Components -> Event Logging. Ce paramètre nécessite un certificat de chiffrement, que vous pouvez fournir sous plusieurs formes :

  • Contenu d’un certificat X.509 codé en base 64 (par exemple, comme proposé par l’option dans le Export Gestionnaire de certificats).
  • Empreinte numérique d’un certificat qui se trouve dans le magasin de certificats ordinateur local (peut être déployée par l’infrastructure PKI).
  • Chemin d’accès complet à un certificat (peut être local ou un partage distant).
  • Chemin d’accès à un répertoire contenant un ou plusieurs certificats (peut être local ou un partage distant).
  • Nom d’objet d’un certificat qui se trouve dans le magasin de certificats de l’ordinateur local (peut être déployé par l’infrastructure PKI).

Le certificat résultant doit avoir Document Encryption comme utilisation améliorée de la clé (1.3.6.1.4.1.311.80.1), et les Data Encipherment utilisations de clé ou Key Encipherment activées.

Avertissement

La clé privée ne doit pas être déployée sur les événements de journalisation des machines. Il doit être conservé dans un emplacement sécurisé où vous déchiffrez les messages.

Déchiffrement des messages de journalisation des événements protégés

Le script suivant récupère et déchiffre les événements, en supposant que vous disposez de la clé privée :

Get-WinEvent Microsoft-Windows-PowerShell/Operational |
    Where-Object Id -eq 4104 |
    Unprotect-CmsMessage

Voir aussi