基于无文件攻击技术与防御综述

2021-11-13 08:40林明亮彭贵超
新一代信息技术 2021年17期
关键词:注册表自带攻击者

林明亮,彭贵超

(国家计算机网络应急技术处理协调中心海南分中心,海南 海口 570100)

0 引言

无文件攻击是内存层面的攻击方式,设计之初就是为了规避传统的已知检测技术。这类攻击最早发现是2001年的Code Red蠕虫[1]。从2001年夏天到2017年这类攻击开始流行,人们才找到直接的证据证明这类攻击的存在。接近77%的成功入侵是基于无文件攻击技术,这个成功率几乎是已知的基于文件攻击的10倍。

无文件攻击使用的技术也叫做“Living off the land”(LotL),即不落地存活技术。这类攻击最主要的特点就是没有恶意代码或者攻击载荷作为一个文件被存储在磁盘上。其次是这类攻击使用的是安全的,预安装的,操作系统已有的工具。这也是在攻击的前后没有任何恶意活动的痕迹被发现的原因。这种类型的攻击使用系统工具,如Powershell,WMI[2]以及其他 Windows管理工具且通过修改注册表键值的方式来实现对目标的长期控制,还有一些基于java的恶意代码可以利用java的特性在内存中存活,实现无文件的webshell后门。

1 无文件攻击技术类型

无文件攻击方式主要可以分为四种类型:只在内存中运行的攻击、无文件持久化攻击、非可执行文件攻击、利用系统自带工具。在攻击链的入侵环节一般通过利用漏洞获取权限达到直接在内存中执行代码的目标。常见的攻击手法为发送一个带有恶意代码的 office文件[3]或者在其他机器的快捷方式文件中插入恶意代码。这个环节可以存在多种无文件攻击类型,包括:只在内存中运行的攻击,如SMB永恒之蓝漏洞;非可执行文件攻击,如带有恶意代码的 office文件宏;利用系统自带工具,如RDP弱口令等;当一台设备被入侵后,一般会进入持久化环节,来保持攻击者对这台设备的权限,这个环节主要使用无文件持久化的攻击,如在注册表中写入Jscript代码、在计划任务中创建执行恶意代码的任务等方式;当获取系统权限并加以巩固后,攻击者将执行攻击载荷来达到特定目的,这个环节使用的攻击类型包括:利用系统自带工具,如net、sc、psexe等;只在内存中运行的攻击,如Mirai DDoS;非可执行文件攻击,如Powershell脚本。

1.1 只在内存中运行的攻击类型

这类攻击主要是依靠漏洞或者系统的弱口令获取系统权限,然后在内存中直接执行恶意代码。这类攻击的代表Code Red和SQL Slammer蠕虫都是利用Windows系统服务的漏洞直接在内存中执行它们的攻击载荷。WannaCry勒索软件使用的永恒之蓝漏洞和双子星后门也是这类攻击的一种。如果系统存在远程命令执行漏洞,攻击者首选都是直接在内存中执行恶意代码而不让文件在硬盘上落地。如果只是在内存中运行的话并不足以让这些恶意代码持久控制目标,只要重启系统后,内存更新,目标就会失去控制。但是,有些恶意代码并不在意是否可以持久控制目标。例如对于专门控制物联网设备的 mirai僵尸病毒[4]来说,一个系统虽然重启了,但是如果不能及时修复漏洞的话,攻击者很容易就能再次获取控制权。另一方面,对于特定的攻击组织来说,目标核心服务器一般不会轻易重启,而这段时间已经足够他们找到想要的东西并清除痕迹了。

1.2 无文件持久化攻击

攻击者在获取权限后需要巩固权限,让控制持久化。在Windows系统上有多种方式可以让攻击者获取持久化的控制权限且无需文件在硬盘上落地。下面主要介绍几种比较主流的无文件持久化攻击方式。

(1)Windows注册表[5],最常用的无文件攻击维持权限的方式就是将恶意代码写入 Windows注册表中,2014年发现的恶意代码Trojan.Poweliks就是基于注册表的攻击。后面出现的恶意代码Trojan.Kotver和Trojan.Bedep也沿用这个攻击方式。

通常,恶意代码会将自身隐藏在注册表的自启动子键里,这样在系统重启后其就会被立即执行。在这个基础上,一些恶意代码还会将创建的自启动子键命名为非ASCII字符。这样可以防止普通的检测工具显示这个键值,从而起到混淆及规避检测的作用。另外,恶意代码还可以更改注册表中该子键的访问权限,使其难以被删除。隐藏在注册表中的恶意代码内容还可以经过混淆放置在多个键中[6],这样每次攻击都有不同的特征。如图1所示,攻击代码隐藏在注册表的自启动项中,并调用图2中其他注册表项的键值,全程没有任何文件在硬盘中落地,且使用了编码技术来规避安全软件的检测。

图2 被调用的注册表键值Fig.2 the key value to be called

注册系统服务也可以利用类似的原理。一个攻击者可以在注册表中添加或者直接使用 sc.exe命令行工具来创建一个系统服务。如图3创建系统服务命令:

图3 创建恶意系统服务Fig.3 create malicious services

