about_Logging_Windows

Krátký popis

PowerShell protokoluje interní operace z modulu, poskytovatelů a rutin do protokolu událostí Windows.

Dlouhý popis

PowerShell protokoluje podrobnosti o operacích PowerShellu, jako je spuštění a zastavení modulu a poskytovatelů a spouštění příkazů PowerShellu.

Informace o protokolování v prostředí Windows PowerShell 5.1 najdete v tématu about_Logging.

PowerShell podporuje konfiguraci dvou kategorií protokolování:

  • Protokolování modulu – Zaznamená události spuštění kanálu pro členy zadaných modulů. Protokolování modulu musí být povolené jak pro relaci, tak pro konkrétní moduly. Další informace o konfiguraci tohoto protokolování najdete v tématu about_PowerShell_Config.

    Pokud je protokolování modulu povoleno prostřednictvím konfigurace, můžete povolit a zakázat protokolování pro konkrétní moduly v relaci nastavením hodnoty LogPipelineExecutionDetails vlastnosti modulu.

    Pokud například chcete povolit protokolování modulu pro modul PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Protokolování bloku skriptu – Zaznamenává zpracování příkazů, bloků skriptů, funkcí a skriptů bez ohledu na to, jestli jsou vyvolány interaktivně, nebo prostřednictvím automatizace.

    Když povolíte protokolování bloku skriptu, PowerShell zaznamená obsah všech skriptů, které zpracovává. Po povolení protokoluje všechny nové relace PowerShellu tyto informace. Další informace naleznete v tématu Povolení protokolování bloku skriptu.

Registrace poskytovatele událostí PowerShellu ve Windows

Na rozdíl od Linuxu nebo macOS systém Windows vyžaduje, aby byl zprostředkovatel událostí zaregistrovaný před zápisem událostí do protokolu událostí. Pokud chcete povolit zprostředkovatele událostí PowerShellu, spusťte z příkazového řádku PowerShellu se zvýšenými oprávněními následující příkaz.

$PSHOME\RegisterManifest.ps1

Zobrazení položek protokolu událostí PowerShellu ve Windows

