无文件恶意软件攻击演示
摘要: 本文将进行无文件恶意软件攻击的演示。这些实验演示了尝试检测无文件恶意软件时遇到的问题,其中包括静态和动态的检测。
传统上,恶意软件攻击是以一种或另一种形式写入磁盘的文件,需要执行以执行其恶意范围。另一方面,无文件恶意软件仅用于驻留内存,理想情况下在执行后不留痕迹。恶意有效载荷动态地存在于RAM中,这意味着没有任何东西直接写入HD。
攻击者的所有这一切的目的是使感染后的取证变得困难。此外,这种形式的攻击使得防病毒签名几乎不可能触发检测。在某些特定情况下,与SamSam一样,甚至检索要分析的样本的唯一方法是捕获实时发生的攻击。这是处理无文件恶意软件时面临的最大挑战之一。
下面将介绍创建的无文件恶意软件攻击的演示。这些实验演示了尝试检测无文件恶意软件时遇到的问题。
首先展示严格使用静态签名检测到的恶意软件。将使用的文件是一个自定义二进制文件,并从头开始创建它并不实际执行恶意活动。这完全是良性的。
使用良性文件进行演示的原因是不希望任何其他更高级的AV组件启动并尝试检测此文件。只是展示当完全依赖静态签名时会发生什么。只是为这个特定的二进制文件创建了一个静态签名,这样当在任何运行Malwarebytes的计算机上执行或扫描时,它将被检测到。
在此测试之后,将通过相同的无文件方法测试合法的恶意软件,以说明必要的检测技术,以捕获威胁。
在开始之前,我将首先介绍静态检测的工作原理,以便弄清楚这些无文件方法究竟是什么。然后我将介绍一些更复杂的检测方法,这些方法在现代安全时代是检测新的和未知威胁的最重要组件。
静态检测
有几种方法可以静态检测恶意软件。现在最基本,最坦率,最无用的检测方法是对文件进行散列。在这种情况下,恶意软件的签名检测率为一对一。
为了使单个签名覆盖更多地,现代静态检测引擎提取二进制的关键区域并允许在二进制的部分内的特定操作码或字符串上进行签名。最好的开源示例是YARA规则。如果不熟悉YARA,请花一点时间查看它,因为它是恶意软件分析的宝贵工具。
以下是使用YARA进行检测的示例。示例规则是完全随机的,不会检测任何恶意软件。
与此类似的单个规则虽然在静态签名类别中,但可以检测数百或数千个具有类似特征的恶意软件。即使编写器修改了代码,良好的静态签名仍然可以使您保持动态并检测恶意软件。
但是,即使这些静态检测方法在某些情况下非常有效,但仍存在一些重大缺陷。第一个也是最明显的垮台是如果二进制代码和字符串的变化超出了签名作者所考虑的范围,则检测将不再触发。这是防病毒软件为其解决方案添加更多动态方法来检测复杂恶意软件的主要原因。这些包括行为签名,行为检测,启发式,自包含模拟器,机器学习和人工智能。
静态签名的第二次垮台就是将在第一个实验室中展示的内容。如果磁盘上没有二进制文件来运行静态签名,则静态签名无需检测。所以,简而言之,它失败了。这是无文件攻击成功的地方。
在一个完美的世界中,凭借无限的计算能力,从理论上能够始终从内存中提取每一位数据并运行静态签名来克服这种垮台。但是因为性能总是一个问题,所以这是不可能的,静态签名在这种情况下会失败。
实验1:仅静态旁路
首先,将开始手动运行测试检测文件,以便可以看到静态签名部分捕获文件。
如现所见,该文件被检测为Trojan.Vhioureas.POC。同样,这是因为正在使用这个简单程序创建的唯一字符串上创建了测试检测。如果程序成功,它将弹出一个计算器应用程序。
现在将使用初始框架加载相同的测试文件:无文件执行框架。
如图所见,vhioureasPOC文件未触发任何检测,并且Calc弹出。原因是因为初始框架完全从服务器流出恶意软件源并在内存中完全执行它。
可以从UpdateService.exe的命令参数中看到这一点,它是初始客户端加载器二进制文件。它从我在URL中的地址设置的服务器中提取了vhioureasPOC的源代码。无文件流传输方法避开了AV的静态签名引擎。
初始框架
在继续实验2之前,讨论了初始框架 以及它如何用于在内存中加载任何.NET可执行文件。将从服务器端开始。
初始服务器端有两个主要组件:有效负载生成器和实际的恶意软件服务器。有效负载生成器将输入作为C#源代码文件,并提供自定义URL令牌以便在客户端进行提取。
就在生成有效负载之后,运行恶意软件服务器组件时,就可以通过任何http请求以编码形式检索源代码。例如,如果导航到客户端计算机上的浏览器中生成的URL,将在浏览器窗口中看到一个长的base 64字符串。这是有效载荷。
现在转移到客户端。客户本身就是良性的。它不包含任何恶意代码。它只是一个命令行工具,它将URL作为输入。它获取该URL末尾的任何内容并尝试以文本形式读取它,特别是寻找C#源代码的正确格式。然后使用C#文本,并使用操作系统的本机编译器,仅在内存中执行运行时编译。然后它执行生成的代码。
这就是如何逃避静态检测引擎的方法。从来没有任何一点来自服务器的恶意软件代码存在于硬盘驱动器上。因此,没有静态引擎要扫描的文件。
作为旁注补充一点,一般来说,AV没有检测到编译语言的源代码。这里的原因是源代码永远不会在没有编译的情况下运行,因此永远不会造成伤害。这是一个有趣的观点,因为即使是网络签名,例如snort或任何IDS也不太可能接受这一点。恶意二进制文件从不流式传输,它只是流式传输的源代码。因此,即使在网络方面,它也可以避开所有静态签名。
战胜这种威胁
由于回避了静态引擎,前面提到的现代防病毒必须包含动态检测系统上的恶意活动而不是简单地检测恶意签名的技术。
为了测试这项技术是否存在并且正常运行,将再一次针对受害者计算机启动,只有这次它将使用有效负载实际上对受害者执行恶意功能。我们应该希望AV引擎能够根据其活动确定系统上的执行是恶意的。这正是将在下面测试的内容。
实验2:无文件勒索软件
在本实验中,将从一开始就加载勒索软件样本的源代码。基本上,上述步骤没有任何变化。只有现在,服务器端的有效负载生成指向勒索软件源代码文件而不是POC测试。
如图所见,此次触发了检测。虽然静态引擎没有检测到恶意软件,但引擎的应用程序行为部分介入并确定系统上存在恶意活动,其行为类似于勒索软件,并且它触发了检测。这就是为什么可以看到它被检测为Ransom.Agent.Generic。
静态与动态
现在已经创建了这些演示来展示无文件恶意软件可能导致的一些问题-主要是他们能够轻松绕过静态引擎。这并不意味着就认为静态签名在恶意软件检测中没有它们的位置。在无文件攻击方面,这只是表现出他们的弱点。
静态签名可帮助研究人员正确分类恶意软件系列并提供更详细的检测。这通常是因为,在签名背后,有一位恶意软件分析师花时间研究和了解恶意软件的特征。见过许多情况,好的签名已经发现机器学习引擎无法识别的恶意软件。但是,当静态检测失败时,动态检测必须接管。这种共生是关键。
静态和动态检测都是必要的,两者的良好组合仍然非常有价值。通常情况下,当反恶意软件供应商在其保留节目中使用除下一代技术之外的签名时,这表明屏幕另一侧有活跃的恶意软件分析师。此外,供应商并没有完全依靠算法和技术来对抗恶意软件。技术还不够先进,无法完全掌控,与此同时,人与技术,恶意软件分析师和机器的混合仍然是最好的选择。
(作者:区块链安全档案,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)
评论(0)
Oh! no
您是否确认要删除该条评论吗?