一听到无文件恶意软件,很多企业和个人用户都感觉无所适从。因为目前的很过防御检测技术还足以对这些攻击产生有效的拦截。无文件恶意真有这么厉害吗?今天我们就来详细的回顾一下它的历史,并结合一些目前已经查明的恶意软件样本进行具体分析。
根据Google Trends监测,无文件恶意软件这个词出现在2012年到2014年之间。不过随着恶意软件的开发者开始在攻击中频繁的使用这一技术,网络安全人员对这一术语的集中大规模讨论却发生在2015年,直至2017年随着网络安全的概念深入人心,这个词也被大众所熟知。
不过,无文件恶意软件很容易让不明就里的人误以为,攻击者在使用该技术进行攻击时真的不需要使用任何文件,这种理解是非常错误的。下面我们就来探究一下无文件恶意软件攻击的演变历程,以及它究竟是如何实现的。
我们一般会把恶意软件定义为在操作系统上执行的代码,按着这个思路,无文件恶意软件确实就是没有文件的。比如,开始于恶意脚本或文件系统上的可执行文件的攻击,无论攻击发生的方式如何,无论是漏洞利用,社会工程技巧,还是某些功能的滥用。
不过最初无文件恶意软件是指没有持久注入在内存中的恶意代码,不过随着时间的变化,该术语演变为包含依赖文件系统的某些方面来激活或运行的恶意软件。我们来回顾一下影这个术语的演变历史。
无文件恶意软件的演变历史
2001-2004:Code Red和SQL Slammer的出现
恶意代码的概念肯定是出现在21世纪之前,不过从2001年爆发的Code Red蠕虫、Nimda蠕虫,SQL杀手病毒(SQL SLAMMER蠕虫),到2004年肆掠的 “冲击波” 蠕虫病毒,无不有蠕虫的影子,并且开始与病毒相结合了。蠕虫病毒通常会感染Windows 2000/ XP/Server 2003系统。这就是无文件恶意软件一词最初的那种文件式的思路的来源。我们找到了卡巴斯基实验室在2001年夏天发表了一个公告:
我们预测,在不久的将来,像Code Red这样的无文件蠕虫将成为最广泛的恶意程序之一,而且我们对其难以防范。
Code Red利用了Microsoft IIS Web服务器中的一个漏洞,将其藏身于受感染主机的内存中。
紧接着一年半后,另一个蠕虫SQL Slammer通过利用Microsoft SQL服务器中的漏洞迅速传播。 网络安全与诈骗的调查分析师Robert Vamosi在2003年曾为ZDNet撰写相关的研究文章,将此恶意软件描述为无文件攻击,并提到它仅驻留在内存中,就像Code Red一样。
当时还在赛门铁克工作的Peter Szor在2003年“标题签名提取系统和方法”的专利技术申请也就提到了这个术语。在这份专利申请中,该专利将无文件恶意软件定义为:
不是基于文件的恶意代码,但仅存在于内存中……更具体地说,无文件恶意代码就是将自身附加到内存正常的活动进程中。
总而言之,无文件恶意软件的最原始定义是这样的“在不保留任何文件的情况下,还会进行恶意软件的活动”。
2012:Lurk木马的出现
在Code Red和SQL Slammer蠕虫病毒近十年之后。 2012年,卡巴斯基实验室的Sergey Golovanov有报告了一个新的木马攻击类型,该木马没有将任何文件保存到硬盘驱动器,用报告里的话解释就是这样的:
我们正在处理一种非常罕见的恶意软件,就是所谓的无文件恶意程序,它根本不作为硬盘驱动器上的文件存在,Lurk木马是一种复杂的、通用的、多模块的多功能恶意软件,能够获取受害者计算机的访问权限。Lurk木马非常独特,它的恶意代码不会存储在受害者的计算机中,而是在随机访问存储器(RAM)中。
未命名的标签利用了客户端Java漏洞,并仅在受影响的javaw.exe进程的内存中进行操作。 Sergey提到Lurk木马就是一个银行木马。
随后,SecurityXploded的Amit Malik发表了一份对该类型木马的研究性文章,说明了如何从Windows下载文件之后,将Windows程序的“内存或无文件执行”保存到磁盘上。
2014:Powerliks、Angler、Phase Bot等各种漏洞攻击工具的出现
第二阶段的恶意程序仍然停留在纯粹的内存注入,而不会在文件系统上留下任何直接的痕迹。所以一旦系统重启,这些文件就都消失了。相比之下,Powelliks恶意软件(实际上应该叫做Kovter)是一款著名的点击欺诈软件,它于2014年首次被曝光,由于它使用了一种特殊的潜伏技术而迅速蜚声天下,它并非隐身于磁盘文件中,而是藏身于让人意想不到的Windows注册表内。实际上,该软件不仅首次面世就一鸣惊人,而且,此后它也一直处于不断进化之中。
G Data 软件公司将其描述为“持久的且无文件的恶意软件”,Powelliks通过利用Microsoft Word漏洞进入系统,然后使用PowerShell和JavaScript以及shellcode来启动存在于内存中的恶意进程。Symantec的Kevin Gossett对其持久性的隐藏机制做了以下描述:
通常,恶意软件会在运行子项中放置一个指向恶意可执行文件的条目,然后执行该条目。 Poweliks通过运行子键调用rundll32.exe,rundll32.exe是一个用于加载DLL的合法Windows可执行文件,并传入几个参数。这些参数包括了JavaScript代码,最终导致Poweliks被加载到内存中并执行。
一个月后,安全研究员Kafeine记录了一个利用无文件属性的Angler漏洞攻击工具包。Angler漏洞攻击针对客户端Java漏洞,并仅在受影响的javaw.exe进程的内存中进行操作。没过多久,也就是在2016年,Angler工具包会下载BEDEP变种,然后释放恶意软件(经检测为TROJ_AVRECON),根据Palo Alto的Brad Duncan的说法:
Angler在安装时不会创建任何文件,因为它可以通过漏洞利用shellcode直接加载到内存中。
在2014年底,安全研究员MalwareTech报告了一个名为Phase 木马的无文件Rootkit类病毒,根据监控,该样本通过安装在Windows系统上可以实现完全隐身,而且不会在自己的进程中的磁盘中留下任何文件。 Phase hids是可以重新定位的代码,在注册表中加密,并使用powershell读取并执行内存中重新定位后的独立代码。像Powerliks一样,Phase恶意软件通过从autorun注册表项启动rundll32.exe来维护隐藏的持久性,并找机会执行恶意JavaScript。
2014-2015:Duqu 2.0、Kovter的出现
2015年中期,卡巴斯基实验室发布了有关2014-2015年运行的高级漏洞工具的详细信息,其中Duqu2.0是现今为止最为复杂的蠕虫,广泛应用于各种APT攻击事件中。该攻击利用Windows漏洞来安装隐藏的恶意软件,这些恶意软件完全是存在于感染主机内存中的,它不像原来的那些无文件攻击一样具有持久性隐藏机制。研究人员解释说,攻击者会针对服务器的正常运行时间,对重新启动的系统进行重新感染。
在2015年,Kovter是另一个被发现的无文件恶意软件。Kovter的感染技术与Powerlike非常相似,即开始使用恶意的Windows可执行文件感染,然后对注册表中的存储对象模糊化或删除。Kovter的变体目前已经通过使用执行JavaScript的快捷方式文件来维护其持久的隐藏性。如Airbus的Andrew Dove所述,Kovter的脚本启动了执行shellcode的PowerShell,它在将恶意代码注入其中之后启动了一个非恶意应用程序来作为掩护。
2016:PowerSniff、PowerWare、August的出现
在2016年年中,Palo Alto Networks的Josh Grunzweig和Brandon Levene报告了被他们被称为PowerSniff的恶意程序。PowerSniff的攻击开始于包含恶意宏的Microsoft Word文档,它的内存中的机制类似于Kovter,并涉及执行shellcode的PowerShell脚本,它会解码并执行额外的恶意有效负载,并仅在内存中运行。 PowerSniff有能力将恶意DLL暂时保存到文件系统。
几个星期后,Carbon Black的Mike Sconzo和Rico Valdez报告了PowerWare这个恶意软件。像PowerSniff一样,PowerWare也是一开始感染一个包含恶意宏的Microsoft Office文档,并最终启动了PowerShell,直到整个感染过程的完成,整个过程中,PowerWare不会在文件系统上留下任何的恶意可执行文件。
Proofpoint也在2016年末发现了使用Microsoft Word宏和PowerShell的另一个无文件恶意软件——August。根据研究人员的分析,August会从远程站点下载了一部分有效载荷作为PowerShell字节数组,在内存中执行过程中,不会其保存到文件系统。
2017年:POSHSPY等的出现
在2017年初,卡巴斯基实验室描发现了一个未知的攻击事件,攻击者仅将基于Meterpreter的恶意代码存储在内存中,而唯一的文件系统还是合法的Windows实用程序,例如sc(安装运行PowerShell的恶意服务)和netsh(用于传播恶意网络流量)。
几个月后,Mandiant的Matthew Dunwoody也发现了另一个涉及无文件恶意代码的复杂攻击。该攻击最后被命名为POSHSPY,POSHSPY使用了操作系统的Windows Management Instrumentation(WMI)功能来维护隐藏的持久性,并依赖于PowerShell的有效载荷,POSHSPY有能力下载可保存到文件系统的可执行文件。根据Matthew的分析,
POSHSPY的开发者实施了一个非常独立的后门,他们一方面可以与传统的后门进行联合攻击,另一方面又可以和更复杂的后门进行混合,以便在传统后门失效后还保留目对标的控制。
这些演变让我们充分认识到了无文件恶意软件的强大攻击功能,它们完全依赖内置的良性程序来在受感染的系统上执行恶意的有效载荷。
无病毒恶意软件的概念之争
虽然2012有文章最初使用了无文件恶意软件的这个词汇,但现在使用人们已经开始倾向于用无形恶意软件(bodiless malware)这个词汇了。卡巴斯基实验室在2016年之前用的都是无形恶意软件这个叫法。
而Carbon Black在其2016年的威胁报告中引入了无恶意软件攻击(non-malware attack)这个叫法。对于无恶意软件攻击这个叫法,Carbon Black公司是这样解释的:
“无恶意软件攻击是攻击者使用现有软件,利用允许的应用程序和授权的协议来进行的一种恶意攻击。无恶意软件攻击能够获得对计算机的控制,无需下载任何恶意文件。”
Gartner在2017年的报告中也使用了无恶意软件攻击一词,不过,一个月后,在Gartner发表的另外一篇报告中则改为使用无文件攻击(fileless attack)这个字眼。
总之,这些叫法的背后的思想都是一致的,即攻击者希望恶意软件尽可能保持隐身来减少它们被检测到的概率,所以就要对受感染系统进行最少次数的干扰,以及在系统中留下最少的痕迹。恶意软件保持不被发现的时间越长,它们就越有可能实现其攻击目标。为此,无文件恶意软件就要删除它在受感染系统磁盘中保存的所有文件,在注册表中保存加密数据,注入代码到正在运行的进程,并使用PowerShell、Windows Management Instrumentation和其他技术使其难以被检测到。