查看原文
其他

恶意软件中的逃避技术,十八般武艺样样齐全

2017-08-14 wangrin 看雪学院

技术进步在过去十年中大大改变了我们的生活。即使是最简单的日常任务我们也依靠计算机,当它们不可用或不按照我们预期的情况下我们会变得焦虑。我们创造,使用和交流的数据已经成为21世纪的黄金。 因为我们的信息是如此宝贵,而且经常非常私密,企图窃取它的情况已经激增。

恶意软件首先被开发出来向隐私发起挑战,但很快攻击者就认识到被盗数据的价值,网络犯罪行业诞生了。包括McAfee在内的安全公司很快成立,使用反恶意软件技术以捍卫的人员和系统。 作为回应,恶意软件开发人员开始开发逃避安全产品的方法。

第一个逃避技术很简单,因为反恶意软件产品很简单。例如,更改恶意文件中的一个比特位有时就足以绕过安全产品的签名检测。最终,更复杂的机制,如多态性和模糊化到来了。

今天的恶意软件强大且富有侵略性。 恶意软件不再是由想要证明某些东西的孤立团体或青少年开发的。它现在由政府,犯罪集团和黑客主义者开发,来侦察,打开,窃取或销毁数据。

该主题详细介绍了现代最强大和最常见的逃避技巧,并解释了恶意软件作者如何使用它们来实现其目标。


为什么使用逃避技术?


为了执行恶意操作,攻击者会编写恶意软件。但是,除非他们的企图未被发现,否则他们无法实现目标。 安全厂商和攻击者之间存在一种猫鼠游戏,其中包括攻击者跟踪安全技术的动向和实现。

术语“逃避技术”组合了恶意软件使用的所有方法,以被避免检测,分析和理解。我们可以将逃避技术分为三大类:

  • 反安全技术:用于避免反恶意软件引擎,防火墙,应用程序封锁或其他保护工具的检测。

  • 防沙箱技术:用于检测自动分析,逃避检测恶意软件行为的引擎。 检测与虚拟环境相关的注册表项,文件或进程会让恶意软件知道是否在沙箱中运行。

  • 反分析技术:用于检测和愚弄恶意软件分析人员,例如,通过发现诸如Process Explorer或Wireshark之类的监控工具,以及一些流程监控技巧,包装器(packer)或混淆来避免逆向工程。

一些高级恶意软件样本同时使用这些技术中的两种或三种。例如,恶意软件可以使用像RunPE这样的技术(它在内存中运行自身的另一个进程)来逃避反恶意软件,沙箱或分析器。某些恶意软件检测到与虚拟环境相关的特定注册表项,允许威胁规避自动沙箱,以及分析人员尝试在虚拟机中动态运行可疑的恶意软件二进制文件。

安全研究人员必须了解这些逃避技术,以确保安全技术仍然可行。

我们看到频繁使用的几种逃避技术:

防沙箱越来越普遍,因为越来越多的企业正在使用沙箱来检测恶意软件。


简史


自从1980年首次出现以来,恶意软件的逃避技术已经变得更加广泛和复杂。以下是逃避技术演进的主要里程碑:

尝试防御反恶意软件产品的第一个已知病毒是MS-DOS病毒Cascade。 它通过部分加密自己的代码来保护自身,使安全分析师无法读取内容。

我们可以看到一部分Cascade代码。红色突出显示由反汇编程序自动生成,并指示其余代码不存在。 这是因为加密代码需要解密。 解开这种类型的恶意软件的一个简单的方法是运行可执行文件,让解密例程解密其余的代码。

1990年初,安全行业发现了第一个多态病毒Chameleon。 Chameleon被高度加密并包含垃圾代码。 为了使研究人员的分析变得更加困难,每一次新的感染都会新增几个指令。

随后的恶意软件开发引入了多态,包装器,rootkit,混淆和其他逃避技术。 一旦黑市开始销售现成的恶意软件,没有经验的攻击者加便入犯罪浪潮。

