原标题:恶意软件之反病毒产品绕过技术

最重要的资源是它的源 代码 。这是包括检测 恶意软件 在内的所有一切的关键。为了打败反 病毒 软件, 恶意软件 开发者必须防止 恶意软件 被获取。没有 恶意软件 代码 ,就没有 特征码 。没有 特征码 ,也就不会被检测到。 恶意软件 开发者知道,为了防止反 病毒 工程师获取 恶意软件 代码 , 恶意软件 必须经得起分析和 逆向工程 ,才不会暴露 代码 。

为了进行分析和,反工程师主要使用以下技术和工具:

恶意软件 分析工具

静态分析工具

动态分析工具

逆向工程 工具

反 汇编 器

恶意软件 测试环境

恶意软件 沙盒

这些是反工程师工作所需的主要资源。假如这些资源都不起作用,分析和工作将会非常困难。为了逃避分析,必须使这些资源失效。为了更好理解如何完成这个过程,根据在机器中的状态将上述工具进行分组如下:

恶意软件 静止状态时使用的工具

静态分析工具

反 汇编 器

恶意软件 运行状态时使用的工具

动态分析工具

恶意软件 沙盒

但是规避分析只是反产品绕过技术的一部分,还需要规避检测。反工程师使用这些工具进行分析,而检测则是由基于的反扫描器完成的。这是真正需要对付的两件事:反工程师和反扫描器。反扫描器实际上是反工程师的数字化化身。反工程师将所掌握的关于的信息,以配置文件的形式传递给反扫描器。两者相似的地方在于它们都工作在静止和运行时。反工程师和反扫描器均根据的状态使用不同的工具集——静态扫描工具和动态扫描工具。只有两种状态:静止和运行。对于想规避反检测的,它必须在任何一种状态下都能进行自我保护。

1、保护静止状态的恶意软件

静止状态的 恶意软件 需要对抗如下几方面:

恶意软件 分析

静态分析工具

逆向工程 工具

反 汇编 器

反 病毒 扫描技术

通常认为在静止状态是没有防御的。这是最薄弱的状态。这种状态下,是完全暴露的,反工程师会对其进行切片分析并提交给反扫描器。

被捕获后也会面临类似情况。反工程师使用工具收集相关信息,并将信息提交给反扫描器,反扫描器利用该信息进行相似实例的检测。但是如果被防护起来,信息的提取即使仍然能够实现,也会变得异常困难。为了在静止状态下保护,开发者引入了自我防护机制。

既然最重要的部分是其,防止对的访问可使静态分析工具和静态扫描不起作用。这是通过混淆来完成的。最通用的混淆技术包括:

入口点混淆

基本的 恶意软件 加密

但对于的工具呢?开发者知道者最终能够找出方法来破解混淆。但是如果者没办法反或反编译静止状态的,他们也就没有任何来完成工作。因此开发者利用防技术来保护静止状态的:

防反 汇编 器

防反编译器

入口点混淆

没有入口点,也就没办法获取 恶意软件 的 代码 。扫描过程通常利用入口点来 ,因此,将入口点隐藏起来非常有效,既可防静态分析也防静态扫描。隐藏 恶意软件 的入口点一般采用入口点混淆(EPO),文件感染类 恶意软件 经常使用EPO技术。当一个被感染的宿主文件执行时, 恶意软件 会先于原宿主文件执行。这是因为在感染过程中, 恶意软件 修改了宿主文件的入口点来控制最开始的执行流。在 恶意软件 完成执行后,才开始执行原宿主文件。有这种文件感染行为的 恶意软件 很容易被反 病毒 工程师 定位 。但是EPO使 定位 变得不同。入口点并不直接指向 恶意软件 的 代码 。图1展现了一种使用 代码 补丁的EPO技术。与直接将控制流信息立即传给 恶意软件 不同,这种技术先执行一部分宿主程序,在执行的过程中有一个补丁指令将控制流信息传递给 恶意软件 。一旦 恶意软件 完成执行,它将使宿主程序结束执行。这在欺骗反 病毒 扫描器方面非常有效,因为反 病毒 扫描器会认为一开始执行的宿主程序的指令是良性的而非 恶意软件 代码 。

图1 通过代码补丁来进行入口点混淆

恶意软件加密

另外一种有效的混淆技术是加密技术,如图2所示。和EPO不一样的是,通过加密保护自己。加密方面的优点衍生出新的加密类型:多态和变形。这类加密的创造了一个新记录,它不但能够逃避分析,同时也能逃避静态检测。加密已成为产业界的一个新的流行词。这是技术发展中最重要的进步之一,因为它在整体的威胁领域产生了很有意义的影响。

