about_Logging_Windows

Краткое описание

PowerShell регистрирует внутренние операции из подсистемы, поставщиков и командлетов в журнал событий Windows.

Подробное описание

PowerShell регистрирует сведения об операциях PowerShell, таких как запуск и остановка обработчика и поставщиков, а также выполнение команд PowerShell.

Сведения о ведении журнала в Windows PowerShell 5.1 см. в about_Logging.

PowerShell поддерживает настройку двух категорий ведения журнала:

  • Ведение журнала модулей— запись событий выполнения конвейера для членов указанных модулей. Ведение журнала модулей должно быть включено как для сеанса, так и для определенных модулей. Дополнительные сведения о настройке этого журнала см. в about_PowerShell_Config.

    Если ведение журнала модулей включено с помощью конфигурации, можно включить и отключить ведение журнала для определенных модулей в сеансе, задав значение свойства LogPipelineExecutionDetails модуля.

    Например, чтобы включить ведение журнала модулей для модуля PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Ведение журнала блоков скриптов — записывайте обработку команд, блоков скриптов, функций и скриптов, вызываемых интерактивным способом или с помощью автоматизации.

    При включении ведения журнала блоков скриптов PowerShell записывает содержимое всех блоков скриптов, которые он обрабатывает. После включения все новые сеансы PowerShell регистрируют эти сведения. Дополнительные сведения см. в разделе "Включение ведения журнала блоков скриптов".

Регистрация поставщика событий PowerShell в Windows

В отличие от Linux или macOS, Windows требует регистрации поставщика событий перед записью событий в журнал событий. Чтобы включить поставщик событий PowerShell, выполните следующую команду из командной строки PowerShell с повышенными привилегиями.

$PSHOME\RegisterManifest.ps1

Просмотр записей журнала событий PowerShell в Windows

Журналы PowerShell можно просматривать с помощью Просмотр событий Windows. Журнал событий находится в группе журналов приложений и служб и называется PowerShellCore. Идентификатор GUID {f90714a8-5509-434a-bf6d-b1624c8a19a2}связанного поставщика ETW.

При включении ведения журнала блоков скриптов PowerShell регистрирует следующие события в журнал PowerShellCore или Operations :

Поле значение
EventId 4104 / 0x1008
Канал Operational
Уровень Verbose
Код операции Create
Задача CommandStart
Ключевое слово Runspace

Отмена регистрации поставщика событий PowerShell в Windows

Регистрация поставщика событий помещает блокировку в двоичную библиотеку, используемую для декодирования событий. Чтобы обновить эту библиотеку, поставщику необходимо отменить регистрацию, чтобы освободить эту блокировку.

Чтобы отменить регистрацию поставщика PowerShell, выполните следующую команду из командной строки PowerShell с повышенными привилегиями.

$PSHOME\RegisterManifest.ps1 -Unregister

После обновления PowerShell выполните регистрацию $PSHOME\RegisterManifest.ps1 обновленного поставщика событий.

Включение ведения журнала блоков скриптов

При включении ведения журнала блоков скриптов PowerShell записывает содержимое всех блоков скриптов, которые он обрабатывает. После включения все новые сеансы PowerShell регистрируют эти сведения.

Примечание.

Рекомендуется включить ведение журнала защищенных событий, как описано ниже, при использовании ведения журнала блоков скриптов для других целей, отличных от диагностика.

Ведение журнала блоков скриптов можно включить с помощью групповой политики или параметра реестра.

Использование групповой политики

Чтобы включить автоматическое транскрибирование, включите функцию ведения журнала блоков сценариев PowerShell в групповой политике с помощью Администратор истограммативных шаблонов ->PowerShell Core.

Использование реестра

Выполните следующую функцию:

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

Использование файла конфигурации PowerShell

Параметр можно задать ScriptBlockLogging в powershell.config.json файле, который управляет поведением PowerShell. Дополнительные сведения см. в about_PowerSHell_Config.

Ведение журнала защищенных событий

Увеличение уровня ведения журнала в системе повышает вероятность того, что содержимое журнала может содержать конфиденциальные данные. Например, с включенным ведением журнала скриптов учетные данные или другие конфиденциальные данные, используемые скриптом, можно записать в журнал событий. Если компьютер, вошедший в систему конфиденциальные данные, скомпрометирован, журналы могут предоставить злоумышленнику информацию, необходимую для расширения их охвата.

Для защиты этих сведений в Windows 10 представлено ведение журнала защищенных событий. Защищенное ведение журнала событий позволяет участвующим приложениям шифровать конфиденциальные данные, записанные в журнал событий. Позже вы можете расшифровать и обработать эти журналы на более безопасном и централизованном сборщике журналов.

Содержимое журнала событий защищено с помощью стандарта синтаксиса криптографических сообщений (CMS) IETF. CMS использует криптографию открытого ключа. Ключи, используемые для шифрования содержимого и расшифровки содержимого, хранятся отдельно.

Открытый ключ можно совместно использовать и не является конфиденциальными данными. Любое содержимое, зашифрованное с помощью этого открытого ключа, может быть расшифровано только закрытым ключом. Дополнительные сведения о шифровании открытого ключа см . в Википедии — шифрование открытого ключа.

Чтобы включить политику ведения журнала защищенных событий, разверните открытый ключ на всех компьютерах с данными журнала событий для защиты. Соответствующий закрытый ключ используется для последующей обработки журналов событий в более безопасном расположении, таком как сборщик центрального журнала событий или агрегатор SIEM . Вы можете настроить SIEM в Azure. Дополнительные сведения см. в разделе "Универсальная интеграция SIEM".

Включение ведения журнала защищенных событий с помощью групповой политики

Чтобы включить ведение журнала защищенных событий, включите функцию Enable Protected Event Logging в групповой политике.Administrative Templates -> Windows Components -> Event Logging Для этого параметра требуется сертификат шифрования, который можно предоставить в одной из нескольких форм:

  • Содержимое сертификата X.509 в кодировке base-64 (например, как показано Export в диспетчере сертификатов).
  • Отпечаток сертификата, который можно найти в хранилище сертификатов локального компьютера (можно развернуть инфраструктурой PKI).
  • Полный путь к сертификату (может быть локальным или удаленным ресурсом).
  • Путь к каталогу с сертификатом или сертификатами (может быть локальным или удаленным ресурсом).
  • Имя субъекта сертификата, который можно найти в хранилище сертификатов локального компьютера (можно развернуть инфраструктурой PKI).

Полученный сертификат должен иметь Document Encryption расширенный уровень использования ключей (1.3.6.1.4.1.311.80.1), а Data EnciphermentKey Encipherment также включить использование ключей или ключей.

Предупреждение

Закрытый ключ не следует развертывать на компьютерах. Он должен храниться в безопасном расположении, где расшифровываете сообщения.

Расшифровка сообщений ведения журнала защищенных событий

Следующий скрипт извлекает и расшифровывает события, предполагая, что у вас есть закрытый ключ:

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

См. также