现如今网络安全俨然成为了一个重要的话题,而做好网络防护是每一位厂商、站长甚至是个人的职责。本篇文章为各位总结在Windows环境下的Payloads

无文件恶意软件

对于任何分析师来说,寻找无文件威胁都是一项乏味且劳动密集型的任务。这通常非常耗时,并且需要收集大量数据。最重要的是,在处理这些几乎看不见的威胁时,传统的工具、方法和防御似乎不太有效。威胁参与者经常使用直接从内存中运行的攻击技术或使用系统中预装的合法工具或服务来实现其目标(Trend Micro,2017 年)。它是定向攻击和高级持续威胁 (APT) 中的一种流行技术,现在它已被传统恶意软件采用,例如木马、勒索软件,甚至最近出现的威胁——加密货币矿工。在一些事件中,搜索驻留在硬盘驱动器中的恶意文件似乎是不够的。这项研究探讨了针对 Windows 操作系统的无文件攻击的不同变体,以及什么样的工件或工具可以为取证调查提供线索。

被描述为一种不需要将文件写入磁盘的攻击,这在一定程度上是正确的,因为我们有一些恶意软件会留下一些东西以将恶意代码执行到内存中,然后将其自身删除以不留下任何痕迹。它的到来可以通过不同的方法,利用,蛮力,USB,通常是带有附件的网络钓鱼电子邮件。

要了解传统恶意软件,这通常是在将二进制文件或文件下载到磁盘然后使用传统恶意软件执行时完成,主机上需要此文件才能执行其有效负载。您可以在下面看到传统恶意软件的流程。

传统恶意软件

关于Windows环境下Payloads总结插图
SANS 图像

无文件恶意软件

无文件恶意软件的入口点就像传统的恶意软件一样,前一个可以做的任何事情,无文件恶意软件也可以。与传统的恶意软件不同,它不需要将恶意代码存储到文件中并将其保存到磁盘,它可以利用白名单工具直接从内存中利用漏洞或启动脚本(我稍后会提到),下图解释了无文件链恶意软件攻击。

无文件恶意软件

关于Windows环境下Payloads总结插图1

开发:

通过 Exploit 到达的无文件攻击可以称为“完全无文件”。RCE(远程代码执行)允许攻击者将 shellcode 直接加载到内存中,而无需将任何文件写入磁盘。

恶意网站/垃圾邮件/网络钓鱼电子邮件

通过恶意网站或网络钓鱼电子邮件到达使用基于脚本的程序,如宏、PowerShell、VBScript、JavaScript、HTA 等,将恶意代码直接运行到内存中。通常,初始脚本充当连接到恶意主机并下载有效负载的下载器。一旦脚本在内存中运行并在执行时删除文档,就会转移到无文件。

持久性

持久性将取决于攻击者的最终目标。无文件恶意软件可能根本不会持久存在。由于恶意代码已经在内存中运行,它已经可以启动其有效载荷。如果没有任何持久性,简单的重新启动将清除内存中的代码。WMI 或计划任务是攻击者使用的常见无文件持久性方法。

在攻击中使用无文件恶意软件的一些原因

  • 隐秘:无文件恶意软件使用合法工具来代理执行有效负载,有时很难阻止这些合法工具,因为它们经常在环境中使用
  • 土生土长:默认安装了合法工具,你还需要什么理由。
  • 受信任:这些工具是受信任的,有时在执行恶意软件时会被忽视

内存注入

内存注入技术涉及将恶意代码隐藏在合法进程的内存中。当对 Windows 活动至关重要的进程正在运行时,此恶意软件会将自身分发并重新注入这些进程中,这使得检测变得更加棘手,因为这些进程不会触发传统的红旗或白名单。

无文件恶意软件仅存在于计算机随机存取存储器 (RAM) 中,这意味着不会直接将任何内容写入硬盘驱动器。这使得检测变得更加困难,因为没有存储文件供防御性安全软件扫描,我将研究一些示例,了解无文件恶意软件如何执行并保持在内存中,微软的研究将它们分为 3 种类型:

类型 I:未执行文件活动

完全无文件的恶意软件可以被认为是永远不需要在磁盘上写入文件的恶意软件。这种恶意软件如何首先感染机器?一个例子是目标机器接收到利用 EternalBlue 漏洞的恶意网络数据包。该漏洞允许安装 DoublePulsar 后门,该后门最终仅驻留在内核内存中。在这种情况下,没有文件,也没有任何数据写入文件。

