使用Windows事件转发器实现终端日志集中化

本文详细介绍了如何利用Windows内置的事件转发功能,无需额外代理即可集中收集终端安全日志,包括配置步骤、Sysmon集成、PowerShell日志记录及与ELK堆栈的集成方案。

终端日志集中化与Windows事件转发器

Derek Banks //

我想扩展我们之前关于集中终端事件日志记录的博客文章,使用Windows事件转发(WEF)并利用Microsoft原生功能将事件发送到中央位置。为什么要这样做?

我想要一个基于Windows的服务器,包含环境中的所有事件日志,以便可以使用PowerShell进行分析。这样,我就可以将转发的事件发送到上游的ELK服务器进行可视化,并有多种选项来处理数据。这种架构随后构成了我们CredDefense工具包所需设置的一部分。

此外,在某些环境中,可能不希望再部署另一个代理到Windows终端。WEF已经存在相当长的时间,但许多人没有意识到日志集中功能是内置在Windows中的,并且不在终端上使用代理。

已经有一些非常好的指南存在(在参考链接中提到),但它们没有完全帮助我让WEF完全功能化。这可能是由于Microsoft服务器操作系统的不同版本。实验室系统的服务器端使用Windows Server 2012,工作站混合使用Windows 10企业版和专业版以及Windows 7专业版。

Windows事件转发器设置

第一步是建立收集器服务器,它将接收环境中其他Windows系统的日志。系统的大小将由您的环境决定,但我们不会发送所有事件,因此可以使用适中的服务器,然后在需求变化时进行扩展。

首先,在收集器服务器上运行以下命令:

1
C:>winrm qc

这将启动WinRM服务,并将服务启动类型设置为自动启动,同时配置用于发送和接收WS-Management协议消息的端口的侦听器。

接下来使用wecutil配置Windows事件收集器服务,并确保它在系统重启时启动。

1
C:>wecutil qc

这还将导致注册一个服务主体名称(SPN)用于Kerberos身份验证。如果您使用现有服务器并且已经注册了HTTP SPN,WEF将无法工作,除非您删除现有的SPN。如果您使用新系统,可能不需要担心这一点。如果在设置过程中遇到问题并需要检查SPN注册,可以使用:

1
setspn -t <domain> -q */*

在收集器服务器上创建测试订阅

为您希望监视的终端创建一个域安全组,并将目标系统放入该组。或者,如果您在测试环境中,可以只使用“域计算机”。否则,最初设置时使用环境中的所有计算机可能不是最好的主意。最好从小开始,逐步扩展,而不是一开始就遇到问题。

一旦确定了目标系统,在收集器服务器上打开事件查看器并选择订阅。您可能会被提示自动配置Windows收集器服务。选择“是”。

右键单击订阅并选择“创建订阅”。对于订阅名称,输入“安全日志已清除”。目标日志应为“转发的事件”。选择“源计算机启动”的单选按钮,然后选择“选择计算机组…”。添加您最初将监视的目标组。

接下来,选择“选择事件…”,在事件日志下拉菜单中选择安全日志。

配置事件日志转发条目

为了本指南的目的,我们将创建一个包含所有用于终端安全分析的事件日志转发设置的GPO。此外,所有域成员计算机都将转发到同一个WEF服务器。

打开组策略管理面板,选择您的域,右键单击并选择“在此域中创建GPO,并在此处链接…”。输入一个名称,例如“Windows事件转发”,然后选择确定。

在计算机>策略>管理模板>Windows组件>事件转发下,右键单击“配置目标订阅管理器”条目并选择编辑。选择“已启用”单选按钮,并在选项窗格中的订阅管理器旁边选择“显示”。

输入以下行作为值,将“eventserver.domain.local”部分替换为完全限定域名:

1
Server=http://eventserver.domain.local:5985/wsman/SubscriptionManager/WEC,Refresh=60

请注意,此配置是通过HTTP而不是HTTPS进行转发。如果需要,转发的事件流量可以加密并使用HTTPS。

通过GPO启用Windows远程管理(WS-Management)服务

需要在所有将转发事件的系统上启动Windows远程管理(WS-Management)服务。请注意,它们不需要在HTTP或HTTPS上侦听——唯一需要侦听并配置防火墙规则的系统是WEF服务器。

要启用Windows远程管理在启动时启动,在组策略管理编辑器中选择计算机配置>首选项>控制面板设置>服务。然后右键单击服务窗格并选择新建>服务。

在启动字段中,选择“自动(延迟启动)”,并选择服务名称为WinRM——也列为Windows远程管理(WS-Management)。将服务操作保留为“启动服务”。单击应用和确定。

通过GPO允许本地网络服务访问本地事件日志

将日志转发到中央WEF服务器的本地系统需要授予网络服务帐户读取事件日志的访问权限。有一个内置的Windows组对此很有用,称为“事件日志读取者”。

在计算机配置>Windows设置>安全设置>受限组下,右键单击并选择添加组…,输入“事件日志读取者”,然后选择确定。右键单击您刚刚添加的“事件日志读取者”组,选择属性,并添加NETWORK SERVICE。单击应用和确定。

Sysmon GPO

Microsoft的Sysmon是作为Sysinternals套件一部分发布的工具。它扩展了终端的日志记录能力,超出了标准事件日志。Windows现在可以原生记录执行进程的完整命令行,但Sysmon提供了额外的数据,这些数据可能非常有用。

  • 执行进程的哈希
  • 网络连接
  • 文件创建时间更改
  • WMI过滤器和消费者

在本地系统上,它将这些日志存储在事件查看器中的应用程序和服务日志>Microsoft>Windows>Sysmon>操作中。默认情况下,Sysmon日志记录会产生相当多的日志噪音。这就是为什么在安装时应使用配置文件来过滤终端上已知良好或特别已知不良的事件。这样,您就不会向中央收集器发送不必要的日志。

我们建议您从优秀的@SwiftOnSecurity配置文件开始,该文件可以在他们的Github页面上找到。从那里,您可以添加到文件中,以进一步减少环境中的噪音。

处理Sysmon部署的一种方法是通过GPO创建一个启动脚本,运行批处理文件来检查Sysmon是否已安装,如果未安装,则使用正确的配置文件安装它。如果已安装,请确保服务已启动。

示例安装脚本可以在这里找到。确保Sysmon可执行文件、配置文件和批处理文件都在一个共享中。我们选择了SYSVOL共享——根据您在环境中的选择相应编辑脚本。

在GPO编辑器中,选择计算机配置>Windows设置>脚本(启动/关机)并添加安装脚本。

PowerShell脚本块和模块日志记录

利用PowerShell进行攻击在渗透测试人员和实际威胁行为者中变得非常流行。过去,PowerShell日志记录能力不足,但随着PowerShell 5.0的发布,这一点发生了变化。这是Windows 10的默认版本,因此如果您已将所有Windows终端从Windows 7迁移,那么您就准备好了。

在本文发布时,大多数地方尚未完全从Windows 7迁移。如果您的环境也是如此,您需要安装Windows Management Framework 5.0并通过GPO启用日志记录。此任务留给读者根据自己的环境确定最适合的软件部署方式。

安装后,使用GPO编辑器启用模块和脚本块日志记录。这在管理模板>Windows组件>Windows PowerShell中。

模块日志记录将在事件ID 4103中记录管道执行详细信息,并包含脚本和输出中的格式化数据的详细信息。脚本块日志记录将记录由PowerShell引擎执行的代码,因此记录去混淆的代码到事件ID 4104。

Windows 7系统的另一个注意事项是下载Windows 10的管理模板,并将PowerShellExecutionPolicy.admx和PowerShellExecutionPolicy.adml复制到\sysvol\Policies\Policy Definitions目录。

其他订阅

此时,您应该准备好测试事件转发。在创建其他订阅之前,清除其中一个订阅终端的事件日志。您可以通过右键单击订阅并选择运行时状态来验证客户端的检查状态。如果一切正常工作,清除的日志事件很快就会显示在WEF服务器上的转发事件日志中。

如果一切正常,是时候创建其他订阅以促进收集重要内容。NSA Spotting the Adversary出版物可以用作指南,以下是我们建议的最低要求。

账户和组活动

此订阅将收集域和本地组及账户活动。要添加的安全事件日志事件是:4624、4625、4648、4728、4732、4634、4735、4740、4756。这些事件对于执行身份验证分析是必要的。

Kerberos

此订阅用于从域控制器收集事件ID 4769。由于票证请求频繁,将记录大量数据,但是,与HoneyToken账户配对,它有潜力检测Kerberoasting攻击。

PowerShell日志记录

要收集之前启用的模块和脚本块事件,创建一个订阅来收集Microsoft-Windows-PowerShell/Operational日志并获取事件ID 4103和4104。

Sysmon

所有Sysmon日志都将发送到WEF服务器。选择Microsoft-Windows-Sysmon/Operational事件日志,并将目标计算机保留为“所有计算机”。

将日志发送到ELK

与我们之前关于终端日志集中化的文章类似,我们将使用nxlog将日志从WEF服务器发送到ELK堆栈。这种架构允许在基于Windows的日志服务器上使用PowerShell和C#工具以及EVTX文件,同时通过ELK提供可视化搜索能力。

如果需要,请使用之前的博客文章启动ELK。nxlog的配置文件将不同。在WEF服务器上安装nxlog,并修改此处的配置文件以指向您的ELK堆栈。

一个用于摄取转发日志的基本logstash过滤器可以在这里找到。

结论

Windows事件转发器提供了一种原生方式来集中Windows终端日志。可以在WEF服务器上使用PowerShell和C#工具来分析转发的事件。此外,将事件发送到ELK堆栈提供了可视化和狩猎能力。整体设计结合发送特定日志文件,如身份验证、PowerShell模块和脚本块日志记录以及Sysmon日志,创建了一个DIY SIEM设置,可用于检测网络中的潜在攻击者。

参考:

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