如何使用 Elastic 安全构建一个恶意软件分析沙箱
作为 Elastic InfoSec 团队的安全分析师,我们经常看到有很多用户来询问:“打开这个文件安全吗?” 或者,一个用户报告了一封带有附件的钓鱼邮件,他没有打开,但我们从日志中看到,另外还有 10 个用户也收到了这封邮件,但他们没有报告,而且他们的系统也没有发出告警。网络钓鱼邮件是一种常见的网络攻击手段。由于这种邮件中的附件不包含恶意代码,因此,不会触发任何告警,但它们会试图通过社交工程学来窃取用户的密码。
在这些情况下,安全团队需要迅速查明当一个文件执行时系统中发生了什么,以确定这个文件是否已被检测到或已被停止。如果没有,他们就需要快速了解这个文件在主机上进行了什么操作。在这些情况下,安全团队需要一个功能齐备的虚拟机 (VM) 沙箱,以便用于安全地执行可疑文件并观察发生的情况。Elastic InfoSec 团队始终致力于借助 Elastic 产品不断突破极限,实现客户零风险,因此,我们决定使用 Elastic 产品构建一个沙箱。
在这篇博文中,我将演示 Elastic InfoSec 团队如何使用 Fleet 和 Elastic 安全来构建一个功能齐备的恶意软件分析沙箱。Elastic 不仅非常适合从沙箱中检测和收集数据,而且还十分容易构建,只需几分钟即可创建完成。
什么是动态恶意软件分析?
动态恶意软件分析是指在一个隔离的虚拟机中执行并观察可疑软件的行为。动态分析旨在了解:
- 恶意软件执行了哪些进程
- 它对主机做了哪些更改
- 它建立了哪些网络连接
- 在攻击的第二、三阶段它下载了哪些文件
在对恶意软件进行密切观察之后,您便可利用所收集的信息来创建新的检测和防御措施,或在您的网络中搜寻其他恶意活动。
为什么选择 Elastic?
如果您有过创建沙箱环境来观察和分析恶意软件的经历,那么就会知道设置沙箱是一个耗时费力的过程,需要安装和配置几十个不同的软件。这可能包括安装和配置一组软件(如 Wireshark、Regshot 和 ProcMon),以手动逐步执行恶意软件,同时观察并记录这些操作。
目前有一些高级的动态恶意软件分析沙箱系统(如 Cuckoo Sandbox),它们有着丰富的特性和功能(如自动化),但是它们通常需要更长的时间来设置和配置,而且可能还不是每个 InfoSec 团队都需要的。根据我们最近看到的许多钓鱼恶意软件样本,它们都是试图通过社交工程学来盗取需要用户交互的凭证。在这些情况下,自动化系统可能不会收集所有的危害指标。
有些恶意软件样本会检查具备此特征的许多工具是否存在,并在检测到这些工具时停止执行,因而更难对它们进行分析。有些恶意软件甚至会主动搜索具备此特征的这些工具,并在检测到这些工具时停止执行或覆盖沙箱中的日志。正因为如此,当您正在处理一个需要立即关注的活动事件时,动态恶意软件分析可能会非常耗时。
Elastic Endpoint Security 是一个单独的代理,能够围绕系统上正在发生的操作收集相关信息,并为分析人员快速呈现可视化的进程树。这有助于快速便捷地调查真相,并为您提供改进检测和保护措施所需的各项指标。Elastic 安全中的 Analyzer 视图可以为您可视化整个进程树,清晰展示由初始恶意软件进程创建的所有子进程及其关联的指标。
创建沙箱
使用恶意软件分析沙箱有几个不同的原因。在这个用例中,我们的目标是搭建一个类似于标准企业版的虚拟环境,但也需要对这个环境进行缜密配置,以便我们观察恶意软件的一举一动。
创建沙箱时,您需要为每个版本创建两个映像:一个是“加固镜像”,采用与您在企业中部署的相同保护措施;另一个是“脆弱镜像”,需要将大部分保护措施予以关闭。使用两个映像的好处是,加固映像可向您展示有人执行该文件时您的环境会发生什么,而脆弱映像可向您展示恶意软件的完整执行情况。当一个企业足够大时,几乎总有一些系统禁用了某些保护措施,因此,我推荐使用这两种方法。
创建测试系统
第一步是创建用于执行文件的虚拟机。任何虚拟化软件都可以用来构建镜像。对于虚拟化软件的设置,我这里将不多做介绍,但是在执行恶意软件时,请尽可能地将系统与主机和企业网络隔离开来,这一点很重要。在这个场景中,我将构建一个 Windows 10 虚拟机和一个 MacOS 映像。如果您的企业有 Linux 标准版,您也可以构建一个这样的版本。
创建虚拟机之后,我建议将您域中所有常用的软件(如 MS Office、Adobe Reader 或 Python)都安装上。用户用于执行文件的任何程序都应纳入沙箱中。在您的 Windows 虚拟机上,建议启用 PowerShell ScriptBlock 日志。ScriptBlock 日志会将所有已执行的 PowerShell 脚本,全文保存到 Windows 事件日志中,这些日志可以通过 Elastic 代理收集。在配置“脆弱”虚拟机时,您需要更改多个设置,以将所有内置的操作系统保护设为禁用状态。有些高级的 Windows 恶意软件会在下载第二阶段之前检查主机是否属于某个域,所以您需要配置虚拟机,以将它添加到一个与您的企业名称相似的假域。
如果您还想从 Windows 主机收集 Sysmon 数据,也可以这样做。Elastic Endpoint 代理收集的大部分信息与 Sysmon 相同,因此,您需要定制 Sysmon 配置,以免数据重复。在您安装并配置 Sysmon 后,Elastic 代理便可使用 Windows 集成将这些事件流式传输到您的集群。
配置 Elastic 安全集群
在这个测试中,我在 Elastic Cloud 中运行的是 Elastic 7.10。在 Elastic Cloud 中设置集群,是创建和托管新集群来进行测试的最简单方法,可在几分钟内完成设置并开始运行,并提供所有白金级订阅功能。如果您想构建一个完全隔离的沙箱,则可以设置自己的本地部署 Elastic Stack。如果您要进行本地部署,请按照这些说明来安装 Elastic Stack,并且本博文中涉及的所有工具都可通过我们的基础级订阅免费获得。
在 Elastic Cloud 中创建集群后,您需要登录并配置 Elastic 安全。如果您想要观看这一设置过程的视频,请前往此处观看。
设置
第一步是以管理员身份登录 Kibana,并按照“Security > Administration > Endpoints”(安全 > 管理 > 终端)路径,导航至 “Endpoints”(终端)选项卡,并选择 Add Endpoint Security(添加 Endpoint Security)。
首先,您需要创建一个安全集成(security integration)。为您的集成取一个名字,并选择 Save integration(保存集成)。您可以创建多个集成和代理策略,但对于这个沙箱,最简单的做法是为所有沙箱系统使用单一策略。单一策略将适用于 Linux、Windows 和 MacOS 系统。
选择您的集成并选择 Enroll Agent(注册代理)。在出现的屏幕中,确认您想要注册 Fleet。这将让您完全通过 Kibana 来配置和控制您的代理。
如果您还想收集 Windows 事件日志,请选择 Add integration(添加集成),从预先创建的集成中选择 Windows,使用默认设置,然后选择 Save Integration(保存集成),以收集 Windows Security 事件、Sysmon 事件、PowerShell Scriptblock 日志,以及配置为转发的任何 Windows 事件日志。
至此,您应该已经配置好了一个默认策略,可用于从 Windows 系统部署 Endpoint Security、系统模块和 Windows 事件日志。
现在,您可以将代理部署到沙箱系统了。选择 Agents(代理)选项卡。如果这是您的第一个代理,那么您需要以管理员身份登录,然后选择这个按钮,即可在 Kibana 中自动创建 Fleet 用户。然后单击 Add Agent(添加代理),这会将您转到 Elastic 代理下载页面,并列出在虚拟机上安装这个代理需要运行的命令。下载并安装代理之后,它应会自动出现在“Agents”(代理)列表中。
在 Elastic 安全中,您需要配置 Elastic Endpoint 代理的集成策略(Integration Policy)。代理策略可为 Elastic 代理设置策略,而集成策略可为代理部署的 Endpoint Security 集成设置策略。Endpoint Security 集成策略可以在 Elastic 安全中的 Administration(管理)选项卡中进行设置。选择某个代理旁边的 Integration Policy(集成策略)可打开该视图。
这将会打开 Integrations Settings(集成设置)视图。在这个视图中,请确保 Malware Protections Enabled(启用恶意软件保护)处于开启状态,Protection Level(保护级别)设置为 Detect(检测),而不是 Prevent(阻止)。如果您开启了恶意软件保护,但将其置于检测模式,您会看到恶意软件检测告警,但 Elastic 安全不会采取任何行动来阻止恶意软件。
下一步是多花点时间在 Elastic 安全中设置检测引擎,并将所有包含的预构建 Elastic 检测规则都安装上。对于您的沙箱而言,这项操作虽然不是必须要做的,但很容易完成,而且经常会检测到恶意软件的操作 — 让分类更加容易。为此,只需在 Elastic 安全中选择 Detections(检测)选项卡,然后选择 Manage detection rules(管理检测规则)。在这里,单击 Load Elastic prebuilt rules and timeline templates(加载 Elastic 预构建规则和时间线模板)。第一次时,您必须以管理员身份进行此项操作。
在加载这些规则之后,您需要启用想开启的所有规则。您可以仔细查看这些规则,并只选择想要启用的规则,或者如果愿意,也可以全部开启。开启所有规则是最简单的操作,不会有什么坏处,即使某个特定规则没有数据也无妨。
收集网络流量(可选)
除了捕获恶意软件在主机上的活动,您还需要从外部主机收集它的网络活动。这样做的一些好处是,能够对网络事件做到知其然,知其所以然。有多种方法可以做到这一点,但我更喜欢用一个单独的虚拟机来嗅探同一个虚拟网络中的网络流量。
为此,您可以借助 Packetbeat 为您提供一个全面的数据总结,避免让您的堆栈被事件淹没,或者,您也可以使用 TShark 和 Filebeat 将捕获的完整数据包流式传输到 Elasticsearch。在 Packetbeat 配置中,您需要将其配置为收集大多数协议的请求和响应,并收集所有 TLS 通信的原始证书。恶意软件重用 TLS 证书的情况非常常见,它们可能成为恶意域名的宝库。
您的恶意软件分析沙箱现在已经设置就绪,下面可以进行测试了。在开始执行恶意软件之前,请记得在一个干净的状态下为虚拟机创建一个快照。
分析恶意软件
注意:请务必谨慎操作,不要在主机系统上打开真实的恶意软件。我们建议将可疑恶意软件保存在一个有密码保护的 zip 文件中,以防止意外打开。如果可能,请直接将恶意软件下载到沙箱系统。 |
在本次测试中,我引爆了 Emotet 恶意软件家族中的一员。这个特殊的恶意软件是一个恶意的 Office 文档,需要用户启用宏才能得以执行。如果您没有禁用终端策略中的恶意软件保护,这个恶意软件会立即被 Elastic 安全隔离,测试很快就会宣告结束。
在虚拟机中引爆 Emotet 恶意软件后,您可以回到 Kibana 中的 Elastic 安全,坐看好戏。在“Detections”(检测)选项卡中,您可能会看到主机上出现了一堆新的恶意软件活动告警。从下面的截图中可以看到,有多个初始恶意软件检测告警。如果 Endpoint Security 设置为“阻止”而不是“检测”,这个恶意软件在此时就会被停止和隔离,您就得不到所有额外数据了。
您可以选择某个告警旁边的 Analyze Event(分析事件)图标,打开 Analyzer 视图,就能够以树形图可视化所发生的一切。
在本例中,我决定选择看起来很奇怪的 PowerShell 命令,看看它如何适应执行链。Analyzer 视图是以父进程为基础,可在层次结构视图中交互式地查看软件的执行情况。连接这些进程的线条显示了父进程和子进程开始时间之间的时间差。如果您放大一个节点,就可看到与该流程关联的事件数。
为了查明 PowerShell 进程进行了哪些操作,我可以选择该节点并查看与这个进程关联的 27 个独立事件。然后,我可以选择各个类别,查看创建了哪些文件,建立了哪些网络连接,修改了哪些注册表项,以及这个进程将哪些库加载到了内存中。
有些恶意软件只会在重启后加载某些功能,所以最好是重启虚拟机并寻找更多告警,以查看是否有任何额外的检测结果。
由于 Elastic 中已经有了所有这些信息,所以我还可以在任何其他 Kibana 应用(如仪表板或 Discover)中查看和可视化这些事件。如果您正在使用 Packetbeat 来收集网络流量,则可以使用 Kibana 为各种网络协议提供的许多内置仪表板和可视化效果。
结论
在这篇博文中,我们介绍了如何使用 Elastic 快速设置自己的恶意软件分析沙箱。您只需几分钟,便可构建一个沙箱,用于安全地打开和观察文件,同时将所有事件流式传输到您的 Elastic Stack,以便进行安全的离线分析。在 Elastic InfoSec 团队中,我们将使用来自这些文件中的信息构建新的检测规则,并搜寻以前未发现的任何网络攻击。