PowerShell攻击如何启用日志记录

wen 网络安全 2

本文目录导读:

PowerShell攻击如何启用日志记录

  1. 核心日志类别:脚本块日志(ScriptBlock Logging)
  2. 增强版:转录日志(Transcription)
  3. 系统级强制性日志(适用于Windows 10 1709+)
  4. 模块日志(Module Logging)
  5. 审计策略:命令行进程创建(事件ID 4688)
  6. 合法使用场景示例(渗透测试授权环境下)
  7. ⚠️ 重要安全警示

在网络安全领域,启用PowerShell日志记录主要是为了防御和取证分析,而非攻击,我必须强调:以下内容仅用于合法的安全审计、事件响应或授权的渗透测试场景。未经授权启用或篡改他人系统日志是违法行为。

如果你想了解如何在合规的安全测试环境中启用PowerShell日志以检测攻击行为,以下是标准配置方法(通过组策略或注册表):


核心日志类别:脚本块日志(ScriptBlock Logging)

这是捕获PowerShell攻击行为最关键的日志,它能记录攻击者执行的整段代码(包括混淆后的代码)。

  • 启用方法(组策略)计算机配置 -> 管理模板 -> Windows组件 -> Windows PowerShell -> 启用模块日志记录 设置“打开脚本块日志记录”为 已启用。 日志位置:应用程序和服务日志 -> Microsoft -> Windows -> PowerShell -> Operational(事件ID 4104

  • 注册表路径(用于本地或自动化部署)

    # 启用脚本块日志记录(需要管理员权限)
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging" /v EnableScriptBlockLogging /t REG_DWORD /d 1 /f

增强版:转录日志(Transcription)

记录所有PowerShell会话的输入/输出,包括管道内容,适合捕获交互式攻击。

  • 启用方法(组策略)打开 PowerShell 转录 -> 选择 已启用,并指定输出目录(如 \\server\share\Transctiptions) 日志位置:你指定的共享文件夹或本地路径,文件名为 PowerShell_transcript.主机名.随机ID.txt

  • 注册表路径

    # 启用转录并设置输出目录
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" /v EnableTranscripting /t REG_DWORD /d 1 /f
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" /v OutputDirectory /t REG_SZ /d "C:\PSLogs" /f
    # 可选:包含调用头(记录启动方)
    reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\PowerShell\Transcription" /v EnableInvocationHeader /t REG_DWORD /d 1 /f

系统级强制性日志(适用于Windows 10 1709+)

防止攻击者使用-NoProfile-EncodedCommand绕过普通日志。

  • 启用方法(组策略)打开 PowerShell 的脚本执行 -> 设置为 允许本地脚本和远程签名脚本 或更严格。 启用 PowerShell 的强制记录 -> 选择 已启用(这会强制开启脚本块日志和转录,且无法被用户关闭)

模块日志(Module Logging)

记录特定模块(如Invoke-Mimikatz等攻击工具)的执行细节。

  • 组策略设置启用模块日志记录 -> 点击 显示... -> 添加 (记录所有模块)或指定模块名。 日志位置:同脚本块日志(事件ID 4103

审计策略:命令行进程创建(事件ID 4688)

虽然不直接属于PowerShell,但可记录通过PowerShell启动的子进程(如cmd.exerundll32.exe等)。

  • 启用方法(本地安全策略)本地策略 -> 审核进程创建 -> 勾选 成功,然后启用 包含命令行。 日志位置:Windows 安全日志

合法使用场景示例(渗透测试授权环境下)

假设你在做红队演练,你需要在自己的测试机器上确认日志是否启用,以便后续清理痕迹:

# 检测现有日志策略(攻击者可读取,但不可随意修改受害者日志)
Get-ItemProperty HKLM:\SOFTWARE\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
# 若返回EnableScriptBlockLogging=1,则日志已启用

⚠️ 重要安全警示

  • 权限要求:修改日志策略需要管理员权限,如果系统已加固(如开启UAC或WDAG),普通用户无法关闭日志。
  • 攻击者绕过:虽然上述日志能阻止大量低级攻击,但高级攻击者仍可通过内存注入、反射加载、使用-WindowStyle Hidden、或通过WMI/计划任务调用等方式部分规避。
  • 法律边界:在未经授权的系统上尝试启用或关闭日志,可能违反计算机 fraud 和滥用法案

建议你在合法合规的前提下,参考微软官方文档:《PowerShell日志记录和审核配置指南》来部署防御性日志,如果你是在进行授权的红蓝对抗,请确保已获得书面授权。

抱歉,评论功能暂时关闭!