恶意软件作者使用逃避技术是成功的根本。 网络犯罪分子-甚至是业余爱好者都了解这一点,因此,这些逃避技术已经发展出一个活泼而易于访问的市场。在互联网上找到的crypter工具的例子


黑市中的逃避技术


一些卖家将几种逃避技术汇总成一种工具,并将其在地下市场上销售给复杂的恶意软件编写者或其附属公司,负责传播恶意软件以支持大型广告。

有时可以以较低的价格获得逃避工具。 一些编译好的crypters和packers的卖家可能是在互联网上购买或窃取的,捆绑在一起,然后提供捆绑销售。    

一些卖家提供一个FUD文件的服务。 该服务更昂贵,这可能是由于提供商使用高级技术,如代码操作,高混淆或其他技巧与自己的定制crypters.

其他卖家开发自己的工具,并保留源代码,以避免分析和检测。这样价格更高,因为工具(大概)是独家的。

也可以购买证书来签署任何恶意软件,从而绕过操作系统的安全


黑市中的逃避工具



安全公司和有组织的犯罪者使用的逃避技术


黑客组织也对逃避技术感兴趣。 2015年,黑客团队揭示了一些用于感染和监听系统的技术。他们强大的UEFI /BIOS rootkit可以在没有检测的情况下感染。此外,黑客团队开发了自己的核心FUD来封装自己的工具。

提供渗透测试服务的安全公司了解并使用这些技术,允许渗透测试人员如真正的黑客一样入侵。诸如metasploitsuite,Veil-evasion和shellter之类的工具位他们提供了保护他们恶意代码的技术。攻击者发现这些技术之前,安全研究人员一直在寻找这些技术。我们已经看到最近威胁DoubleAgent触发反恶意软件的解决方案


逃避技巧在行动


在过去一年中,我们分析了许多包含逃避能力的恶意软件样本。在典型的攻击中,攻击者在攻击流程的许多步骤中都使用逃避技术。

Dridex银行木马

Dridex(也叫做Cridex)是最早出现在2014年的知名银行木马,此恶意软件会窃取银行凭证,并通过包含恶意宏Word中的电子邮件附件传播。 自2014年以来,已经出现几种Dridex变种。在每次变种中,我们发现软件中追加和增强的逃避技术。Dridex很大程度上依赖于其感染载体的逃避技术。

图11我们可以看到函数名称和数据的混淆。这种混淆是简单的,因为它使用ASCII编码。

其他变种使用了更为高级的技术。

图12这个样本使用字符串和内容混淆的逃避技术以绕过策略执行powershell,并且检测在maxmind.com上的IP地址以对抗反病毒厂商的黑名单

在另一个样本中,Dridex感染载体通过检查注册表项“HKLM \ SYSTEM \ControlSet001 \ Services \ Disk \ Enum”的值来尝试检测虚拟环境或沙箱,搜索诸如“VMWARE”或“VBOX “的字符串,当检测到虚拟机或沙箱时,Dridex不会运行,表现得似乎无害,或试图将系统崩溃。

逃避技术在感染载载体中大量使用来逃避检测和被分析人员理解。Dridex结合几种技术以避免在多个攻击阶段被检测或者被分析。

图13在这个例子中,Dridex使用processhollwing逃避技术来向一个暂停进程中注入恶意代码。然后新进程调用rundll32.exe,这个程序向explorer.exe加载恶意的DLL。

一个最近的Dridex样本使用称为“AtomBombing”的新型逃避技术。这项技术使用Atom表单,这是由操作系统提供的允许应用程序存储和访问数据的区域。

可以将恶意代码注入Atom表单然后强制合法的应用程序执行恶意代码。因为这项恶意代码注入技术是众所周知的并且很容易被检测,攻击者们现在正在改进他们的技术。

