Udostępnij za pośrednictwem


about_Logging_Windows

Krótki opis

Program PowerShell rejestruje operacje wewnętrzne z aparatu, dostawców i poleceń cmdlet do dziennika zdarzeń systemu Windows.

Długi opis

Program PowerShell rejestruje szczegółowe informacje o operacjach programu PowerShell, takich jak uruchamianie i zatrzymywanie aparatu i dostawców oraz wykonywanie poleceń programu PowerShell.

Aby uzyskać informacje o logowaniu w Windows PowerShell 5.1, zobacz about_Logging.

Program PowerShell obsługuje konfigurowanie dwóch kategorii rejestrowania:

  • Rejestrowanie modułu — rejestruje zdarzenia wykonywania potoku dla elementów członkowskich określonych modułów. Rejestrowanie modułów musi być włączone zarówno dla sesji, jak i określonych modułów. Aby uzyskać więcej informacji na temat konfigurowania tego rejestrowania, zobacz about_PowerShell_Config.

    Jeśli rejestrowanie modułów jest włączone za pośrednictwem konfiguracji, możesz włączyć i wyłączyć rejestrowanie dla określonych modułów w sesji, ustawiając wartość właściwości LogPipelineExecutionDetails modułu.

    Aby na przykład włączyć rejestrowanie modułu dla modułu PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Rejestrowanie bloków skryptów — rejestrowanie przetwarzania poleceń, bloków skryptów, funkcji i skryptów, niezależnie od tego, czy są wywoływane interaktywnie, czy za pośrednictwem automatyzacji.

    Po włączeniu rejestrowania bloków skryptów program PowerShell rejestruje zawartość wszystkich bloków skryptu, które przetwarza. Po włączeniu tej opcji każda nowa sesja programu PowerShell rejestruje te informacje. Aby uzyskać więcej informacji, zobacz Włączanie rejestrowania bloków skryptów.

Rejestrowanie dostawcy zdarzeń programu PowerShell w systemie Windows

W przeciwieństwie do systemu Linux lub macOS system Windows wymaga zarejestrowania dostawcy zdarzeń przed zapisaniem zdarzeń w dzienniku zdarzeń. Aby włączyć dostawcę zdarzeń programu PowerShell, uruchom następujące polecenie w wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień.

$PSHOME\RegisterManifest.ps1

Wyświetlanie wpisów dziennika zdarzeń programu PowerShell w systemie Windows

