欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

绕过反病毒软件的动态分析 ——反病毒软件模型的局限性以及利用

来源:本站整理 作者:佚名 时间:2017-08-11 TAG: 我要投稿

1.介绍
“Antivirus are easy to bypass ”, “Antivirus are mandatory in defense in depth ”, “This Cryptor is FUD”是当你做一些反病毒安全研究的时候经常听到的句子。我问我自己,绕过杀软真的很简单吗?经过研究后,我得出了跟其他人一样的结论,绕过杀软包括两大步骤:
隐藏那些可能被识别为具有恶意行为的代码,一般使用加密来处理。
用一种不被仿真或者沙箱系统检测为病毒的解密Stub编写的方式。
在这个文章中,我将主要集中讨论最后一个方法,如何戏弄AV的仿真/沙箱系统。
我曾经给我自己设定了一个挑战,要找出半打完全检测不到的Stub编写方法,实际上我找出了更多的Sub,这里列出其中一些方法。其中一些是非常复杂的(并且大部分的“FUD”恶意代码销售者使用这些)。其他的一些是如此的简单以至于我不理解为什么以前没有发现它们。我是相当确定隐藏在地下和官方雇佣的病毒作者是充分理解这些的,以至我想跟大家分享这些技巧。
2.绕过杀软的理论
2.1 静态特征分析
静态分析是基于黑名单的方法。当一个新的恶意软件被AV分析者检测到,特征码被提取。特征码是基于特殊的代码和数据(例如一个使用特殊字符串名的互斥量)。很多时候特征码使用恶意的可执行二进制文件的开始字节。AV拥有成千上万的恶意软件的特征码数据库,在这个恶意数据库中与扫描码进行匹配。第一代AV使用这个方法,现在依然在被使用,同时结合了启发式与动态分析。YARA工具可以被很容易用于创建规则并分类和识别恶意软件。这些规则被上传到AV和逆向工具。YARA 可以在http://plusvic.github.io/yara/找到。
基于这种分析方法最大的问题是其不能够被用于检测新的恶意软件。这样为了绕过基于特征码的分析,一个人必须简单创建一个新的代码,或者做一些细微精确的修改抹去实际存在的特征。当在一个解密Sub中寻找指定的指令时,仍然可能在一个已经加密的恶意软件的代码中创建一个特征码。
2.2静态启发式分析
在这种检测方式下,AV会检查已经在恶意软件中发现的代码模式。有大量可使用的依赖于AV供应商的规则。这些规则一般没有被描述(我想应该是为了避免它们被轻易绕过),这也是为什么总是不容易理解AV是如何判断一个软件是恶意的了。启发式分析的主要好处是,它能够检测到在数据库种并不存在其特征码的新的恶意代码。主要的缺点是,它会产生误报。
有一个例子:函数CallNextHookEx一般被用户态的键盘记录器使用。一些杀软认为这个函数的用法是一个威胁,如果这个函数的名字在可执行文件中被检测到,将发出一个关于这个软件启发式的警告。
另一个例子:一段代码打开“explorer.exe”进程,尝试写一些代码到其虚拟内存空间,这也被考虑为恶意的行为。
最容易的绕过启发式分析的方法是,确保所有的恶意代码是隐藏的。对于这个,编写解密的代码是最常用的方法。如果在解密之前,没有触发警告,如果这个解密Stub在解密完没有产生一些一般被认为恶意的行为,那么这个恶意软件不会被检测出来。
我基于Bill Blunden 的书《Rootkit Arsenel》写了一段demo代码. 这个代码是可用的,在http://www.sevagas.com/?Code-segment-encryption,这里有另外一个链接,可以使Meterpreter的可执行程序对于杀软来说是检测不出来的。
( http://www.sevagas.com/?Hide-meterpreter-shellcode-in).
2.3动态分析
现如今,大部分的AV依赖于动态检测的方法。当一个可执行文件是被扫描,它会被运行在一个虚拟的环境很短的时间。结合特征码和启发式分析,可以检测到未知的恶意软件,甚至依赖于加密的恶意软件。确实,在AV沙盒中,代码是自加密的;接着,对于解密出来的代码能够触发一些可疑的行为。
如果一段代码使用加解密Stub隐藏一个恶意软件,倘若他们跳过解密阶段,大部分的AV会检测到它。
这就意味着,绕过杀软动态分析依赖于两个方面:
l 有一个不被检测到的自解密机制(针对于启发式).
l 阻止AV执行解密stub
我找出了有大量容易的方法来愚弄AV不执行解密Stub。
2.4杀软的局限性
实际上,动态分析是一件复杂的事情,会扫描成千上万的文件,在仿真的环境执行它们,检查所有的特征码,但是它也有很多的局限性。
动态分析模型有三个主要的局限性可以被利用:
l 扫描必须非常快,这样每次扫描有运行操作次数的限制。
l 环境是模拟的,意识不到机器和恶意软件环境的差异性。
l 仿真/沙盒系统有一些可以被恶意软件检测出来的差异性。
3.测试条件
3.1 本地环境
我编译了源代码并在本地搭建安装了杀软的Windows 7 虚拟机环境下测试了这些代码。
3.2 VirusTotal
VirusTotal(https://www.virustotal.com)是针对多个AV的在线扫描的参考平台。它旨在为每个人提供验证可疑文件的可能性。它连接到超过50 个AV扫描器,囊括了所有主要的产品。VirusTotal也是检查AV绕过的一个有趣的技术平台。注意:VirusTotal不应该用于与实际安装的AV软件进行比较,因为它们有不同的版本和配置。此外,VirusTotal调用的AV服务可能与PC上安装的AV服务不同。
你可能会问我,“众所周知,如果你想要一个未被检测到的恶意软件来保留FUD特性,你应该永远不会发送到VirusTotal。为什么你要这么做呢?”首先,我不在乎;事实上,有很多方法绕过AV,即使那些被纠正了,如果我需要它,它们仍然可以使用。其次,下面描述的一些方法是如此的简单而强大。它们也依赖AV的限制,修改成本太高。所以我很自信这些方法还会在几个月或几年后能够使用,即使样本被提交。第三,我认为这些方法是恶意软件作者所熟知的,应该与社区和AV供应商分享。
3.3 加密的恶意软件
对于我的测试,我利用在3.3中描述的方法。我需要一段一般会被认为是恶意代码的代码。最好的方法是使用已经众所周知的Merterpreter的payload。我创建了一段C代码,调用没有加密的Meterpreter shellcode,正如在这里有描述:
http://www.sevagas.com/?Hide-meterpreter-shellcode-in
我采用这样的方式加密了这段代码,这样AV静态分析就失败了(包括解密Stub的分析)。
这个显示如今,AV依靠越来越多的动态分析,但是还不是主要使用它们。

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载