最后,最终Dridex的有效载荷通常使用模糊和加密来保护恶意二进制文件中包含的控制服务器URL,僵尸网络信息和PC名称等数据。

Locky勒索软件

Locky是2016年最突出的勒索软件家族之一。它使用许多方法来感染系统。 其中一些逃避技术与Dridex的技术相似。

图14一个Locky感染载荷对函数使用基本的Unicode和随机字符串的混淆方法。

在前一种情况下,恢复代码是微不足道的,因为很容易反解Unicode,这是一种用于不同格式可打印文本的编码标准。 此片段中的每个Unicode字符对应于ASCII字符。

图15-16在这个感染载荷中,这段代码会通过外链将一个exe文件下载到TEMP文件夹中

其他Locky样本使用多次xor加密来逃过检测和绕过email过滤器以及Web网关。

一些Locky变种使用NullsoftScriptableInstallSystem—一个压缩文件工具。这个合法的应用常常被恶意软件用来绕过反病毒引擎。我们可以直接解压啊所NSIS文件来直接获取它的内容。

图17:在这个Locky的例子中,我们看到有许多的垃圾文件被设计来浪费分析人员的时间。所有这些文件都被NSIS压缩。仅仅只有一些被用来在目标操作系统中执行恶意行为。

除了模糊可执行格式之外,Locky还使用技巧哎绕过防火墙并且通过网络控制服务器检测。一些Locky变种使用域生成算法,一种允许动态创建域的技术。 Locky作者随着他们每次行动改变且更新逃避技术。

2016年8月,Locky开始使用命令行参数来规避自动沙箱分析。没有命令行,样本将不会在系统上运行,载荷将不会被解码进内存。

图18这个例子中,js文件感染向量会传入命令行参数123,接着,命令行参数会被windowsAPIGetCommandLine和CommandLineToArgvW读取。

该示例的参数用于将载荷解密和解包到内存中。 如果参数不正确,样本会在尝试运行加密代码时崩溃。

Locky和其他恶意软件使用的另一个技巧是Read TimeStamp Counter(RDTSC)x86指令来检测虚拟环境。时间戳计数器记录复位以来的处理器周期数。指令RDTSC简单地返回存储在寄存器edx:eax中的计数器的值。

在物理主机上,两个连续的RDTSC指令占用少量的周期。在虚拟主机上,这个周期会变大。如果返回的值不是预期的值,则样本将处于休眠状态。

图19:调用WindowsAPIGetProcessHeap和 CloseHandle用来增加处理器的周期数(每个指令周期,IPC,记录处理器的行为)Locky将两者执行周期进行比较,如果CloseHandle比GetProcessHeap多执行超过十个周期的话,恶意软件就会认为自己是运行与虚拟机之下。

Nymain下载器

Nymain提供如木马或勒索软件等恶意软件。 Nymain使用几种逃避机制来避免被分析和检测 – 使用反逆向工程技术与混淆和沙箱检测以及活动计时器的组合。

大多数恶意软件使用假元数据来显得合法。元数据包含有关FileVersion,CompanyName和Languages等信息。其他样本使用被盗证书看似合法。

图20Nymain使用的元数据

图21Nymain使用的反调试技术来避免被调试器动态分析

最常见的也是最简单的绕过是IsDebuggerPresent函数。该代码调用Windows API并在寄存器中设置一个值。如果值不等于零,则程序当前被调试。在这种情况下,恶意软件使用APITerminateProcess终止进程。另一个绕过调试器的技巧是调用FindWindow。如果一个窗口与调试器(如OllyDbg或Immunity Debugger)有关,则此API会检测并关闭恶意软件。

Nymain进行额外检查以避免分析:

■ 检查日期,并在行动结束后不执行。

■ 检查恶意软件的文件名哈希是否在系统上。如果是,可以进行分析。

■ 检查与虚拟环境相关的MAC地址。

