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

本文详细介绍了如何使用Windows事件转发器(WEF)实现终端日志集中化收集,包括服务器配置、组策略设置、Sysmon部署以及PowerShell日志记录,最终构建一个基于Windows原生功能的DIY SIEM解决方案。

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

Derek Banks //

我想在我们之前关于集中式终端事件日志记录的博客文章基础上进行扩展,使用Windows事件转发功能,并利用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

这还将导致为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设置>安全设置>受限组下,右键单击并选择添加组…,输入事件日志读取者,然后选择确定。右键单击您刚刚添加的事件日志读取者组,选择属性,并添加网络服务。单击应用和确定。

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发现对手出版物可以用作指南,以下是我们建议的最低要求。

帐户和组活动

此订阅将收集域和本地组和帐户活动。要添加的安全事件日志事件是: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和C3工具以及EVTX文件,同时通过ELK提供可视化搜索能力。

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

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

结论

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

参考:

https://joshuadlewis.blogspot.com/2014/10/advanced-threat-detection-with-sysmon_74.html https://blogs.technet.microsoft.com/jepayne/2015/11/23/monitoring-what-matters-windows-event-forwarding-for-everyone-even-if-you-already-have-a-siem/ https://github.com/iadgov/Event-Forwarding-Guidance

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