蓝队必备:PowerShell日志记录与安全监控实战指南

本文详细介绍了PowerShell在攻击中的滥用现状及微软的应对措施,重点解析PowerShell 5.0的模块日志、脚本块日志和完整转录日志功能,并提供通过组策略启用这些日志记录的具体步骤,帮助蓝队有效监控和防御PowerShell攻击。

PowerShell日志记录与蓝队防御

作者:Joff Thyer

众所周知,PowerShell正日益被红队和攻击者用作攻击工具。行业内的努力催生了诸如PowerSploit、PowerShell Empire、MailSniper和Bloodhound等工具。虽然这些工具大多属于后期利用性质,但红队和攻击者通过社会工程轻松诱导终端用户,为广泛使用PowerShell提供了便利。

企业环境中仍普遍使用Windows 7,其默认安装的PowerShell版本为2.0。不幸的是,该版本缺乏真正的事件日志记录能力,使防御者几乎处于盲区,仅依赖PowerShell脚本签名策略。

幸运的是,微软从Windows管理框架(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管理模板文件,否则组策略选项不可见。管理模板下载位于Microsoft网页: https://www.microsoft.com/en-us/download/details.aspx?id=48257

安装管理模板后,需手动将“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 设计