■ 检查注册表项HKLM \ HARDWARE \ Description \ System \“SystemBiosVersion”以查找字符串“VBOX”。

■ 插入垃圾代码,导致反汇编器“code spaghetti”。

■ 使用域生成算法来避开网络检测。

NecursTrojan

Necurs是一种控制系统并传递其他恶意软件的木马。 Necurs是最大的僵尸网络之一,2016年节点数超过600万.Necurs于2016年开始传播Locky。


图22Necurs使用一系列机制来免于被检测和分析


图23CPUID指令返回CPU的相关信息并且允许恶意软件检测自身是否运行于虚拟环境之下。如果是的话,恶意软件将不会运行。

图24第二项逃避技术使用WindowsAPIGetTickCount获取系统启动以来经过的时间。接着执行一些操作后再次获得时间。这项技术被用来检测调试工具。如果获得的时间比所期望的要长,那么程序被认为正在被调试。恶意软件将会终结进程或者使系统崩溃。


图25一个旧的但已然有效的逃避技术是请求被vmware使用的输入/输出端口。恶意软件可使用魔数“VMXh”和x86指令‘in’来请求这个端口。在执行中,IN指令被虚拟机捕获并进行仿真。指令返回并存储在寄存器ebx中的结果与魔数“VMXh”进行比较。如果结果相符,则恶意软件在VMware上运行,恶意软件将终止进程或尝试将系统崩溃。

图26VMCPUID指令与CPUID类似,尽管该指令仅在某些虚拟机上实现。如果未实现VMCPUID指令,则会导致系统崩溃,从而防止虚拟机进行分析。

图27VPCEXT指令(可视化容器扩展器)是Necurs用于检测虚拟系统的另一种反虚拟机技巧。这种技术没有文档化,并被其他几个机器人使用。如果指令的执行没有产生异常,则恶意软件在虚拟机上运行。

无文件化恶意软件

一些恶意软件不会通过向硬盘写入文件来感染系统,因此就绕过了许多的检测技术。我们写过一份关于无文件化恶意软件的报告—mcafee威胁报告2015年12月。

我们现在发现PowerShell用作感染载体。在一个样本中,一个简单的JavaScript文件运行模糊过的PowerShell命令,以从外部IP地址下载打包或包装过的文件。该文件将恶意DLL注入合法进程,绕过所有保护。这种恶意软件类型并不是完全的无文件化,但仍然有效。

以下示例(hash:f8b63b322b571f8deb9175c935ef56b4)显示感染过程:

图28  powershell命令释放一个NSIS压缩过的文件(agzabf.exe,向explorer.exe注入monkshood.dll)。这里使用的逃避技术是DLL注入,它将代码注入到一个正在运行的进程中。


逃避技术的趋势


大多数逃避技术包括:

  • 混淆:保护数据,变量,网络通信。随机化变量名或函数名。可使用XOR或其他编码技术

  • 环境检测:免分析,恶意软件检测和虚拟环境相关的工具

  • 沙盒检测:恶意软件检查硬盘来检测和沙盒相关的文件或进程。

下面的统计数据,来自virus Total 和McAfee,从一直样本中获得的包括沙盒逃逸技术。

恶意软件使用许多其他的技术来逃避检测。Detectingmonitoring和windowshook(改变windows函数的内部行为)是常见的技术。权限提升在关闭反恶意软件工具很或者执行一些其他的需要admin权限的指令中很流行。

安全行业正基于机器学习在开发新的检测技术,它可以检测行为并且预判可执行文件是否是恶意的。

图29 对机器学习的兴趣正逐步增长。

安全行业对机器学习非常感兴趣,攻击者也是如此。3月份,安全研究人员观察了第一个基于机器学习的恶意软件样本Cerberransomware。Cerber在每个感染阶段使用多个文件,将它们动态地注入正在运行的进程。这些攻击者面临的挑战是,机器学习会根据功能而不是签名来检测恶意文件。在这个例子中,Cerber使用单独的加载器来注入载荷,而不是在其中运行例程。这种技术允许Cerber不被机器学习检测而运行,但会被传统的反恶意软件引擎捕获。

