无文件恶意软件检测和保护提示
导语:最近,越来越多的公司遭受了无文件恶意软件的困扰。
最近,越来越多的公司遭受了无文件恶意软件的困扰。由于这种类型的网络攻击对传统的反恶意软件解决方案不可见,因此变得非常普遍。无文件恶意软件通过合法的Windows进程运行,因此此类攻击不会留下大多数网络安全系统可以找到的痕迹。本文介绍了无文件恶意软件的详细信息,并提供了有效检测和防御此类攻击的提示。
无文件恶意软件在黑客中非常流行。根据2017年Verizon数据泄露调查报告,2017年对公司的所有攻击中,只有51%是使用传统恶意软件进行的。这意味着,黑客使用的攻击中有49%涉及其他入侵方法,包括轻松绕过标准安全性的无文件恶意软件。解决方案。
由Ponemon Institute(对665位IT安全专业人员进行的调查)进行的另一项研究得出的结论是,预计2018年无恶意软件攻击将显着增加,这主要是由于无文件恶意软件比基于文件的恶意软件难于检测十倍。
2017年2月,发生了有史以来最大的无文件恶意软件攻击。在这次攻击中,与GCMAN和Carbanak团体有关的黑客入侵了全球40个国家/地区的140多家私人银行,政府组织和电信公司。
无文件攻击的威胁非常明显,因此让我们仔细看看什么是无文件恶意软件以及如何防范它。
什么是无文件恶意软件?
术语无文件恶意软件是指文件系统中没有主体的恶意代码。换句话说,无文件恶意软件不需要任何文件即可执行。
永久居留(TSR)病毒是第一个无文件恶意软件示例。尽管TSR病毒具有启动它们的主体,但是一旦代码加载到内存中,可执行文件就可以被删除。但是,纯无文件恶意软件可以在磁盘上没有任何主体的情况下启动,并且可以在随机访问内存(RAM)中运行预定的时间。
此外,无文件恶意软件也是一种病毒,它利用某些远程代码执行(RCE)漏洞使合法进程执行少量的Shellcode。然后,此shellcode将恶意软件的主要部分(称为有效负载)下载到内存中并运行它。因此,恶意软件代码成为合法进程的一部分并被执行。
最初,无文件恶意软件需要一个文件并专门在RAM中运行。目前,该术语还适用于磁盘上没有本机可执行文件形式的主体的任何恶意软件。因此,基于脚本的恶意软件(JavaScript,VBScript,Sh,PowerShell)也被视为无文件恶意软件。
无文件恶意软件的主要类型
无文件恶意软件主要有两种类型,具体取决于可执行环境:
· 在RAM中运行的无文件恶意软件
· 利用软件脚本漏洞的无文件恶意软件
基于RAM的恶意软件
严格在RAM中执行的恶意软件的主要优点在于它是隐身的。由于防病毒软件执行的大多数检查都是在进程启动时进行的(验证数字签名,搜索病毒签名),因此已经运行的进程被认为是可疑的。因此,如果恶意软件没有在文件系统上创建任何内容,它就不会触发防病毒软件可以响应的任何事件。
此外,大多数防病毒数据库都包含带有病毒的文件的签名,这些签名基本上充当了治愈恶意软件的秘诀。因此,防病毒软件将根据磁盘上找到的文件来决定如何采取行动。但是,即使运行时保护检测到了无文件恶意软件,也无法使用它。仅存在无文件恶意软件的间接证据,例如进程可疑运行。但是终止在RAM中的每个可疑进程不是一个选择,因为这可能会威胁到宝贵的未保存用户数据。
无文件恶意软件的主要缺点在于,它高度依赖于其运行过程。为了使有效载荷运行,必须将恶意软件编译为与位置无关的代码,因为有效载荷的基址是随机的。有效负载需要检测其运行过程中可用的DLL。为了保持低调,这种类型的恶意软件必须仅依赖已加载的DLL,因为防病毒软件通常会监视正在加载的新模块。因此,如果由于未加载DLL无法访问某些API,则恶意软件必须具有自己的关键功能实现。
如果该过程终止得太早:
· Shellcode将无法下载其有效负载
·即使恶意软件已经下载了其有效负载,该有效负载也可能在达到其目标之前终止
·进程可能会在尝试保留在系统中之前终止
过去,Internet连接速度是此类恶意软件的主要限制。攻击者必须下载至少一部分恶意软件并将其保存在磁盘上,然后用户才能关闭浏览器。因此,有没有在fileless办法多大用处,而是使用了基于文件的方式:一个下载的shellcode的装载机或滴管-一个小的可执行文件,没有做任何伤害自己。加载程序的目的是秘密地从硬编码的URL中获取有效负载,然后执行它。
现代软件的运行时间足以确保无文件攻击成功,并且在关闭软件后,进程通常仍在后台运行。因此,基于RAM的无文件恶意软件具有更好的生存机会。
基于脚本的恶意软件
使用脚本作为攻击媒介是感染计算机的另一种已知方法。已经开发出最流行的基于脚本的恶意软件类型,以利用Microsoft Office和Windows PowerShell中的漏洞。
针对Microsoft Office的无文件恶意软件
过去,Microsoft Office文档中的VBScript主要用于下载加载程序或有效负载。VBScript帮助攻击者至少执行了一些会触发下载的合法操作系统命令。但是,由于难以处理诸如流程,线程,服务,模块,注册表等操作系统实体,因此VBScript作为恶意软件主体的基础非常有限。
防病毒软件在防御这类攻击方面做得并不多,因为实施这种保护需要与Microsoft Office脚本引擎进行深度集成,而该引擎尚未记录。因此,保护的常用方法是将已知受感染文档的哈希添加到病毒数据库,并阻止这些哈希文件被下载或打开。有时,防病毒软件试图分析文档的内容以查找已知的VBScript字节码序列。但是,恶意软件很快就会通过使用VBScript模糊处理来克服这一问题。
这场战斗失败了,Microsoft Office提供的唯一解决方案是默认情况下禁用脚本,并在Office文档中使用任何VBScript代码时显示“活动内容”警告。该措施减少了感染数量,尽管并没有将这种攻击的有效性降低到零。
针对Windows PowerShell的无文件恶意软件
然后,攻击媒介转向了一个新的目标:Windows PowerShell。
Windows PowerShell是Windows命令行外壳,专门为系统管理员设计。它包括一个交互式提示和一个脚本环境,可以单独使用或组合使用。
此外,Windows PowerShell提供程序使您可以像访问文件系统一样轻松地访问其他数据存储,例如注册表和数字签名证书存储。
PowerShell不是可用于操纵操作系统实体的唯一脚本环境。基本上,任何解释性语言(例如Python或Ruby)都可以用于此目的。但是,PowerShell具有一个很大的优势:它已预先安装在Windows上,因此无需先安装解释器。
因此,PowerShell是无文件恶意软件的理想平台,因为:
· 它使用脚本
· 它具有访问关键操作系统对象的权限
· 在所有现代Windows版本上均可用
· 磁盘上没有本机可执行文件
最后,PowerShell不能简单地被禁用(就像Office文档中的VBScript一样),因为许多系统管理工具都依赖它。
因此,现代恶意软件可以完全实现为PowerShell脚本,并且无需下载本机二进制文件,除非需要真正特定的东西。
再次,防病毒软件在分析脚本执行时遇到问题。防病毒软件旨在分析本机代码(即x86汇编代码),而缺少分析PowerShell脚本的工具。此外,恶意软件已经开始使用混淆来隐藏PowerShell脚本的源代码。因此,没有简单的方法来区分脚本是合法的还是恶意软件。防病毒软件也不能确定PowerShell进程是由恶意软件创建还是出于合法系统需求。更糟糕的是,PowerShell引擎基于.NET构建。这意味着PowerShell解释器在.NET平台上作为JIT代码运行,这使得对于防病毒软件的PowerShell过程操作的分析更加复杂。最后,PowerShell脚本依靠外部进程来完成工作的特定部分。
无文件恶意软件如何工作?
这是网络攻击者如何用无文件恶意软件感染计算机的典型方案:
1.用户访问受感染的网站或在浏览器中打开受感染的电子邮件。
2.漏洞利用工具包扫描计算机以查找涉及PowerShell进程的Java或Flash插件或软件脚本中的未修补漏洞。
3.漏洞利用工具包利用漏洞将无文件恶意软件插入Windows PowerShell或Windows内置的其他系统管理工具。
4.成功安装后,无文件恶意软件会在可用的DLL中运行其有效负载。
5.该恶意软件会在内存中的合法进程内开始其恶意活动。
6.攻击成功!
如何检测和防御无文件恶意软件
无文件恶意软件提出的挑战是寻找一种新的方法来处理系统中的可执行实体。传统方法是沙箱,执行仿真和启发式。
沙盒
每当PowerShell进程运行时,都必须对其进行沙箱处理,以便其所有API调用都被沙箱层包装,并在检测到威胁时彻底监视和阻止所有潜在危险的调用。
但是,由于PowerShell经常执行外部进程,因此沙箱只能帮助检测脚本通过cmdlet执行的可疑操作。对于基于RAM的恶意软件,只有知道沙箱的内容后,沙箱才能提供帮助。如果已知潜在的攻击媒介并且对相应过程进行了沙盒处理,那么这可能是一个不错的解决方案。否则,如果通过电子邮件客户端中的远程代码执行(RCE)漏洞分发了恶意软件,则对浏览器进行沙箱操作将无济于事。
执行仿真
自从PowerShell成为开放源代码以来,现在可以为PowerShell脚本创建一个执行仿真解释器。在允许脚本在实际的PowerShell中运行之前,可以使用这种引擎来对其进行验证。仿真引擎还可以用于处理脚本混淆,并找到可用于将脚本标识为恶意的魔术字符串常量。但是,这无助于您看到执行外部过程后会发生什么。
对于基于RAM的恶意软件,执行仿真是有问题的。虽然不知道线程将在哪一点开始执行shell代码,但也应该从哪一点开始执行仿真。
启发式
可以应用于PowerShell脚本的主要启发式方法是监视新PowerShell脚本的外观以及它们的来源。还必须监视哪些进程正在启动PowerShell进程,因为对于浏览器或Word突然运行PowerShell来说非常可疑。可以进行限制以限制允许启动PowerShell的进程。但是,启发式方法无法就脚本是否是恶意软件做出准确的结论。这仅仅是找出问题所在的计划B。
对于基于RAM的恶意软件,Windows 10中的EMET和Windows Defender Exploit Guard提供了一组反利用技术。这些技术包括Control Flow Guard,CallerCheck和StackPivot。但是这些并不总是足够的,因为例如,现代浏览器使用的JIT代码编译器会在内存中生成可执行代码。因此,存在一组可用于写入和执行且与任何模块都不相关的内存页。因此,Exploit Guard技术无法应用于此类代码,恶意软件可以成功利用这一事实。
银弹
如您所见,无文件恶意软件保护的标准方法有很多缺点。对于基于RAM和基于脚本的恶意软件检测而言,最有效的解决方案是所谓的下一代防病毒软件,它可以分析整个系统的行为,而不是单独的文件和进程。这个想法是,防病毒软件应该能够分解系统事件的时间表,以查看是否存在可证明类似恶意软件行为的操作。具有挑战性的部分是找到一种方法来检测事件流中的恶意软件行为。这很困难,因为在单个恶意软件操作之间会发生多个合法操作,并且这些操作来自操作系统上运行的各种进程。
结论
无文件恶意软件正在成为越来越多的威胁,并且仍然很少有方法可以防御它。基于RAM和基于脚本的恶意软件都有很高的几率被标准防病毒软件所忽视。我们已经讨论了无文件恶意软件检测和保护的可能方法。如果您当前正在研究安全解决方案,Apriiorit可以为您提供我们专业的网络安全开发技能。
参考文献
https://docs.microsoft.com/zh-cn/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-5.1
https://blogs.technet.microsoft.com/srd/2017/08/09/moving-beyond-emet-ii-windows-defender-exploit-guard/
发表评论