防病毒技术:无文件攻击
如今,无文件攻击已经常态化了。虽然一些攻击和恶意软件家族在其攻击的各个方面都企图实现无文件化,但只有一些功能才能实现无文件化。对于攻击者来说,无文件化只是试图绕过攻击的一种手段,至于是否有文件,都只是表象。
无文件攻击简介
- “无文件攻击”这一术语往往会让人产生歧义,比如无文件攻击就代表真的没有攻击文件吗?没有文件又如何实施攻击?如何检测?如何防御……,其实“无文件攻击”只是一种攻击策略,其出发点就是避免将恶意文件放在磁盘上,以逃避安全检测。有一点需要明确,就是无文件恶意软件也要使用文件。
最初,“无文件攻击”是指没有持久驻留在内存中的恶意代码的攻击,不过随着攻击技术的迭代,该术语的指代面越来越广了,现在安全行业已将那些依赖文件系统,以实现恶意代码激活和驻留的恶意软件也成为“无文件恶意软件”。由于在无文件恶意软件攻击中,系统变得相对干净,传统的杀毒软件很难或根本无法识别这种感染并及时通知技术人员进行防御,所以这种攻击越来越普遍。
其实,“无文件”这一术语也在不同的时间点是有不同含义的,早在2012年,有文章最初就使用了“无文件恶意软件”这一词汇。但是,为了应对无文件攻击的挑战,就需要消除这一术语的歧义,以了解它涵盖的各种技术。因此识别它如何影响特定的环境和防御策略就变得非常重要。
据GoogleTrends的监测结果显示,“无文件恶意软件”此前有过很多不同的称呼,比如: “无形恶意软件”、“零足迹攻击”或“无/宏恶意软件攻击”。这些词早在2012年到2014年之间就零星的出现过。不过随着这一技术的使用频率增加,网络安全人员对这一术语的集中讨论却发生在2015年,直至2017年随着网络安全的概念深入人心,无文件恶意软件”这个词也被定了下来并被大众所熟知。
尽管存在杀毒软件和应用程序白名单等反恶意软件的控制措施,但无文件攻击也包含各种应对策略,允许攻击者进行有针对性的攻击。下面概述了无文件攻击所涉及的方法,旨在为无文件攻击的防御提供明确的概念和理论指导。现在,就让我们来看看无文件攻击所包含的具体技术,以及它们为什么常常能利用这些技术逃避现有的检测。
技术1:恶意文件所发挥的作用
许多专业安全分析人员通过长期的跟踪分析,确认无文件的攻击其实是包含各种文件的。在这种情况下,攻击者提供恶意文件通常会作为电子邮件附件,用于以下其中一种目的:
- 恶意文件可以充当其他文件的灵活容器:例如,攻击者可以在Microsoft Office文件中嵌入JavaScript文件,并对收件人进行社交工程攻击,当受害者打开嵌入的文件时,恶意文件就开始执行所带的脚本了。另外,可以携带恶意文件的其他文件类型包括PDF和RTF。由于此功能是特定应用程序才包含的一项功能,因此杀毒软件的技术通常不会干扰这些文件的使用。
- 恶意文件可以携带执行恶意代码的漏洞:如今的文件功能越来越复杂,不过功能多的同时所包含的攻击面也就增大,比如攻击者可以利用诸如解析漏洞之类的漏洞。在这种情况下,攻击者就可以在受损应用程序的内存中触发捆绑的shellcode,执行攻击,即使不将代码保存到文件系统,攻击者也可以在发起攻击。
- 文件可以执行传播过程中的恶意逻辑,如今的文件都支持强大的脚本功能,例如Microsoft Office执行VBA宏的功能。这些功能允许攻击者在没有编译可执行文件的情况下实现恶意逻辑,这就是利用了许多杀毒工具在区分恶意脚本和良性脚本方面的弱点。文件脚本功能包括启动程序和下载恶意代码。
虽然文件驻留在攻击端的文件系统上,但攻击者可以不将这些传统恶意可执行文件放置在磁盘上。在许多情况下,这些文件会直接在攻击目标的内存中执行恶意代码,这也是无文件攻击的重要组成环节。有关攻击者如何使用这些文件发起攻击的详细案例,请参阅Omri Moyal关于滥用Microsoft Office支持DDE的文章。还有一篇文章是关于“攻击者如何将自己插入对话以传播恶意软件”,请点此查看。
技术2:恶意脚本所发挥的作用
为了避免将恶意代码编译成传统可执行文件的目标,无文件攻击的开发者需要在利用无文件属性进行攻击时依赖恶意脚本。除了文件原来就支持的脚本之外,如上所述,攻击者可以直接在Microsoft Windows上运行的脚本提供了以下攻击优势:
- 这些恶意脚本可以与操作系统进行交互,而不受某些应用程序(如Web浏览器)可能对脚本施加的限制。
- 与经过编译的恶意可执行文件相比,杀毒软件更难检测和控制这些恶意脚本。
- 这些脚步提供了许多灵活的攻击机会,可以将恶意逻辑分散到多个进程中,以逃避检测。
- 这些脚步在被混淆处理后,减缓安全分析师的分析速度,为进一步逃避检测提供时间。Microsoft Windows包括PowerShell,VBScript,批处理文件和JavaScript的脚本解释器,攻击者调用并运行这些脚本的工具包括powershell.exe,cscript.exe,cmd.exe和mshta.exe。通过添加适用于Linux的Windows子系统,Microsoft可以在攻击端上提供更多脚本技术。有关企业在限制这些工具的滥用方面所面临的挑战的一个案例,请参阅Gal Bitensky在讨论Invoke-NoShell实用程序的文章。
攻击者可以使用现成的混淆脚本的框架,而不必自己来实现这种复杂的逃避策略。这些措施包括Daniel Bohannon开发的适用于PowerShell和Invoke-DOSfuscation框架的Invoke-Obfuscation。具体案例,请参考Minerva对Emotet的脚本混淆的分析。
技术3:与本地程序交互
关于无文件攻击的讨论通常包括滥用Microsoft Windows中内置的众多实用程序,这些工具允许对手从攻击的一个阶段转移到另一个阶段,而无需依赖编译的恶意可执行文件。这种经营方式有时被称戏称为“靠土地为生(living off the land)”。
一旦攻击者的恶意代码可以与本地程序交互,那么文件感染程序就开始启动,此时攻击者就可以开始滥用操作系统内置的实用程序来下载其他恶意控件,启动程序和脚本,进而窃取数据,大肆感染,保持持久性攻击等。攻击者为了与本地程序交互,调用了许多工具,其中包括regsvr32.exe,rundll32.exe,certutil.exe和schtasks.exe。关于攻击者如何以这种方式滥用内置二进制文件、库和脚本描述,请参阅Oddvar Moe的LOLBAS项目。
内置于操作系统中的Windows Management Instrumentation(WMI)为攻击者提供了更多与本地程序交互的机会。WMI允许攻击者在wmic.exe可执行文件(以及其他一些文件)的帮助下使用脚本(例如PowerShell)并与攻击端的大多数程序功能进行交互。由于这些操作仅涉及受信任的内置Windows功能,因此杀毒软件技术难以进行检测和限制。有关WMI如何协助无文件攻击的解释,请参阅Matt Graeber撰写的滥用WMI构建持久、异步和无文件后门的文章。
攻击者通过利用这种良性和可信赖的实用程序,大大增加了逃避检测的概率。有关此类技术的其他示例,请参阅Matthew Dunwoody对APT29使用WMI和PowerShell构建无文件后门的概述。
技术4:内存中的恶意代码
虽然检查磁盘上的文件是许多杀毒软件产品的优势,但它们经常会被仅驻留在内存中的恶意代码所难道,由于内存是不稳定的和动态变化的,这就使恶意软件有机会改变其攻击方式或以其他方式逃避杀毒检测。
一旦攻击者开始在攻击端上执行恶意代码,那攻击者就可以将恶意软件解压缩到内存中,而不会将恶意控件保存到文件系统中,这可能涉及到将代码提取到进程本身的内存空间中的技术。在其他情况下,恶意软件会将代码注入受信任的流程和其他良性流程中。
内存攻击技术的案例包括:
- 内存注入利用Microsoft Windows的功能与操作系统进行交互,而不会利用漏洞。例如,经常被注入恶意软件进行滥用的API调用包括VirtualAllocEx和WriteProcessMemory,它们允许用一个进程将代码写入另一个进程。要了解这些技术的实际应用,请阅读Gal Bitensky对AZORult攻击的概述,AZORult是一个功能强大的信息窃取程序和下载程序。
- 攻击者可以将已编译的可执行文件包装成脚本,以便在运行时将恶意载荷提取到内存中,PowerSploit就是这样的工具包的一个例子,你可以通过阅读Asaf Aprozper和Gal Bitensky的GhostMiner分析来看到它的运行,而Chris Truncer的Veil框架又是另一个案例,感兴趣可以读一下。
- Process Doppelgänging是一种绕过杀软检测的新技术,这种新的攻击方式对所有windows平台都有效,并且能够攻击目前可见的大部分安全产品。Doppelgänging利用两种特性来掩盖加载修改版可执行文件的过程。通过使用NTFS,攻击者可以在不写入磁盘的情况下修改可执行文件。这意味着,攻击可以为修改版的可执行文件建立进程,而杀毒软件的安全机制检测不到。这种方法很像进程中空技术,但是更加高级。攻击者可以在没有可以进程和内存操作(如SuspendProcess和NtUnmapViewOfSection)的情况下,让恶意软件在正常软件的进程中执行任意代码。SynAck恶意软件就使用了这种逃避技术,以试图终止与虚拟机、办公应用程序、脚本解释器、数据库应用程序、备份系统以及游戏应用程序等相关的程序。研究人员认为,SynAc这样做的目的在于授予自身能够访问这些进程所使用的有价值文件的权限。如同其他勒索软件一样,SynAck也会收集一些关于受感染主机的基本信息,如计算机和用户名、操作系统版本信息等,然后使用随机生成的256位AES密钥对目标文件进行加密。在文件被加密后,将会被附加一个随机生产的扩展名。除此之外,SynAck还会清除系统存储的事件日志,并且可以通过修改注册表中的LegalNoticeCaption和LegalNoticeText键将自定义文本添加到Windows登录屏幕。
内存攻击技术允许攻击者绕过许多杀毒检测技术,包括应用程序白名单。虽许多杀毒工具试图捕获内存注入,但攻击者的攻击技术明显技高一筹,Asaf Aprozper的CoffeeShot工具通过在Java中实现注入方法来演示这种检测尝试的脆弱性。
总结
如今,无文件攻击已经常态化了。虽然一些攻击和恶意软件家族在其攻击的各个方面都企图实现无文件化,但只有一些功能才能实现无文件化。对于攻击者来说,无文件化只是试图绕过攻击的一种手段,至于是否有文件,都只是表象。往后攻击者可能会将所有攻击技术进行组合,包括使用恶意文件、恶意脚本、与本地程序交互和内存注入。具有无文件属性的攻击是基于应用程序和操作系统功能的,利用了杀毒工具在尝试检测和防止各种滥用时的盲点。
作者:luochicun 本文翻译自:https://blog.minerva-labs.com/deconstructing-fileless-attacks-into-4-underlying-techniques