标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-3173]   作者: 小螺号 发表于: [2022-09-08]

本文共 [174] 位读者顶过

最近,越来越多的公司遭受无文件恶意软件的困扰。这种类型的网络攻击已经变得如此普遍,因为它对传统的反恶意软件解决方案不可见。无文件恶意软件通过合法的 Windows 进程运行,因此此类攻击不会留下大多数网络安全系统可以发现的痕迹。本文介绍了无文件恶意软件的细节,并提供了有效检测和防范此类攻击的技巧。 [出自:jiwo.org]

无文件恶意软件在黑客中的流行程度达到了顶峰。根据2017 年 Verizon 数据泄露调查报告,2017 年对公司的所有攻击中只有 51% 是使用传统恶意软件进行的。这意味着黑客使用的攻击中有 49% 涉及其他入侵方法,包括可轻松绕过标准安全的无文件恶意软件解决方案。

Ponemon Institute 进行的另一项研究(对 665 名 IT 安全专业人员进行了调查)得出的结论是,预计 2018 年无恶意软件攻击将显着增加,这主要是因为无文件恶意软件的检测难度是基于文件的恶意软件的十倍。

2017 年 2 月发生了有史以来规模最大的无文件恶意软件攻击之一。在这次攻击中,与 GCMAN 和 Carbanak 组织有关的黑客入侵了全球 40 个国家的 140 多家私人银行、政府组织和电信公司。

无文件攻击的威胁非常明显,因此让我们仔细看看什么是无文件恶意软件以及如何防范它。

什么是无文件恶意软件?

术语无文件恶意软件是指在文件系统中没有主体的恶意代码。换句话说,无文件恶意软件不需要任何文件来执行。

Terminate-Stay-Resident (TSR) 病毒是第一个无文件恶意软件示例。虽然 TSR 病毒有一个它们开始的主体,但是一旦代码加载到内存中,可执行文件就可以被删除。然而,纯粹的无文件恶意软件可以在磁盘上没有任何主体的情况下启动,并且可以在随机存取存储器 (RAM) 中运行预定的时间。

此外,无文件恶意软件也是一种病毒,它利用一些远程代码执行(RCE)漏洞使合法进程执行一小段shellcode。然后,此 shellcode 将恶意软件的主要部分(称为有效负载)下载到内存并运行它。因此恶意软件代码成为合法进程的一部分并被执行。

最初,无文件恶意软件 需要一个文件并仅在 RAM 中运行。目前,该术语也适用于任何在磁盘上没有以本机可执行文件形式存在的恶意软件。因此,基于脚本的恶意软件(JavaScriptVBScriptShPowerShell)也被视为无文件恶意软件。

无文件恶意软件的主要类型

根据可执行环境的不同,无文件恶意软件主要有两种类型:

  • 在 RAM 中运行的无文件恶意软件
  • 利用软件脚本漏洞的无文件恶意软件

基于 RAM 的恶意软件

严格在 RAM 中执行的恶意软件的主要优势在于它是隐秘的。由于防病毒软件执行的大多数检查都是在进程启动时完成的(验证数字签名、搜索病毒签名),因此已经运行的进程被认为是不可疑的。因此,如果恶意软件没有在文件系统上创建任何内容,它就不会触发防病毒软件可以响应的任何事件。

此外,大多数防病毒数据库都包含病毒文件的签名,这些文件基本上充当了如何治愈恶意软件的秘诀。因此,防病毒软件会根据磁盘上找到的文件来决定如何操作。但是,即使运行时保护检测到无文件恶意软件,也无法使用任何东西来对付它。只有无文件恶意软件的间接证据,例如行为可疑的进程。然而,终止 RAM 中的每个可疑进程并不是一种选择,因为这可能会威胁到宝贵的未保存用户数据。

无文件恶意软件的主要缺点是它高度依赖于其运行的进程。为了使有效载荷运行,必须将恶意软件编译为与位置无关的代码,因为有效载荷的基地址是随机的。有效负载需要检测在其运行的进程中哪些 DLL 可用。为了保持低调,这种类型的恶意软件必须仅依赖已加载的 DLL,因为防病毒软件通常会监视正在加载的新模块。因此,恶意软件必须拥有自己的关键功能实现,以防某些 API 由于未加载 DLL 而无法访问。