另一种越来越多的逃避技术是固件感染,我们预计这将在攻击物联网设备中变得流行。

将恶意代码插入固件是避免检测的非常有效的方法。固件恶意软件可以控制许多系统组件,包括键盘,麦克风和文件系统。它不能被操作系统检测到,因为感染发生在Ring -1中,内核中的最深点,恶意软件具有很多权限,并且几乎没有安全检查。

为了检测这种威胁并轻松分析固件,McAfeeAdvanced Threat Research发布了开源工具Chipsec。 您可以通过以下命令查看白名单来查看固件是否已经受到的影响:

图30使用Chipsec框架来dump固件

图31检查针对白名单的转储固件来检测有无修改。


防止使用逃避技术的恶意软件


了解恶意软件逃避技术是更好地防范这类恶意软件的第一步。

构建安全程序以防止回避恶意软件应基于三个基本组件。

  • 人员:安全从业人员必须接受培训,以妥善应对安全事件,妥善管理当前的安全技术。攻击者通常使用社会工程来攻击用户。没有内部意识和培训,用户将为攻击者留下一些攻击面。

  • 流程:清晰的结构和内部流程必须到位,以便安全从业人员是有效的。安全最佳措施(更新,备份,治理,情报,事件响应计划等)是强大而有效的安全团队的关键。

  • 技术:团队和流程的技术支持应该培育和加强,以适应新的威胁。



可采取的策略和程序


最需要防御恶意软件感染的是用户。用户必须了解来自潜在风险来源下载和安装的应用程序。用户还必须了解恶意软件可能在浏览时无意中下载。

始终保持最新的Web浏览器和附加组件,端点和网络网关上的反恶意软件升级和更新到最新版本。

只允许可信网络上的系统被公司IT安全部门分发和认证。恶意软件可以通过连接到可信网络的不受保护的系统而轻松地传播。

恶意软件可以隐藏在之前由攻击者特洛伊木马化的合法软件内。为了防止这种类型的攻击成功,我们强烈建议加强软件交付和发布机制。拥有企业应用程序的中央存储库始终是一个好主意,用户可以从中下载正规的软件。

在用户授权安装以前未被IT安全部门验证的应用程序的情况下,教育用户仅安装来自已知供应商的可信签名的应用程序。在线提供的“无害”应用程序嵌入恶意软件非常常见。

避免从非Web来源下载应用程序。从Usenet组,IRC频道,即时消息客户端或对等系统下载到恶意软件的可能性非常高。IRC和即时消息中的网站的链接也经常指向受感染的文件下载。

实施网络钓鱼攻击预防教育计划。恶意软件通常由网络钓鱼攻击传播。

威胁情报反馈与反恶意软件技术相结合。这种组合将有助于加快威胁检测的速度。


结论


恶意软件为了执行恶意行为,必须保持不被检测和隐身。随着安全技术变得越来越复杂,逃避技术也越来越复杂。这场竞争已经导致了一个强大的地下市场,其拥有最好的逃避技术,包括完全不可检测的恶意软件。其中一些服务使用了安全行业未知的逃避技术。

恶意软体的逃避技巧不断发展,现在几乎任何一个攻击阶段都可以部署。 如Dridex和Locky所示,几个行动使用相同的技术来传播,但避免了分析和检测。即使是最知名的恶意软件,旧的逃避技术仍然受欢迎并且有效。

为了防止这类恶意软件,我们必须首先了解它。我们必须研究每个漏洞,了解安全技术为什么不阻止攻击。



本文由看雪翻译小组 wangrin 编译,来源@macafee

转载请注明来自看雪社区



热门阅读


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存