当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 关于记录 Windows

作者:精品下载站 日期:2024-12-14 02:21:43 浏览:12 分类:玩电脑

关于记录 Windows


简短描述

PowerShell 将引擎、提供程序和 cmdlet 的内部操作记录到 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 会话都会记录此信息。有关详细信息,请参阅启用脚本块日志记录。

在 Windows 上注册 PowerShell 事件提供程序

与 Linux 或 macOS 不同,Windows 要求先注册事件提供程序,然后才能将事件写入事件日志。要启用 PowerShell 事件提供程序,请从提升的 PowerShell 提示符运行以下命令。

$PSHOME\RegisterManifest.ps1

在 Windows 上查看 PowerShell 事件日志条目

可以使用 Windows 事件查看器查看 PowerShell 日志。事件日志位于应用程序和服务日志组中,名为PowerShellCore。关联的 ETW 提供商 GUID 为 {f90714a8-5509-434a-bf6d-b1624c8a19a2}

启用脚本块日志记录后,PowerShell 将以下事件记录到 PowerShellCore/Operational 日志中:

EventId

4104/0x1008

Channel

可操作

Level

详细

Opcode

创建

Task

命令启动

Keyword

运行空间

在 Windows 上取消注册 PowerShell 事件提供程序

注册事件提供程序会在用于解码事件的二进制库中放置一个锁。要更新此库,必须取消注册提供程序才能释放此锁定。

要取消注册 PowerShell 提供程序,请从提升的 PowerShell 提示符运行以下命令。

$PSHOME\RegisterManifest.ps1 -Unregister

更新 PowerShell 后,运行 $PSHOME\RegisterManifest.ps1 以注册更新的事件提供程序。

启用脚本块日志记录

启用脚本块日志记录后,PowerShell 会记录它处理的所有脚本块的内容。启用后,任何新的 PowerShell 会话都会记录此信息。

笔记

当将脚本块日志记录用于诊断目的以外的任何用途时,建议启用受保护的事件日志记录,如下所述。

可以通过组策略或注册表设置启用脚本块日志记录。

使用组策略

要启用自动转录,请通过管理模板 -> PowerShell Core 在组策略中启用打开 PowerShell 脚本块日志记录功能。

使用注册表

运行以下函数:

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配置文件

您可以在 powershell.config.json 文件中设置 ScriptBlockLogging 选项来控制 PowerShell 的行为。有关详细信息,请参阅 about_PowerSHell_Config。

受保护的事件记录

提高系统的日志记录级别会增加记录的内容包含敏感数据的可能性。例如,启用脚本日志记录后,脚本使用的凭据或其他敏感数据可以写入事件日志。当记录敏感数据的计算机受到威胁时,日志可以为攻击者提供扩大其影响范围所需的信息。

为了保护这些信息,Windows 10 引入了受保护的事件日志记录。受保护的事件日志记录允许参与的应用程序加密写入事件日志的敏感数据。稍后,您可以在更安全、更集中的日志收集器上解密和处理这些日志。

事件日志内容使用 IETF 加密消息语法 (CMS) 标准进行保护。 CMS 使用公钥加密技术。用于加密内容和解密内容的密钥是分开保存的。

公钥可以广泛共享,并且不是敏感数据。任何用该公钥加密的内容只能用私钥解密。有关公钥加密的更多信息,请参阅维基百科 - 公钥加密。

要启用受保护的事件日志记录策略,请将公钥部署到具有要保护的事件日志数据的所有计算机。相应的私钥用于在更安全的位置(例如中央事件日志收集器或 SIEM 聚合器)对事件日志进行后处理。您可以在 Azure 中设置 SIEM。有关详细信息,请参阅通用 SIEM 集成。

通过组策略启用受保护的事件日志记录

要启用受保护的事件日志记录,请通过管理模板 -> Windows 组件 -> 事件日志记录 在组策略中启用启用受保护的事件日志记录功能。此设置需要加密证书,您可以通过以下几种形式之一提供该证书:

  • Base-64 编码的 X.509 证书的内容(例如,由证书管理器中的导出选项提供)。
  • 可以在本地计算机证书存储中找到的证书指纹(可以由 PKI 基础设施部署)。
  • 证书的完整路径(可以是本地或远程共享)。
  • 包含一个或多个证书的目录的路径(可以是本地的,也可以是远程共享的)。
  • 可以在本地计算机证书存储中找到的证书的使用者名称(可以由 PKI 基础设施部署)。

生成的证书必须具有文档加密作为增强型密钥用法 (1.3.6.1.4.1.311.80.1),以及数据加密或已启用密钥加密密钥用法。

警告

不应将私钥部署到记录事件的计算机。它应该保存在您解密消息的安全位置。

解密受保护的事件日志消息

假设您拥有私钥,以下脚本将检索并解密事件:

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

参见

  • about_Logging_非 Windows
  • PowerShell 蓝队
  • 通用 SIEM 集成

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