about_Logging_Windows

Kort beskrivning

PowerShell loggar interna åtgärder från motorn, leverantörerna och cmdletarna till Windows-händelseloggen.

Lång beskrivning

PowerShell loggar information om PowerShell-åtgärder, till exempel att starta och stoppa motorn och leverantörerna och köra PowerShell-kommandon.

Information om loggning i Windows PowerShell 5.1 finns i about_Logging.

PowerShell stöder konfiguration av två loggningskategorier:

  • Modulloggning – Registrera pipelinekörningshändelser för medlemmar i angivna moduler. Modulloggning måste vara aktiverad för både sessionen och specifika moduler. Mer information om hur du konfigurerar den här loggningen finns i about_PowerShell_Config.

    Om modulloggning är aktiverat via konfiguration kan du aktivera och inaktivera loggning för specifika moduler i en session genom att ange värdet för egenskapen LogPipelineExecutionDetails för modulen.

    Om du till exempel vill aktivera modulloggning för PSReadLine-modulen :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Loggning av skriptblock – Registrera bearbetning av kommandon, skriptblock, funktioner och skript oavsett om de anropas interaktivt eller via automatisering.

    När du aktiverar loggning av skriptblock registrerar PowerShell innehållet i alla skriptblock som bearbetas. När den här informationen har aktiverats loggar alla nya PowerShell-sessioner den här informationen. Mer information finns i Aktivera loggning av skriptblock.

Registrera PowerShell-händelseprovidern i Windows

Till skillnad från Linux eller macOS kräver Windows att händelseprovidern registreras innan händelser kan skrivas till händelseloggen. Om du vill aktivera PowerShell-händelseprovidern kör du följande kommando från en upphöjd PowerShell-prompt.

$PSHOME\RegisterManifest.ps1

Visa PowerShell-händelseloggposter i Windows

PowerShell-loggar kan visas med hjälp av Windows Loggboken. Händelseloggen finns i gruppen Program- och tjänstloggar och heter PowerShellCore. Den associerade ETW-providerns GUID är {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

När Loggning av skriptblock är aktiverat loggar PowerShell följande händelser till PowerShellCore/driftloggen:

Fält Värde
EventId 4104 / 0x1008
Kanal Operational
Nivå Verbose
Opcode Create
Uppgift CommandStart
Nyckelord Runspace

Avregistrera PowerShell-händelseprovidern i Windows

När du registrerar händelseprovidern placeras ett lås i det binära biblioteket som används för att avkoda händelser. Om du vill uppdatera det här biblioteket måste providern avregistreras för att frigöra det här låset.

Om du vill avregistrera PowerShell-providern kör du följande kommando från en upphöjd PowerShell-prompt.

$PSHOME\RegisterManifest.ps1 -Unregister

När du har uppdaterat PowerShell kör du $PSHOME\RegisterManifest.ps1 för att registrera den uppdaterade händelseprovidern.

Aktivera loggning av skriptblock

När du aktiverar loggning av skriptblock registrerar PowerShell innehållet i alla skriptblock som bearbetas. När den här informationen har aktiverats loggar alla nya PowerShell-sessioner den här informationen.

Kommentar

Vi rekommenderar att du aktiverar loggning av skyddade händelser enligt beskrivningen nedan när du använder loggning av skriptblock för något annat än diagnostiksyfte.

Loggning av skriptblock kan aktiveras via en grupprincip eller en registerinställning.

Med hjälp av grupprincip

Aktivera automatisk transkription genom att aktivera funktionen Aktivera Blockloggning av PowerShell-skript i grupprincip via administrativa mallar –> PowerShell Core.

Använda registret

Kör följande funktion:

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

Använda PowerShell-konfigurationsfilen

Du kan ange alternativet ScriptBlockLogging i powershell.config.json filen som styr hur PowerShell fungerar. Mer information finns i about_PowerSHell_Config.

Skyddad händelseloggning

Om du ökar loggningsnivån på ett system ökar risken för att loggat innehåll kan innehålla känsliga data. Med skriptloggning aktiverat kan till exempel autentiseringsuppgifter eller andra känsliga data som används av ett skript skrivas till händelseloggen. När en dator som har loggat känsliga data komprometteras kan loggarna ge en angripare information som behövs för att utöka deras räckvidd.

För att skydda den här informationen introducerar Windows 10 loggning av skyddade händelser. Med skyddad händelseloggning kan deltagande program kryptera känsliga data som skrivits till händelseloggen. Senare kan du dekryptera och bearbeta loggarna på en säkrare och centraliserad logginsamlare.

Händelselogginnehållet skyddas med IETF-standarden för kryptografisk meddelandesyntax (CMS). CMS använder kryptering med offentliga nycklar. Nycklarna som används för att kryptera innehåll och dekryptera innehåll hålls åtskilda.

Den offentliga nyckeln kan delas brett och är inte känsliga data. Allt innehåll som krypteras med den här offentliga nyckeln kan bara dekrypteras av den privata nyckeln. Mer information om kryptografi för offentliga nycklar finns i Wikipedia – Kryptering av offentliga nycklar.

Om du vill aktivera en princip för skyddad händelseloggning distribuerar du en offentlig nyckel till alla datorer som har händelseloggdata att skydda. Motsvarande privata nyckel används för att efterbearbeta händelseloggarna på en säkrare plats, till exempel en central händelselogginsamlare eller SIEM-aggregator . Du kan konfigurera SIEM i Azure. Mer information finns i Allmän SIEM-integrering.

Aktivera skyddad händelseloggning via grupprincip

Aktivera skyddad händelseloggning genom att aktivera Enable Protected Event Logging funktionen i Grupprincip via Administrative Templates -> Windows Components -> Event Logging. Den här inställningen kräver ett krypteringscertifikat som du kan ange i något av flera formulär:

  • Innehållet i ett base-64-kodat X.509-certifikat (till exempel Export enligt alternativet i Certifikathanteraren).
  • Tumavtrycket för ett certifikat som finns i certifikatarkivet för den lokala datorn (kan distribueras av PKI-infrastrukturen).
  • Den fullständiga sökvägen till ett certifikat (kan vara lokal eller en fjärrresurs).
  • Sökvägen till en katalog som innehåller ett certifikat eller certifikat (kan vara lokal eller en fjärrresurs).
  • Ämnesnamnet för ett certifikat som finns i certifikatarkivet för den lokala datorn (kan distribueras av PKI-infrastrukturen).

Det resulterande certifikatet måste ha Document Encryption som en förbättrad nyckelanvändning (1.3.6.1.4.1.311.80.1) och antingen Data Encipherment eller Key Encipherment nyckelanvändning aktiverad.

Varning

Den privata nyckeln ska inte distribueras till datorernas loggningshändelser. Den bör förvaras på en säker plats där du dekrypterar meddelandena.

Dekryptera meddelanden om loggning av skyddade händelser

Följande skript hämtar och dekrypterar händelser, förutsatt att du har den privata nyckeln:

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

Se även