about_Logging_Windows

Kurze Beschreibung

PowerShell protokolliert interne Vorgänge aus dem Modul, den Anbietern und Cmdlets im Windows-Ereignisprotokoll.

Lange Beschreibung

PowerShell protokolliert Details zu PowerShell-Vorgängen, z. B. Starten und Beenden des Moduls und Anbieters und Ausführen von PowerShell-Befehlen.

Informationen zur Protokollierung in Windows PowerShell 5.1 finden Sie unter about_Logging.

PowerShell unterstützt das Konfigurieren von zwei Protokollierungskategorien:

  • Modulprotokollierung – Zeichnen Sie die Pipelineausführungsereignisse für Elemente der angegebenen Module auf. Die Modulprotokollierung muss sowohl für die Sitzung als auch für bestimmte Module aktiviert sein. Weitere Informationen zum Konfigurieren dieser Protokollierung finden Sie unter about_PowerShell_Config.

    Wenn die Modulprotokollierung über die Konfiguration aktiviert ist, können Sie die Protokollierung für bestimmte Module in einer Sitzung aktivieren und deaktivieren, indem Sie den Wert der LogPipelineExecutionDetails-Eigenschaft des Moduls festlegen.

    So aktivieren Sie beispielsweise die Modulprotokollierung für das PSReadLine-Modul :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Skriptblockprotokollierung – Aufzeichnen der Verarbeitung von Befehlen, Skriptblöcken, Funktionen und Skripts, unabhängig davon, ob sie interaktiv oder durch Automatisierung aufgerufen werden.

    Wenn Sie die Skriptblockprotokollierung aktivieren, zeichnet PowerShell den Inhalt aller Skriptblöcke auf, die verarbeitet werden. Nach der Aktivierung protokolliert jede neue PowerShell-Sitzung diese Informationen. Weitere Informationen finden Sie unter Aktivieren der Skriptblockprotokollierung.

Registrieren des PowerShell-Ereignisanbieters unter Windows

Im Gegensatz zu Linux oder macOS muss der Ereignisanbieter registriert werden, bevor Ereignisse in das Ereignisprotokoll geschrieben werden können. Um den PowerShell-Ereignisanbieter zu aktivieren, führen Sie den folgenden Befehl an einer PowerShell-Eingabeaufforderung mit erhöhten Rechten aus.

$PSHOME\RegisterManifest.ps1

Anzeigen der PowerShell-Ereignisprotokolleinträge unter Windows

PowerShell-Protokolle können mithilfe des Windows Ereignisanzeige angezeigt werden. Das Ereignisprotokoll befindet sich in der Gruppe "Anwendungs- und Dienstprotokolle " und heißt "PowerShellCore". Die zugeordnete ETW-Anbieter-GUID lautet {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Wenn die Skriptblockprotokollierung aktiviert ist, protokolliert PowerShell die folgenden Ereignisse im PowerShellCore/Operational-Protokoll :

Feld Wert
EventId 4104 / 0x1008
Kanal Operational
Ebene Verbose
Opcode Create
Aufgabe CommandStart
Schlüsselwort Runspace

Aufheben der Registrierung des PowerShell-Ereignisanbieters unter Windows

Beim Registrieren des Ereignisanbieters wird eine Sperre in der Binärbibliothek platziert, die zum Decodieren von Ereignissen verwendet wird. Um diese Bibliothek zu aktualisieren, muss der Anbieter die Registrierung aufheben, um diese Sperre freizugeben.

Um die Registrierung des PowerShell-Anbieters aufzuheben, führen Sie den folgenden Befehl an einer PowerShell-Eingabeaufforderung mit erhöhten Rechten aus.

$PSHOME\RegisterManifest.ps1 -Unregister

Führen Sie nach dem Aktualisieren von PowerShell aus $PSHOME\RegisterManifest.ps1 , um den aktualisierten Ereignisanbieter zu registrieren.

Aktivieren der Skriptblockprotokollierung

Wenn Sie die Skriptblockprotokollierung aktivieren, zeichnet PowerShell den Inhalt aller Skriptblöcke auf, die verarbeitet werden. Nach der Aktivierung protokolliert jede neue PowerShell-Sitzung diese Informationen.

Hinweis

Es wird empfohlen, die geschützte Ereignisprotokollierung wie unten beschrieben zu aktivieren, wenn Sie die Skriptblockprotokollierung für andere Zwecke als Diagnose Zwecke verwenden.

Die Skriptblockprotokollierung kann über Gruppenrichtlinien oder eine Registrierungseinstellung aktiviert werden.

Verwenden von Gruppenrichtlinien

Aktivieren Sie zum Aktivieren der automatischen Transkription das Feature "Aktivieren der PowerShell-Skriptblockprotokollierung" in gruppenrichtlinien über administrative Vorlagen –>PowerShell Core.

Mithilfe der Registrierung

Führen Sie die folgende Funktion aus:

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"
}