Protokoly PowerShellu je možné zobrazit pomocí windows Prohlížeč událostí. Protokol událostí se nachází ve skupině Protokoly aplikací a služeb a má název PowerShellCore. Přidružený identifikátor GUID zprostředkovatele Trasování událostí pro Windows je {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Pokud je protokolování bloku skriptu povolené, PowerShell protokoluje následující události do protokolu PowerShellCore/Operational :

Pole Hodnota
EventId 4104 / 0x1008
Kanál Operational
Level Verbose
Opcode Create
Úloha CommandStart
Klíčové slovo Runspace

Zrušení registrace poskytovatele událostí PowerShellu ve Windows

Registrace zprostředkovatele událostí umístí zámek do binární knihovny použité k dekódování událostí. Aby bylo možné tuto knihovnu aktualizovat, musí být poskytovatel zrušení registrace, aby se tento zámek uvolnil.

Pokud chcete zrušit registraci zprostředkovatele PowerShellu, spusťte z příkazového řádku PowerShellu se zvýšenými oprávněními následující příkaz.

$PSHOME\RegisterManifest.ps1 -Unregister

Po aktualizaci PowerShellu spusťte $PSHOME\RegisterManifest.ps1 registraci aktualizovaného poskytovatele událostí.

Povolení protokolování bloku skriptu

Když povolíte protokolování bloku skriptu, PowerShell zaznamená obsah všech skriptů, které zpracovává. Po povolení protokoluje všechny nové relace PowerShellu tyto informace.

Poznámka:

Při použití protokolování blokování skriptů se doporučuje povolit protokolování chráněných událostí, jak je popsáno níže, pro jiné účely než pro účely diagnostiky.

Protokolování bloku skriptu je možné povolit prostřednictvím zásad skupiny nebo nastavení registru.

Používání zásad skupiny

Pokud chcete povolit automatický přepis, povolte funkci Zapnout protokolování bloku skriptu PowerShellu v zásadách skupiny prostřednictvím Správa istrativních šablon ->PowerShell Core.

Použití registru

Spusťte následující funkci:

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

Použití konfiguračního souboru PowerShellu

Můžete nastavit ScriptBlockLogging možnost v powershell.config.json souboru, která určuje, jak se PowerShell chová. Další informace najdete v tématu about_PowerSHell_Config.

Protokolování chráněných událostí

Zvýšení úrovně protokolování v systému zvyšuje možnost, že protokolovaný obsah může obsahovat citlivá data. Například s povoleným protokolováním skriptu, přihlašovacími údaji nebo jinými citlivými daty používanými skriptem lze zapisovat do protokolu událostí. Když dojde k ohrožení zabezpečení počítače s protokolovanými citlivými daty, můžou protokoly útočníkovi poskytnout informace potřebné k rozšíření dosahu.

Pro ochranu těchto informací systém Windows 10 zavádí protokolování chráněných událostí. Protokolování chráněných událostí umožňuje zúčastněným aplikacím šifrovat citlivá data zapsaná do protokolu událostí. Později můžete tyto protokoly dešifrovat a zpracovat v bezpečnějším a centralizovanějším kolektoru protokolů.

Obsah protokolu událostí je chráněn pomocí standardu IETF Cryptographic Message Syntax (CMS). CMS používá kryptografii veřejného klíče. Klíče používané k šifrování obsahu a dešifrování obsahu se uchovávají odděleně.

Veřejný klíč je možné sdílet široce a nejedná se o citlivá data. Veškerý obsah zašifrovaný tímto veřejným klíčem je možné dešifrovat pouze privátním klíčem. Další informace o kryptografii veřejného klíče naleznete na Wikipedii - Kryptografie veřejného klíče.

Pokud chcete povolit zásadu protokolování chráněných událostí, nasaďte veřejný klíč do všech počítačů, které mají data protokolu událostí k ochraně. Odpovídající privátní klíč se používá k následnému zpracování protokolů událostí v bezpečnějším umístění, jako je centrální kolektor protokolu událostí nebo agregátor SIEM . SiEM můžete nastavit v Azure. Další informace najdete v tématu Obecná integrace SIEM.

Povolení protokolování chráněných událostí prostřednictvím zásad skupiny

Chcete-li povolit protokolování chráněných událostí, povolte Enable Protected Event Logging funkci v zásadách skupiny prostřednictvím Administrative Templates -> Windows Components -> Event Logging. Toto nastavení vyžaduje šifrovací certifikát, který můžete zadat v jednom z několika formulářů:

  • Obsah certifikátu X.509 s kódováním base-64 (například nabízený možností Export ve Správci certifikátů).
  • Kryptografický otisk certifikátu, který najdete v úložišti certifikátů místního počítače (je možné ho nasadit infrastrukturou PKI).
  • Úplná cesta k certifikátu (může být místní nebo vzdálená sdílená složka).
  • Cesta k adresáři obsahujícímu certifikát nebo certifikáty (může být místní nebo vzdálená sdílená složka).
  • Název subjektu certifikátu, který najdete v úložišti certifikátů místního počítače (je možné ho nasadit infrastrukturou PKI).

Výsledný certifikát musí být povolený Document Encryption jako použití rozšířeného klíče (1.3.6.1.4.1.311.80.1) nebo Data EnciphermentKey Encipherment použití klíčů.

Upozorňující

Privátní klíč by se neměl nasazovat do událostí protokolování počítačů. Měla by být uložena v zabezpečeném umístění, kde dešifrujete zprávy.

Dešifrování zpráv protokolování chráněných událostí

Následující skript načte a dešifruje události za předpokladu, že máte privátní klíč:

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

Viz také