蓝队必备:PowerShell日志记录实战指南

本文详细介绍了PowerShell在安全攻防中的关键作用,重点解析了Windows Management Framework 5.0的模块日志记录、脚本块日志记录和完整转录日志记录三大功能,并提供了通过组策略启用这些日志记录功能的具体步骤,帮助蓝队有效监控和防御PowerShell攻击。

PowerShell日志记录:蓝队视角

作者:Joff Thyer

PowerShell正日益被红队和攻击者用作攻击工具,这已不是秘密。得益于行业内的众多努力,我们拥有了PowerSploit、PowerShell Empire、MailSniper和Bloodhound等顶级工具。虽然这些工具大多属于后渗透阶段,但红队和攻击者能够轻松地对最终用户进行社会工程学攻击,这为广泛使用PowerShell提供了便利。

Windows 7在企业环境中仍然普遍存在,其默认安装的PowerShell版本为2.0。不幸的是,该版本的PowerShell没有提供真正的事件记录能力,因此防御者除了一个PowerShell脚本签名策略外,基本上处于盲区。

幸运的是,微软从Windows Management Framework(WMF)4.0和5.0开始,为防御者提供了显著的PowerShell日志记录增强功能。如果组织使用Windows 10,则WMF已预装为5.0版本。对于仍在使用Windows 7的组织,建议将所有工作站升级到WMF 5.0,从而将PowerShell也升级到5.0版本。此外,Windows 7需要依赖.NET 4.5才能安装WMF 5.0。完成升级后,将启用以下额外的事件记录功能:

模块日志记录:记录PowerShell管道执行细节,包括变量初始化和命令调用。模块日志记录能够记录一些去混淆的脚本和部分输出数据。这种日志记录实际上自PowerShell 3.0起就已可用,并将所有事件记录到事件ID 4103。

脚本块日志记录:记录并捕获所有正在执行的PowerShell代码块。代码的完整内容,包括整个脚本和所有命令,都会被捕获。由于其面向对象的实现方式,脚本块日志记录还会捕获所有去混淆的代码。例如,如果脚本使用“-Encoded”命令参数进行base64编码,脚本块日志记录将在执行期间记录实际解码后的脚本块。与模块日志记录不同,脚本块日志记录不记录已执行脚本的输出。如果事件超过事件日志消息的最大大小,脚本块日志记录会将记录的事件拆分为多个事件。此外,在PowerShell 5.0中,脚本块日志记录会以“警告”级别记录与可疑命令列表匹配的事件。启用后,正常记录级别为“详细”或“信息”。除非显式禁用脚本块日志记录,否则“可疑”事件将始终被记录。所有脚本块日志记录事件均记录为事件ID 4104。除此之外,还有一个选项可以记录脚本块执行开始和停止事件,分别为事件ID 4105和4106。在我的实验中,启用此选项会记录更多事件,但带来的额外好处有限,因此我选择禁用此选项。

完整转录日志记录:记录每个PowerShell会话的完整转录,包括输入和输出数据。转录内容写入单独的文件,命名约定可防止名称冲突。需要注意的是,转录仅记录PowerShell终端窗口中显示的内容,其中包括脚本内容或直接写入文件系统的输出。虽然转录默认写入文档文件夹,但这是可配置的。建议将转录写入网络共享等位置,以避免被攻击者删除或修改。

在执行必要的WMF 5和PowerShell 5升级(如果使用Windows 7)后,下一步是启用日志记录选项。所有这些选项都可以通过组策略启用,但请注意,需要先安装适当的Windows 10管理模板文件,组策略选项才会可见。作为一名非前Windows系统管理员,我费了一番周折才在以下Microsoft网页找到管理模板下载链接:

https://www.microsoft.com/en-us/download/details.aspx?id=48257

请注意,安装管理模板后,任务并未完成。安装实际上只是将文件复制到“\Program Files (x86)\Microsoft Group Policy”目录。您需要将适当的“PowerShellExecutionPolicy.admx”和“PowerShellExecutionPolicy.adml”移动到系统上的正确位置。在域环境中,还可以使用“\SYSVOL\Policies\Policy Definitions”目录通过SYSVOL部署管理模板。

完成此操作后,您的本地或域组策略应在计算机和用户配置区域中包含额外的日志记录选项。每个区域下的配置路径为:

策略 -> 管理模板 -> Windows PowerShell

(组策略编辑器截图)

定义这些组策略选项后,实际事件将在本地系统的应用程序和服务日志中记录,路径如下:

应用程序和服务 -> Microsoft -> Windows -> PowerShell -> 操作

以下截图是在远程系统上建立PowerShell Empire会话后拍摄的。在此过程中,创建了许多不同的脚本块日志条目,显示了所有正在执行的不同脚本块的重要详细信息。您还可以在此事件日志中看到,有几个条目以“警告”级别记录,表明可能正在执行可疑代码。

综上所述,请务必在您的环境中安装WMF 5.0,并至少启用脚本块日志记录。朋友不会让朋友在没有日志记录的情况下运行PowerShell!当然,我假设您都愉快地计划集中收集这些事件日志,对吧?

祝狩猎愉快!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计