图2 基本的恶意软件加密

为了更好地理解 恶意软件 加密和这种技术是如何演进的,下面以文件感染为例来进行讨论。加密的 恶意软件 有三个主要的组件:加密/解密引擎、加密的 恶意软件 和解密密钥。当 恶意软件 被执行的时候,加密/解密引擎使用解密密钥解密已加密的 恶意软件 代码 ,然后将控制流跳转到内存中解密后的 恶意软件 代码 并执行。在感染的时候,解密后的 恶意软件 代码 通过一个新的密钥重新加密,然后将其自身附加到新的要感染的宿主程序中。密钥可以是宿主程序中特定位置的一系列字节。位置是固定的,但是对不同的宿主程序,获得的字节会有所不同。因此在每次感染的时候密钥是不同的,附加到不同宿主程序的 恶意软件 代码 也不一样。

的开发者引入了一种新的技术——变异引擎。变异引擎是的一部分,它能在不改变一个应用程序功能的情况下改变该程序的。变异引擎使得更改解密引擎部分的变为可能,这样上述提到的三个组件对于每次感染都是不同的。这种新的加密技术叫做多态,如图3所示。韦氏词典将“多态”定义为“存在的或假设的不同形式的质量或状态”,非常形象地描述了多态。

图3 多态恶意软件的感染在磁盘中不一样,但在内存中一样,因为所有解密后的感染代码都一样

但是多态并不是没有弱点的。它仍然需要在内存中解密已加密的,而且每次解密完后的都是不变的,回到了最原始的形式。因此可以创建在内存中检测或通过反模拟技术对其进行检测。多态技术在抵御静态扫描方面是非常有效的,但是在动态扫描方面就没有什么优势。

为了对抗可检测加密和多态的反技术,开发者引入了一种新的加密软件的形式,称为变形,如图4所示。同样使用变异引擎,开发者以不同的方式处理这个问题。和使用加密的三个组件不同,他们完全改变了这种既定的模式。他们意识到,使用变形引擎可以变异整个,从而避免基本的加密方法的固有弱点。使用变形,每次感染都是完全不同的,不管在内存中还是在磁盘上。变形同样有其缺点,为了产生变异体,它需要分析自己的来重组成新的形式。如果它能这么做,那么工程师也能这么做。

图4 变形恶意软件在磁盘上和内存中的感染差异

变形的能力是非常强大的,它不止用在文件感染中也用在其他类型的中。

防逆向工程

对于反工程师,他需要找出如何攻破自我防护的的方法。混淆,不管有多精妙,都能通过工程来破解。唯一需要的就是时间与努力。开发者为了降低被发现的风险,引入了防工程技术来延缓工程或使工程根本无法进行。最通用的保护静止状态的的防工程技术是防反编译技术和防反技术。这能够防止者查看的源。这种技术的缺点是其只对支持的反编译器和反器有效。这是因为,和其他软件产品一样,反编译器和反器都有自己专有的和实现。例如,某个采用的防反器技术可以对抗Win32DASM反器工具,但无法对抗IDA反器工具。但是如果该支持的反编译器或反器是使用范围最广的,那么的防反编译器或防反器就完成了它的工作。但是,工程同样能将该种技术攻破,唯一的敌人也是时间和努力。消耗的时间越多,对就越有利。这也是开发者的目的。

2、保护运行中的恶意软件

运行中的 恶意软件 需要对付如下几点:

恶意软件 分析工具

动态分析工具

逆向 工程工具

恶意软件 测试环境

恶意软件 沙盒

反 病毒 扫描技术

当使用静态分析无法从中抽取信息时,就只能使用另一种技术了:动态分析。动态分析是使用动态分析工具和沙盒监控技术,将放在独立的沙盒中运行,以获取其信息的过程。如果不运行,那么将抽取不到任何信息,分析的整个过程将会失败。然而必须要在运行时才能完成其工作。为了击败动态分析,必须足够智能以发现它是在目标系统上运行,还是在测试环境中运行。

反沙盒技术

因为虚拟机能够提供许多便利,大多数测试环境,例如沙盒,通常就是一个虚拟机。因此如果想知道它是否运行在一个沙盒中,只需要知道它是否运行在一个虚拟化环境中。这导致出现了目前流行的反沙盒技术:反虚拟化技术。如果检测到它自己在一个虚拟环境中运行,它将退出,什么也不做。如图5所示。

图5 反沙盒技术