如果进程过早终止:

  • Shellcode 将无法下载其有效载荷
  • 即使恶意软件已经下载了它的有效载荷,有效载荷也可能在达到其目标之前被终止
  • 一个进程可能会在它试图在系统中持久存在之前被终止

过去,互联网连接速度是此类恶意软件的主要限制。在用户关闭浏览器之前,攻击者必须至少下载部分恶意软件并将其保存到磁盘中。因此,无文件方法并没有太多用处,而是使用了基于文件的方法:shellcode 下载了加载程序或*dropper------*一个本身不会造成任何损害的小型可执行文件。加载程序的目的是秘密地从硬编码的 URL 中获取有效负载,然后执行它。

现代软件运行时间足以让无文件攻击成功,并且通常在软件关闭后进程会继续在后台运行。因此,基于 RAM 的无文件恶意软件有更好的生存机会。

基于脚本的恶意软件

使用脚本作为攻击媒介是感染计算机的另一种已知方法。最流行的基于脚本的恶意软件类型已被开发用于利用 Microsoft Office 和 Windows PowerShell 中的漏洞。

针对 Microsoft Office 的无文件恶意软件

过去,Microsoft Office 文档中的 VBScript 主要用于下载 loader 或 payload。VBScript 帮助攻击者至少执行了一些会触发下载的合法操作系统命令。然而,由于难以与操作系统实体(例如进程、线程、服务、模块、注册表等)一起工作,VBScript 作为恶意软件主体的基础非常有限。

然而,防病毒软件在防范此类攻击方面无能为力,因为实施此类保护需要与未记录的 Microsoft Office 脚本引擎深度集成。因此,常见的保护方法是将已知受感染文档的哈希值添加到病毒数据库中,并阻止它们被下载或打开。有时,防病毒软件会尝试分析文档的内容以查找已知的 VBScript 字节码序列。然而,恶意软件很快就通过使用 VBScript 混淆来克服这个问题。

这场战斗失败了,Microsoft Office 提供的唯一解决方案是默认禁用脚本并在 Office 文档中使用任何VBScript 代码时显示活动内容警告。这一措施减少了感染的数量,尽管它并没有将这种攻击的有效性降低到零。

针对 Windows PowerShell 的无文件恶意软件

然后攻击向量转向了一个新目标:Windows PowerShell。

Windows PowerShell 是专为系统管理员设计的 Windows 命令行 shell。它包括一个交互式提示和一个可以独立使用或组合使用的脚本环境。

此外,Windows PowerShell 提供程序使你能够像访问文件系统一样轻松地访问其他数据存储,例如注册表和数字签名证书存储。

PowerShell 不是唯一可用于操作操作系统实体的脚本环境。基本上,任何解释型语言(如 Python 或 Ruby)都可以用于此目的。但是,PowerShell 有一个很大的优势:它预装在 Windows 上,因此无需先安装解释器。

因此,PowerShell 是无文件恶意软件的理想平台,因为:

  • 它使用脚本
  • 它可以访问关键的操作系统对象
  • 它适用于所有现代 Windows 版本
  • 磁盘上没有本机可执行文件

最后,不能简单地禁用 PowerShell(就像在 Office 文档中对 VBScript 所做的那样),因为许多系统管理工具都依赖它。

因此,现代恶意软件可以完全实现为 PowerShell 脚本,无需下载本机二进制文件,除非需要某些特定的东西。

再次,防病毒软件在分析脚本执行方面存在问题。防病毒软件旨在分析本机代码,即 x86 汇编代码,并且缺乏分析 PowerShell 脚本的工具。此外,恶意软件已经开始使用混淆来隐藏 PowerShell 脚本的源代码。因此,没有简单的方法来区分脚本是合法的还是恶意软件。防病毒软件也无法确定 PowerShell 进程是由恶意软件创建还是出于合法系统需求。更糟糕的是,PowerShell 引擎是基于 .NET 构建的。这意味着 PowerShell 解释器在 .NET 平台上作为 JIT 代码运行,这使得防病毒软件对 PowerShell 进程操作的分析更加复杂。最后,PowerShell 脚本依赖外部进程来完成工作的特定部分。

