PowerShell 的模块日志记录

信息安全 日志记录 硬化 电源外壳
2021-08-28 02:49:06

我正在寻找有关白皮书的更多信息,该白皮书详细介绍了 PowerShell 的模块日志记录。

具体来说,一旦启用此功能,是否会记录默认 cmdlet?例如,Get-Service等等。查看 PowerShell的About_Group_Policy_Settings,参考了​​以下组策略路径Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell,其中 Module Logging 列出了通过使用为 Windows PowerShell Core 模块启用日志记录的示例Microsoft.PowerShell.*

我的问题与信息安全有关,有没有人从防御者的角度研究过这个问题?具体来说,启用模块日志记录是否会增加暴露更多攻击面的机会,如果是这样,是否有任何步骤或最佳实践来强化日志等以减轻增加的攻击面?

我的猜测是将 Windows PowerShell 的事件日志复制到高安全性系统或使用加密,以便在攻击者发现启用了模块日志记录的情况下,加密将防止日志被更改以覆盖攻击者的踪迹.

2个回答

首先,您没有指定这是针对服务器还是针对台式机。

但我暂时假设服务器。要直接解决 PowerShell 日志记录的日志记录方面...是的,它可以记录 cmdlet 调用。我相信 3.0 及更高版本使用正确的 GP 设置可以做到这一点。

其次,事件日志没有加密,并且它们的 ACL 很容易修改。因此,我个人建议使用 SIEM 远程监控它们,以便您可以查找一些最重要的 cmdlet,例如处理远程处理、事件日志修改以及与权限相关的任何内容,并将其报告回您的监控工具,这样如果本地日志被恶意行为者修改,您可以将信息返回到您的监控工具中。

但是,如果您真的对强化 PowerShell 漏洞利用感兴趣,则需要考虑强化 PowerShell 本身。

问自己几个与您的情况有关的问题...

  1. 无论如何,至少升级到 PowerShell 4.0。没有关于这个的问题。

  2. 您希望机器上的任何用户远程运行 PowerShell 脚本吗?如果没有,请禁用 WinRM 服务并阻止端口 8495 和 8496。

  3. 您是否希望任何用户都能够在本地执行 PowerShell 脚本如果不是,请重命名:
    3a)。C:\Windows\ SysWOW64 \WindowsPowerShell\v1.0\powershell.exe 和 powershell_ise.exe 改成其他名称。
    3b)。C:\Windows\ System32 \WindowsPowerShell\v1.0\powershell.exe 和 powershell_ise.exe 改成其他名称。

根据您对上述问题的回答,这是进行防御的良好开端。但请注意,这只是其中的一层。如果他们有管理员权限,他们可以重命名,重新启用一切恢复默认值,包括擦除所有日志。

根据您使用的 SIEM,我们暂时假设 Splunk - 您可以将源添加到 PowerShell 的预取文件,通常为:%systemroot%\prefetch\powershell.exe.*.pf 并在其中查找“.ps1”文件。您还可以监视上次修改的字段和其他相关字段。

这对于仍在使用 PowerShell 2.0 并且无法升级到 PowerShell 3.0 或更高版本以利用 Windows PowerShell 事件日志的系统尤其有效。

我也对您的问题感兴趣,但是您是否看过以下有关 v5 的链接?

powershell v.5 中的高级安全性

除了过肩式转录之外,PowerShell v5 和 KB 3000850 还引入了深度脚本块日志记录。启用脚本块日志记录时,PowerShell 会记录它处理的所有脚本块的内容。如果脚本块使用动态代码生成(即$command = "'Hello World'"; Invoke-Expression $command:),PowerShell 也会记录此生成的脚本块的调用。这提供了对系统上基于脚本的活动的完整洞察——包括利用动态代码生成以试图逃避检测的脚本或应用程序。

与转录支持一样,这种深度脚本块日志记录适用于托管 PowerShell 引擎的任何应用程序——命令行 shell、ISE 或自定义主机。

要启用自动转录,请通过Windows Components -> Administrative Templates -> Windows PowerShell. 对于自动化,配置设置存储在 HKLM:\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging. 默认情况下,PowerShell 仅在首次使用脚本块时记录它们。如果您选择“记录脚本块调用启动/停止事件”,PowerShell 还会在每次调用脚本块时记录启动和停止事件。后一种设置会产生大量事件,因此应谨慎启用。

它还说:

增加系统登录量时的一个问题是记录的内容可能包含敏感数据的危险。例如,如果您记录每个运行的 PowerShell 脚本的内容,则脚本可能包含凭据或其他敏感数据。

如果攻击者后来破坏了记录此数据的机器,它可能会为他们提供额外的信息来扩大他们的影响范围。

为了避免这种困境,Windows 10 引入了受保护的事件日志记录。受保护的事件日志记录允许参与的应用程序在将敏感数据写入事件日志时对其进行加密。将这些日志移至更安全、更集中的日志收集器后,您就可以解密和处理这些日志。