由于越来越多的组织流行采用虚拟化环境, 恶意软件 需要使用其他方法来判断自己运行在虚拟沙盒中还是在虚拟化环境中。如果判断自己运行在虚拟化环境中,就可以继续执行。

使用裸机环境可以解决反虚拟化技术,但与虚拟环境相比起来,它的开销略大,恢复时间也更慢。但它本身也不是完美的,因为反研究人员仍然需要运行动态工具和(或)专门的沙盒技术来从中收集信息。这给了开发者机会。为了击败裸机环境,开发者将精力集中在另外一个动态分析的关键要素上:在运行时收集其信息的工具。与其他软件一样,这些工具会在系统中留下它们是否存在的踪迹。开发者主动分析这些蛛丝马迹,并在制作过程中,在中增加通过系统状态检测这些工具的功能。如果检测到这些工具的存在,它将退出,什么也不做。

带虚拟化感知的的流行使人们坚信有一个虚拟系统实际上比非虚拟化的系统更安全。另外,一些系统通过模拟在执行前查找的一些工具的特征来免疫感染。

正如其他的技术一样,反沙盒同样可以被击败。这可以通过新的虚拟化技术、新的隐蔽动态分析工具或是新的沙盒技术实现。但需要重申的是开发者将简单地熟悉这些新技术,并提升其中的反沙盒特性。该循环如此往复,它成为了一个竞争。开发者会逐渐厌倦这些。因此他们决定改变,而不是玩沙盒竞争的游戏。

主要是用来执行并完成它的工作的,但是它必须足够智能化,以判断自己运行在目标系统还是测试环境中。这是开发者最终要达到的目标。他们需要一个新的方法来解决这个问题。假如他们成功了,就能够抵抗动态分析——至少目前来说是这样。

这种特性使得只执行在被的环境中。它将与环境相关的标记,如硬件ID、MAC地址或任何对于系统来说是唯一的参数,作为变量并当成其执行的条件。假如该移动到另外一个系统,这些条件就会不匹配,就不会执行。因此将这种类型的提交到沙盒中,该并不会正常运行,动态分析也就不起作用了。这是开发者本质上的一个胜利。它从实质上打败了动态分析。

反病毒扫描

但是对于受到分析的,它首先需要被捕捉到。通常是在受感染系统中捕捉到的。这些系统经常安装有反产品。因此首先面临的是反产品。为了避免检测、捕捉和分析,不得不避开反产品所使用的技术。

在通过不同方式到达目标系统后, 恶意软件 必须要采取相应的措施来抵抗反 病毒 软件的扫描。假如是从因特网上下载或作为电子邮件的附件被下载,它必须通过静态扫描。但是我们已经知道静态扫描是很容易进行防御的,因此 恶意软件 几乎总是能在目标系统中执行的。一旦 恶意软件 运行起来,反 病毒 产品就使用动态扫描来检测运行时的 恶意软件 。依赖于反 病毒 产品当前的 特征码 库, 恶意软件 可能会被特定检测或启发式检测所检测到。但是在匹配任何现有的 特征码 之前,反 病毒 扫描器必须能够找到 恶意软件 。不管是静态扫描还是动态扫描,整个扫描的流程是一样的。唯一的区别是动态扫描过程中,被扫描的对象是 恶意软件 在内存中的映像。既然流程是一样的,一些保护静止时的 恶意软件 的 代码 混淆技术在保护运行时的 恶意软件 时也同样适用。对两种状态的 恶意软件 均通用的最有效的技术是入口点混淆和变形。万一 恶意软件 被捕获,这些技术同样能够帮助延长分析和 逆向 工程的时间。

另外一种逃避动态分析的技术是完全关闭反产品并限制反供应商网站的访问。检测动态分析工具是否存在的方法也被用来检测反产品是否存在。但是这时不是直接退出,而是将运行中的反产品关闭。

在实践中大部分的不仅要经受自动化的分析,还要防止自动化的的创建。假如是经过变形处理的,自动化的系统就没办法确定。因此,系统中的只能够检测特定格式产生的,而其他完全不同格式的就可以逃过反产品的检测。

自我防护的恶意软件

恶意软件 技术在保护静止状态和运行状态的 恶意软件 的发展过程中产生了新一代的自我防护的 恶意软件 ,它可以有效地逃过分析和检测,并使传统的反 病毒 检测方法无效。 一个自我防护的 恶意软件 可以是下面技术的任意组合:

反分析技术

防反 汇编 器/反编译器

防监控工具

反沙盒技术

反虚拟化/模拟

防检测技术

代码 混淆技术

关闭反 病毒 产品的功能 返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。