Dzienniki programu PowerShell można wyświetlić przy użyciu Podgląd zdarzeń systemu Windows. Dziennik zdarzeń znajduje się w grupie Dzienniki aplikacji i usług i nosi nazwę PowerShellCore. Skojarzony identyfikator GUID dostawcy ETW to {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Po włączeniu rejestrowania bloków skryptów program PowerShell rejestruje następujące zdarzenia w dzienniku programu PowerShellCore/Operational :

Pole Wartość
EventId 4104 / 0x1008
Kanał Operational
Poziom Verbose
Opcode Create
Zadanie CommandStart
Słowo kluczowe Runspace

Wyrejestrowywanie dostawcy zdarzeń programu PowerShell w systemie Windows

Zarejestrowanie dostawcy zdarzeń powoduje umieszczenie blokady w bibliotece binarnej używanej do dekodowania zdarzeń. Aby zaktualizować tę bibliotekę, dostawca musi zostać wyrejestrowany, aby zwolnić tę blokadę.

Aby wyrejestrować dostawcę programu PowerShell, uruchom następujące polecenie w wierszu polecenia programu PowerShell z podwyższonym poziomem uprawnień.

$PSHOME\RegisterManifest.ps1 -Unregister

Po zaktualizowaniu programu PowerShell uruchom polecenie $PSHOME\RegisterManifest.ps1 , aby zarejestrować zaktualizowanego dostawcę zdarzeń.

Włączanie rejestrowania bloków skryptów

Po włączeniu rejestrowania bloków skryptów program PowerShell rejestruje zawartość wszystkich bloków skryptu, które przetwarza. Po włączeniu tej opcji każda nowa sesja programu PowerShell rejestruje te informacje.

Uwaga

Zaleca się włączenie rejestrowania zdarzeń chronionych, jak opisano poniżej, w przypadku korzystania z rejestrowania bloków skryptów w celach innych niż diagnostyka.

Rejestrowanie bloków skryptów można włączyć za pośrednictwem zasady grupy lub ustawienia rejestru.

Za pomocą zasad grupy

Aby włączyć automatyczną transkrypcję, włącz funkcję Włączanie rejestrowania bloków skryptów programu PowerShell w zasady grupy za pomocą szablonów administracyjnych —>PowerShell Core.

Korzystanie z rejestru

Uruchom następującą funkcję:

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

Korzystanie z pliku konfiguracji programu PowerShell

Możesz ustawić ScriptBlockLogging opcję w powershell.config.json pliku, który kontroluje zachowanie programu PowerShell. Aby uzyskać więcej informacji, zobacz about_PowerSHell_Config.

Rejestrowanie zdarzeń chronionych

Zwiększenie poziomu rejestrowania w systemie zwiększa możliwość, że zarejestrowana zawartość może zawierać poufne dane. Na przykład w przypadku włączenia rejestrowania skryptów poświadczenia lub inne poufne dane używane przez skrypt można zapisać w dzienniku zdarzeń. Po naruszeniu bezpieczeństwa maszyny, która zarejestrowała poufne dane, dzienniki mogą dostarczyć osobie atakującej informacje potrzebne do rozszerzenia ich zasięgu.

Aby chronić te informacje, Windows 10 wprowadzono funkcję rejestrowania zdarzeń chronionych. Funkcja rejestrowania zdarzeń chronionych umożliwia uczestniczącym aplikacjom szyfrowanie poufnych danych zapisanych w dzienniku zdarzeń. Później można odszyfrować i przetworzyć te dzienniki w bardziej bezpieczny i scentralizowany moduł zbierający dzienniki.

Zawartość dziennika zdarzeń jest chroniona przy użyciu standardu składni komunikatów kryptograficznych IETF (CMS). Usługa CMS używa kryptografii klucza publicznego. Klucze używane do szyfrowania zawartości i odszyfrowywania zawartości są przechowywane oddzielnie.

Klucz publiczny można szeroko udostępniać i nie jest poufnymi danymi. Każda zawartość zaszyfrowana za pomocą tego klucza publicznego może zostać odszyfrowana tylko przez klucz prywatny. Aby uzyskać więcej informacji na temat kryptografii klucza publicznego, zobacz Wikipedia — kryptografia klucza publicznego.

Aby włączyć zasady rejestrowania zdarzeń chronionych, wdróż klucz publiczny na wszystkich maszynach z danymi dziennika zdarzeń w celu ochrony. Odpowiedni klucz prywatny służy do przetwarzania dzienników zdarzeń w bezpieczniejszej lokalizacji, takiej jak centralny moduł zbierający dzienniki zdarzeń lub agregator SIEM . Usługę SIEM można skonfigurować na platformie Azure. Aby uzyskać więcej informacji, zobacz Ogólna integracja rozwiązania SIEM.

Włączanie rejestrowania zdarzeń chronionych za pośrednictwem zasady grupy

Aby włączyć rejestrowanie zdarzeń chronionych, włącz Enable Protected Event Logging tę funkcję w zasady grupy za pomocą polecenia Administrative Templates -> Windows Components -> Event Logging. To ustawienie wymaga certyfikatu szyfrowania, który można podać w jednej z kilku formularzy:

  • Zawartość certyfikatu X.509 zakodowanego w formacie base-64 (na przykład oferowana Export przez opcję w Menedżerze certyfikatów).
  • Odcisk palca certyfikatu, który można znaleźć w magazynie certyfikatów komputera lokalnego (można wdrożyć za pomocą infrastruktury PKI).
  • Pełna ścieżka do certyfikatu (może być lokalna lub udział zdalny).
  • Ścieżka do katalogu zawierającego certyfikat lub certyfikaty (może to być udział lokalny lub zdalny).
  • Nazwa podmiotu certyfikatu, który można znaleźć w magazynie certyfikatów komputera lokalnego (można wdrożyć za pomocą infrastruktury PKI).

Wynikowy certyfikat musi być Document Encryption rozszerzonym użyciem klucza (1.3.6.1.4.1.311.80.1) i Data Encipherment włączonym użyciem kluczy lub Key Encipherment kluczami.

Ostrzeżenie

Klucz prywatny nie powinien być wdrażany na maszynach rejestrunych zdarzeń. Powinna być przechowywana w bezpiecznej lokalizacji, w której odszyfrujesz komunikaty.

Odszyfrowywanie chronionych komunikatów rejestrowania zdarzeń

Poniższy skrypt pobiera i odszyfrowuje zdarzenia, przy założeniu, że masz klucz prywatny:

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

Zobacz też