Поделиться через


о_регистрации_в_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 поставщика ETW {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

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

Поле Ценность
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 Encipherment, либо Key Encipherment.

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

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

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

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

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

См. также