(2)WMI,WMI的数据加密存储在文件夹%System%wbem epository里的多个文件中。攻击者可以根据一个特定的事件创建一个filter,然后创建一个 consumer方法来在这些事件发生时执行恶意代码。事件可以是一天中的某个时间,如Unix中的cron任务那样。这种情况下,三个WMI类是必须的:filter类、consumer类以及一个FilterToConsumerBinding类将它们联系起来。攻击载荷一般为一个Powershell脚本以及将其存储在注册表中的脚本。这些攻击载荷可能会全部存储在WMI库中。图4为Cozyduke攻击团队使用的方式。

图4 WMI启动Powershell的consumer类Fig.4 WMI consumer that starts powershell

(3)计划任务,计划任务可以在特定时间在本地或远程执行命令。例如,图5计划任务执行Powershell下载命令:

图5 计划任务执行Powershell下载恶意代码Fig.5 schedule task using powershell download malware

(4)在关机时调用,尽管它不是完全的无文件攻击,在关机时调用有时也会被攻击者使用。Dridex恶意代码的一些变种会创建一个自启动注册表项并将恶意代码存放在硬盘中。当系统启动时,这些恶意代码会在内存中执行并将注册表项及硬盘上的恶意代码删除。在某种意义上,这些恶意代码只运行在内存中,因此也算是无文件攻击的一种方式。这类攻击监测关机指令,当关机指令发起后,它会在系统中创建新的注册表项以及以新的名字存放在硬盘中,等待下一次重启,这样它可以最小化在硬盘中的暴露时间。

1.3 非可执行文件攻击

一个非可执行文件攻击基本都会与一些脚本或合法工具相关联,因此严格来说这种攻击类型应该算是利用系统自带工具的子类。这类攻击大多数使用Powershell、WScript、CScript这些系统自带的脚本框架来执行恶意代码[7]。一般的office文档或者PDF文档会包含恶意脚本代码,在打开这些文档的时候会弹出是否启用编辑等提示框。安全意识不高的用户会忽略这些提示,导致恶意代码执行。

Office文档也并非需要宏才能执行脚本。恶意代码Trojan.PPDropper是一个PPT形式的病毒,它可以通过用户打开一个链接来执行恶意代码。如图6所示这个链接有三个要素:

图6 office文档执行恶意代码三个要素Fig.6 office running malware within three elements

这些代码解码重组后,如图7所示为Powershell攻击命令:

图7 重组后的Powershell命令Fig.7 rebuild powershell command

1.4 利用系统自带的工具

系统自带的工具是经过安全校验的工具,利用这些工具也可以实现攻击者的一些攻击目的。如 net user/add可以在系统上添加用户,net localgroup administrators/add可以将添加用户加入到管理员组中,query user可以用于查询当前系统登录的用户情况,net view/domain可以查看当前用户所在域情况,tasklist/svc可以查看当前执行的进程情况,以及前面提到过的rundll32.exe用于加载特定动态链接库,sc.exe用于对系统的服务进行操作,schtasks对计划任务进行操作等。所有的这些操作均可以利用系统自带的工具来完成。

2 无文件攻击方式的防御

应对无文件攻击,我们自身以及所在的部门应该建立事前预防、事中阻断、事后响应的体系化防御机制,才能有效地防护网络的安全,避免数据资产遭受不必要的损失。事前预防建议做好这些安全措施:如无必要,禁用 Powershell和WMI;安装所有的Windows更新,尤其是安全更新;检查已安装的应用是否已更新至最新版本;定期检测网络中是否有非预期的大量数据流动,这可能是攻击者正在窃取数据;定期更新浏览器;留意邮件中下载的附件;使用可以监测内存恶意代码执行的安全工具等。事中阻断针对无文件攻击涉及攻击链的三个环节,可以使用以下方式进行检测阻断[8]:因入侵环节大多使用漏洞利用或者使用钓鱼邮件发送带有恶意宏的 office文档发起攻击,漏洞利用防御可以有针对性地防御系统漏洞被攻击者利用,而行为检测则可以针对恶意宏脚本代码执行的行为进行检测阻断;在持久化环节,WMI、系统注册表、计划任务等关键区域可能会留下攻击的痕迹,实时监测这些区域的危险更新以及定期对这些区域进行扫描可以有效应对这个环节的攻击;执行攻击载荷环节恶意代码已经在内存中运行,因此对系统重点程序的行为检测尤为重要,如Powershell的一些危险操作。事后响应主要关注以下几个方面:评估攻击造成的损失,如泄露了多少数据;对攻击路径进行封堵,还原攻击路径并封堵;人员培训,提高安全意识,避免再次发生类似事件等事后复盘提升整体防御能力。

3 结论

本文介绍了无文件攻击技术和防御。相比于传统的基于恶意文件的攻击,无文件的攻击方式更加难以检测,对现有的安全防护提出了一个较大的挑战。本文从无文件攻击背景介绍到这类攻击方式的细节进行剖析,并提出建立事前预防、事中阻断、事后响应的防御体系来抵御这类攻击的思路。

猜你喜欢
注册表自带攻击者
基于贝叶斯博弈的防御资源调配模型研究
自带滤镜的底妆,你用了多少?
周迅:天才,自带拨乱反正的能量
正面迎接批判
正面迎接批判
更上一层楼 用好注册表编辑器
好的爱情自带成长属性
注册表的便捷用法
注册表编辑器也玩“失忆”
学习器揭开注册表面纱