无文件恶意软件如何工作?

以下是网络攻击者如何使用无文件恶意软件感染计算机的典型场景:

  1. 用户访问受感染的网站或在浏览器中打开受感染的电子邮件。
  2. 漏洞利用工具包扫描计算机以查找 Java 或 Flash 插件或涉及 PowerShell 进程的软件脚本中的未修补漏洞。
  3. 该漏洞利用工具包利用漏洞将无文件恶意软件插入 Windows PowerShell 或 Windows 内置的其他系统管理工具。
  4. 成功安装后,无文件恶意软件在可用的 DLL 中运行其有效负载。
  5. 恶意软件在内存中的合法进程内开始其恶意活动。
  6. 攻击成功!

如何检测和防范无文件恶意软件

无文件恶意软件带来的挑战是找到一种新方法来处理系统中的可执行实体。传统方法是沙盒、执行仿真和启发式。

沙盒

每当 PowerShell 进程运行时,都必须对其进行沙盒化,以便其所有 API 调用都被沙盒层包裹,并且所有潜在危险的调用都得到彻底监控和阻止,以防检测到威胁。

但由于 PowerShell 经常执行外部进程,沙盒只能帮助检测脚本通过 cmdlet 执行的可疑操作。对于基于 RAM 的恶意软件,沙盒可以提供帮助,但前提是要知道沙盒的内容。如果潜在的攻击向量已知并且相应的进程被沙盒化,这可能是一个不错的解决方案。否则,如果恶意软件是通过电子邮件客户端中的远程代码执行 (RCE) 漏洞分发的,则对浏览器进行沙盒处理将无济于事。

执行仿真

由于 PowerShell 成为开源软件,现在可以为 PowerShell 脚本创建模拟执行的解释器。这样的引擎可用于在允许脚本在实际 PowerShell 中运行之前对其进行验证。仿真引擎也可用于处理脚本混淆并找到可用于将脚本识别为恶意的魔术字符串常量。但是,这不会帮助你了解执行外部进程后会发生什么。

在基于 RAM 的恶意软件的情况下,执行仿真是有问题的。虽然不知道线程将在什么时候开始执行 shell 代码,但也不知道应该在什么时候开始执行仿真。

启发式

可应用于 PowerShell 脚本的主要启发式方法是监视新 PowerShell 脚本的出现及其来源。还需要监视哪些进程正在启动 PowerShell 进程,因为浏览器或 Word 突然运行 PowerShell 是非常可疑的。可以进行限制以限制允许启动 PowerShell 的进程。然而,试探法无法就脚本是否是恶意的做出准确的结论。这只是一个 B 计划,用于找出问题所在。

对于基于 RAM 的恶意软件,Windows 10 中的 EMET 和 Windows Defender Exploit Guard 提供了一组反利用技术。这些技术包括 Control Flow Guard、CallerCheck 和 StackPivot。但这些还不够,例如,现代浏览器使用 JIT 代码编译器,在内存中生成可执行代码片段。因此,有一组内存页面可供写入和执行,并且与任何模块无关。因此,Exploit Guard 技术不能应用于此类代码,恶意软件可以成功利用这一事实。

银弹

如你所见,无文件恶意软件保护的标准方法有很多缺点。对于基于 RAM 和基于脚本的恶意软件检测,最有效的解决方案是所谓的下一代防病毒软件,它可以分析整个系统的行为,而不是单独的文件和进程。这个想法是,防病毒软件应该能够分解系统事件的时间线,以查看是否存在表现出类似恶意软件行为的行为。具有挑战性的部分是找到一种方法来检测事件流中的恶意软件行为。这很困难,因为在各个恶意软件操作之间发生了多个合法操作,并且这些操作来自跨操作系统运行的各种进程。

结论

无文件恶意软件是一个日益严重的威胁,但仍然没有多少方法可以防御它。基于 RAM 和基于脚本的恶意软件都极有可能被标准防病毒软件忽视。我们已经讨论了无文件恶意软件检测和保护的可能方法

评论

暂无
发表评论
 返回顶部 
热度(174)
 关注微信