如何在预算有限的情况下实现终端监控——网络研讨会文字稿
Joff Thyer & Derek Banks //
作为渗透测试人员,我们经常需要就事件日志记录提出"增强终端可见性"的建议。我们对此充满信心,因为这无疑是一个基于充分证据的合理建议。
证据是什么?在渗透测试过程中,我们的特定行为模式会留下证据痕迹;然而,这些证据很少出现在中央服务器上。大部分活动发生在环境边缘,直到入侵后期才可能出现集中日志记录。
在典型任务中,我们会通过社会工程学让用户运行定制恶意软件。这可能通过网站、可移动介质或电子邮件传递机制实现,诱使用户在终端站上执行操作。这种恶意软件会轻松规避终端防护,并几乎在所有情况下创建出站命令与控制(C2)通道。我们接下来的典型操作是提升权限,在您的环境中横向移动,可能在此过程中无情地掠夺数据!作为权限提升的一部分,我们可能使用密码喷洒技术或利用其他软件漏洞。这些行为模式可能在中央服务器上留下一些日志证据,但绝大多数证据将留在终端事件日志中。实际攻击者使用其特定工具、技术和程序也会在终端上留下类似的活动痕迹。
与渗透测试人员类似,攻击者依赖于通常无人监控环境内部活动的事实,且大多数预防和检测方法都在网络入口/出口处实施。如果他们能通过这些防护,很可能在一段时间内不会被发现。终端监控,特别是网络边缘的Windows终端,对于发现已绕过上游基于网络的解决方案的攻击者至关重要。
几乎所有客户都会用类似的反问回应此建议:“嘿[BHIS测试员],我们有成千上万的终端。我怎么可能收集所有终端的日志并追捕威胁行为者?“问得好!
虽然SIEM供应商绝对希望您创建事件数据的巨大消防水管,但我们都知道这种方法在财务和运营上都不可扩展。那么,我们能否生成专注于正确事项且成本低廉的终端事件日志记录?
如果您愿意,一个选择是构建自己的解决方案,可以适当调整和扩展。有几种有用的解决方案(开源和付费均可)可以应对这一挑战,并能智能配置以便扩展。以下是我们将考虑的组件列表,我们在最近的网络研讨会中也讨论了这些内容。
NXLOG:一个开源和商业日志管理解决方案,适用于包括Windows和Linux在内的多个平台。 SysInternals Sysmon:由微软的Mark Russinovich编写的优秀Windows事件日志增强模块。 Elasticsearch:高度可扩展的开源分析数据存储和搜索解决方案。 Kibana:Elasticsearch的配套Web界面,能够生成直接搜索查询并组装数据可视化。 Logstash:可扩展的日志摄取引擎,可以轻松将其输出转发到Elasticsearch。
需要强调的是,创建可扩展解决方案的关键是分发事件日志过滤配置,以便只有绝对最小且必要的信息流回Logstash,随后进入Elasticsearch。
还要意识到,此处的目的是为监控和IR团队创建战术监控解决方案的概念验证,而不是合规性和长期日志归档系统。
虽然可以使用多个日志收集器和多个弹性服务器来扩展解决方案,但在本文使用的概念验证中,为简单起见,Elastic、Logstash和Kibana组件(ELK堆栈)都安装在同一系统上。
首先,我们需要在Windows终端上运行Sysmon。接下来,我们将在终端上配置PowerShell日志记录。然后,我们将配置NXlog将Sysmon日志以及特定目标事件发送到弹性堆栈解决方案。所有这些都将通过组策略对象(GPO)配置,但您可能希望在您的环境中以不同方式部署(一如既往,请咨询您友好的本地系统管理员)。
Sysmon配置
微软的Sysmon是作为Sysinternals套件一部分发布的工具。它扩展了终端的日志记录能力,超越了标准事件日志。它记录的一些关键事件包括:
- 具有完整命令行和父进程的进程创建
- 执行进程的哈希值
- 网络连接
- 文件创建时间更改
在本地系统上,它将这些日志存储在事件查看器中的"应用程序和服务日志”>“Microsoft”>“Windows”>“Sysmon”>“Operational"中。默认情况下,Sysmon日志记录会产生相当多的日志噪音。这就是为什么应在安装时使用配置文件来过滤终端上已知良好或特定已知不良警报的事件。这样,您就不会将大量噪音传输到中央日志记录系统。
我们建议您从优秀的@SwiftOnSecurity配置文件开始,该文件可以在其[Github页面]找到。从那里,您可以向文件中添加所需内容,以进一步减少环境中的噪音。
从命令行安装(具有管理员权限):
|
|
可以以类似方式更新配置:
|
|
PowerShell日志记录
不仅仅是渗透测试人员越来越多地在技巧中使用PowerShell——实际攻击者也是如此。这是一个强大的环境,可以在攻击的每个阶段完成任务,从将shellcode注入内存到利用后的态势感知和横向移动。在大多数环境中,使用Windows 7附带的版本(版本2.0)执行PowerShell几乎不会留下使用痕迹,从攻击者的角度来看非常吸引人。
微软从PowerShell版本5开始改变了日志记录盲点。此版本是Windows 10的默认版本,因此如果您只使用Windows 10,可以跳过部署GPO来启用日志记录。我们其他99.9%的人需要做一些事情才能在Windows 7上运行版本5。
首先,您需要在所有Windows 7终端上安装[Windows Management Framework 5.1]。此任务留给读者找出最适合其环境的方法。
安装后,创建一个GPO以在终端上强制执行日志记录设置。这在"管理模板”>“Windows组件”>“Windows PowerShell"中。
有多个日志记录选项。对于我们启用战术监控以检测潜在攻击者的目的,两个最有用的可能是PowerShell脚本块日志记录和PowerShell模块日志记录。
模块日志记录将在事件ID 4103中记录管道执行详细信息,并包含脚本和输出格式化数据的详细信息。脚本块日志记录将在PowerShell引擎执行代码时记录代码,从而将去混淆代码记录到事件ID 4104。
您还可以选择启用PowerShell转录以收集每个PowerShell会话中输入的命令。这将把所有输入和输出存储到用户文档目录中唯一命名的文本文件中。对于我们向中央日志记录存储库发送日志数据以帮助发现攻击者的目的,这并非完全必要。
Windows 7系统的另一个注意事项是下载[Windows 10管理模板],并将PowerShellExecutionPolicy.admx和PowerShellExecutionPolicy.adml复制到\sysvol\Policies\Policy Definitions目录。
Nxlog配置
有几个终端代理选项可以将Windows事件日志传输到中央syslog服务器,包括开源和付费选项。微软还提供解决方案和策略来合并终端日志。
对于本文,我们选择使用NXlog。[nxlog.co]的人员提供免费(社区版)和企业版。社区版应足以满足大多数Windows终端日志记录任务,并提供基于日志类型或事件ID进行过滤的能力。
与Sysmon一样,我们将从命令行安装NXlog:
|
|
我们使用的配置文件位于[此处]。我们选择传输Sysmon、帐户登录、帐户创建、帐户登录失败、帐户启用、帐户添加到本地组以及事件日志清除。您可能希望根据监控需求添加到此列表。确定哪些额外事件ID可能帮助您找到潜在攻击者的资源是[NSA发现对手]论文(发布时官方链接已关闭)。
NXlog配置文件片段
将配置文件更改为指向中央日志记录系统后,需要将其放置到位并重新启动NXlog服务:
|
|
部署选项
您可能已经有一个软件部署系统可以安装和配置NXlog和Sysmon。如前所述,请与您的系统管理员交谈。但是,如果没有,GPO部署是一个选项。
我们选择使用批处理文件作为启动脚本进行部署。您可以在[此处]获取我们的示例批处理文件。
将批处理文件以及Sysmon和NXlog的安装和配置文件复制到域SYSVOL共享中的某个位置,并更改批处理文件路径以反映位置。
然后,使用组策略管理创建新的GPO。编辑GPO并导航到"策略”>“Windows设置”>“脚本”,选择"启动”,右键单击并选择启动属性。
单击"添加"并浏览到您的install.bat脚本网络位置。单击"确定",然后应用更改。关闭编辑器,右键单击GPO并确保选中"强制"。
弹性堆栈
对于弹性堆栈,我们使用了Ubuntu 16.04的标准安装以及Elasticsearch、Logstash和Kibana的Debian包文件。Ubuntu服务器启动并运行后,从[elastic.co]下载文件并使用dpkg安装。
|
|
使用您最喜欢的文本编辑器(当然是Vi)编辑/etc/kibana/kibana.yml,并更改"server.host:“行以反映系统的IP地址。
现在我们需要放置一个logstash过滤器以正确格式化传入的日志文件并将其获取到Elasticsearch中。从[此处]下载logstash配置文件并将其放在/etc/logstash/conf.d目录中。
现在启动Elasticsearch、Logstash和Kibana服务。
|
|
导航到系统的IP地址和端口5601。您应该看到Kibana服务页面。将"logstash-“更改为"winevent-“并单击"创建”。如果一切按计划进行,您应该已经看到一些事件传入。
请意识到,虽然本文中涵盖的组件可用于企业部署,但实际实施需要一些未涵盖的考虑因素。例如:安全身份验证、加密通信以及处理来自数千个工作站的更大流量量的硬件要求。这些并非不可克服的问题,每个环境都不同且有独特要求。调整工具和概念以满足您的需求。