Verwenden der PowerShell-Konfigurationsdatei

Sie können die ScriptBlockLogging Option in der powershell.config.json Datei festlegen, die steuert, wie Sich PowerShell verhält. Weitere Informationen finden Sie unter about_PowerSHell_Config.

Geschützte Ereignisprotokollierung

Durch die Erhöhung der Protokollierung bei einem System wird die Möglichkeit erhöht, dass protokollierte Inhalte vertrauliche Daten enthalten können. Beispielsweise können mit aktivierter Skriptprotokollierung, Anmeldeinformationen oder anderen vertraulichen Daten, die von einem Skript verwendet werden, in das Ereignisprotokoll geschrieben werden. Wenn ein Computer, auf dem vertrauliche Daten protokolliert wurden, kompromittiert wird, können die Protokolle einem Angreifer Informationen bereitstellen, die erforderlich sind, um seine Reichweite zu erweitern.

Um diese Informationen zu schützen, führt Windows 10 die Geschützte Ereignisprotokollierung ein. Mit der geschützten Ereignisprotokollierung können teilnehmende Anwendungen vertrauliche Daten verschlüsseln, die in das Ereignisprotokoll geschrieben wurden. Später können Sie diese Protokolle in einem sichereren und zentralisierten Protokollsammler entschlüsseln und verarbeiten.

Ereignisprotokollinhalte werden mithilfe des IETF-Standards für kryptografische Nachrichtensyntax (CMS) geschützt. CMS verwendet Kryptografie mit öffentlichem Schlüssel. Die Schlüssel zum Verschlüsseln von Inhalten und Entschlüsseln von Inhalten werden getrennt gespeichert.

Der öffentliche Schlüssel kann allgemein freigegeben werden und sind keine vertraulichen Daten. Alle mit diesem öffentlichen Schlüssel verschlüsselten Inhalte können nur vom privaten Schlüssel entschlüsselt werden. Weitere Informationen zur Kryptografie mit öffentlichem Schlüssel finden Sie unter Wikipedia - Public Key Cryptography.

Um eine Richtlinie für die geschützte Ereignisprotokollierung zu aktivieren, stellen Sie einen öffentlichen Schlüssel auf allen Computern bereit, auf denen Ereignisprotokolldaten zum Schutz vorhanden sind. Der entsprechende private Schlüssel wird verwendet, um die Ereignisprotokolle an einem sichereren Ort wie einem zentralen Ereignisprotokollsammler oder SIEM-Aggregator zu verarbeiten. Sie können SIEM in Azure einrichten. Weitere Informationen finden Sie unter generische SIEM-Integration.

Aktivieren der Geschützten Ereignisprotokollierung über Gruppenrichtlinien

Um die geschützte Ereignisprotokollierung zu aktivieren, aktivieren Sie das Enable Protected Event Logging Feature in der Gruppenrichtlinie über Administrative Templates -> Windows Components -> Event Logging. Für diese Einstellung ist ein Verschlüsselungszertifikat erforderlich, das Sie in einer von mehreren Formen bereitstellen können:

  • Der Inhalt eines base64-codierten X.509-Zertifikats (z. B. wie in der Export Option im Zertifikat-Manager angeboten).
  • Der Fingerabdruck eines Zertifikats, das sich im Zertifikatspeicher des lokalen Computers befindet (kann von der PKI-Infrastruktur bereitgestellt werden).
  • Der vollständige Pfad zu einem Zertifikat (kann lokal oder eine Remotefreigabe sein).
  • Der Pfad zu einem Verzeichnis, das ein Zertifikat oder Zertifikate enthält (kann lokal oder eine Remotefreigabe sein).
  • Der Antragstellername eines Zertifikats, das sich im Zertifikatspeicher des lokalen Computers befindet (kann von der PKI-Infrastruktur bereitgestellt werden).

Das resultierende Zertifikat muss Document Encryption als erweiterte Schlüsselverwendung (1.3.6.1.4.1.311.80.1) und entweder Data Encipherment als Schlüsselverwendung aktiviert Key Encipherment sein.

Warnung

Der private Schlüssel sollte nicht für die Computerprotokollierungsereignisse bereitgestellt werden. Sie sollte an einem sicheren Ort aufbewahrt werden, an dem Sie die Nachrichten entschlüsseln.

Entschlüsseln geschützter Ereignisprotokollierungsmeldungen

Das folgende Skript ruft Ereignisse ab und entschlüsselt sie, vorausgesetzt, Sie haben den privaten Schlüssel:

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

Weitere Informationen