受感染的设备还可能隐藏在设备固件(如 BIOS)、USB 外围设备(如 BadUSB 攻击)或网卡固件中的恶意代码。所有这些示例都不需要磁盘上的文件即可运行,理论上只能存在于内存中。恶意代码将在重新启动、磁盘重新格式化和操作系统重新安装后继续存在。

这种类型的 cab 感染特别难以检测,因为大多数防病毒产品都没有检查固件的能力。如果产品确实具有检查和检测恶意固件的能力,这些仍然是与此级别威胁修复相关的重大挑战。这种类型的无文件恶意软件需要高水平的复杂性并且通常很危险,这种类型的威胁并不常见,对于大多数攻击来说并不实用。

类型 II:间接文件活动

恶意软件还有其他方法可以在机器上实现无文件存在,而无需大量的工程工作。这种类型的无文件恶意软件不会直接在文件系统上写入文件,但它们最终可以间接使用文件。例如,Poshpy 后门攻击者在 WMI 存储库中安装了一个恶意 PowerShell 命令,并配置了一个 WMI 过滤器以定期运行该命令。

可以通过命令行执行此类安装,而无需后门已在文件中。该恶意软件可以在不接触文件系统的情况下安装和理论上运行。但是,WMI 存储库存储在由 CIM 对象管理器管理的中央存储区域中的物理文件上,并且通常包含合法数据。尽管感染链在技术上确实使用了物理文件,但它被认为是无文件攻击,因为 WMI 存储库是一个无法检测和删除的多用途数据容器。

类型 III:操作所需的文件

一些恶意软件可以有一种无文件持久性,但不能不使用文件进行操作。这种情况的一个例子是 Kotver,它在注册表中为随机文件扩展名创建一个 shell 开放动词处理程序。打开具有此类扩展名的文件将导致通过合法工具 mshta.exe 执行脚本

关于Windows环境下Payloads总结插图2

当调用 open 动词时,会启动注册表中的相关命令,从而执行一个小脚本。该脚本从另一个注册表项中读取数据并执行它,进而加载最终的有效负载。但是,要首先触发开放动词,Kotver 必须删除与该动词目标具有相同扩展名的文件(在上面的示例中,扩展名是 .bbf5590fd)。它还必须设置一个配置为在机器启动时打开此类文件的自动运行密钥。

Kotver 被认为是无文件威胁,因为文件系统没有实际用途。具有随机扩展名的文件包含无法用于验证威胁存在的垃圾数据。如果存在恶意内容,存储注册表的文件是无法检测和删除的容器。

以下是一些可以被视为无文件恶意软件的程序和示例。

可以实现无文件恶意软件的程序

PowerShell.exe

PowerShell 是自 Windows 7 以来内置于 Windows 中的强大语言,它提供对 COM 和 WMI 的访问,它还提供托管 API,PowerShell 运行时可以通过该 API 嵌入到其他应用程序中。使用 PowerShell 的无文件技术示例如下:

关于Windows环境下Payloads总结插图3
关于Windows环境下Payloads总结插图4

工作站中没有检测和文件,因为这是直接从控制台执行的,文件不需要在磁盘上运行。

WMIC

WMIC 为 Windows Management Instrumentation (WMI) 提供命令行界面。WMIC 与现有的 shell 和实用程序命令兼容。WMI 能够从远程位置代理执行 XSL 文件,甚至可以自己启动进程让我们来看一些示例。

关于Windows环境下Payloads总结插图5

脚本文件

Windows Scripting Host 它提供了与批处理文件相当的脚本能力,但具有更广泛的支持功能。它支持多种语言,例如 VBScript (VBE, VBS) 和 Jscript (JS, JSE),它也可以与独立于语言的文件扩展名 WHS 一起使用。这样做的好处是它允许多个脚本(“作业”)以及单个文件中的脚本语言组合。

在以下示例中,将在同一个文件中使用 VBScript、Jscript 和 Python 并执行,即使我们组合了 3 种不同的脚本语言:

要使 python 或任何其他语言正常工作,需要安装这些语言并将其添加到系统的 PATH 并注册为 WSH 的脚本替代方案,一个很好的目标很可能是示例中的开发人员工作站,我们在磁盘上有一个文件,所以考虑到这一点,因为脚本不是恶意的,只有它调用的文件可以是 PowerShell、Mshta、MSbuild,它们可以在内存中执行我们的有效负载

文件:

关于Windows环境下Payloads总结插图6

VB:

关于Windows环境下Payloads总结插图7

JS

关于Windows环境下Payloads总结插图8

Python弹出计算

  • 脚本文件

与 WSCript 相同,不同之处在于它确实为您提供了一个 CONSOLE 窗口

  • 脚本运行程序

我找不到关于什么是 Scriptrunner 的太多信息,但它似乎是一个允许运行多个脚本的工具,而不是构建一个运行多个东西的脚本,它有助于通过一行来实现这一切。这允许通过 SMB 执行代理

例如,在远程服务器上执行时似乎有警告

关于Windows环境下Payloads总结插图9

但是我们会忽略它并执行

Regsvr32.exe

是一个命令行实用程序,用于在操作系统注册表中注册和注销 DLL 和 ActiveX 控件。这是一个微软签名的二进制文件,允许代理执行(这是调用远程文件的能力)。这需要提升的权限

Mshta.exe

MSHTA 是执行 Microsoft HTML 应用程序 (HTA) 文件的实用程序。HTA 是使用与 Internet Explorer 相同的模型和技术执行的独立应用程序,但在浏览器之外,它可以运行 JScript 和 VBScript 等脚本语言。

要求:

关于Windows环境下Payloads总结插图10

执行:

关于Windows环境下Payloads总结插图11

让我们不要停止这些,我们熟悉通过 Microsoft 签名二进制文件执行,但我们也谈到了利用漏洞,因为这些不涉及磁盘,因为恶意数据包被发送到目标机器并在必要时注入我们的 shellcode,一个很好的例子在最近利用 RDP 协议的 BlueKeep 方法中,它是主要影响 Windows 7 机器的主要漏洞,其他漏洞利用可能是 EternalBlue。

关于Windows环境下Payloads总结插图12

完全不需要文件,并且执行是远程完成的。

C#

它可以访问开发人员经常使用并且可以构建的功能基础架构。一些 C2 有一个很棒的功能,允许我们在内存中执行 C# 二进制文件,而无需将这些二进制文件放在磁盘上。这是一种很好的后开发方法,可以留在记忆中。

例子:

关于Windows环境下Payloads总结插图13

我执行了安全带工具,向我展示了用户与之交互的最新文件,如果我们检查当前路径,则没有二进制文件拖放到磁盘。

关于Windows环境下Payloads总结插图14
关于Windows环境下Payloads总结插图15

在与我的老师交谈后,我还想到用户帐户可能允许我们留在内存中而不用将磁盘接触到目标机器上,一些示例可能是 PSRemote、RDP、SSH 和/或配置不佳

远程:

PowerShell 中用于获取会话以在远程主机上执行命令的功能。

关于Windows环境下Payloads总结插图16

设计方案:

远程桌面协议允许用户远程获得完全交互式的 GUI。

关于Windows环境下Payloads总结插图17

配置不佳:

当软件安装时的安全实施很差时,一个很好的规则是只允许特定用户访问这些功能,或者给予软件足够的权限,以便只在一定的权限级别上执行,并有可能避免管理员或系统访问。在这个演示中,如果有人留下紧急后门来访问系统,以防他们被锁定怎么办?好吧,这发生了:

关于Windows环境下Payloads总结插图18

PHP 后门(紧急访问)

使用的这种技术没有留下任何文件(攻击者很好)这是一个合法的“紧急”访问,开发人员为了“以防万一”而留下了。

有了这些演示和理解,我们就有了如何实现“无文件恶意软件”以在我们的目标机器上执行并保持隐藏的技术和方法。一旦已经在网络中保持隐藏并实现留在内存中将已经由操作员决定,例如“进程注入”是一种很好用的技术,可以在合法的 Windows 进程内保持隐藏和内存中。

最后,我们还有硬件作为无文件恶意软件的一种方法,一个很好的演示就是臭名昭著的 Rubber Ducky 和恶意 USB直接在命令或脚本解释器上执行,例如 CMD 或 PowerShell。