导语:无文件恶意软件特征之一是滥用本地合法工具进行恶意活动,这类工具通常被称为“LOLBin”(living-off-the-land binaries),借助它们恶意软件能保持持久性、横向移动或用于其他恶意目的。
无文件恶意软件特征之一是滥用本地合法工具进行恶意活动,这类工具通常被称为“LOLBin”(living-off-the-land binaries),借助它们恶意软件能保持持久性、横向移动或用于其他恶意目的。
但当攻击者需要的功能超出标准LOLBins功能时会发生什么呢? 近期,Microsoft的研究人员发现了一款名为Nodersok的新型恶意软件。它的特殊之处在于,攻击者不单使用本机LOLBins,还将两个外部LOLBins引入到恶意活动中,包含如下两个工具:
· Node.exe,Node.js框架的Windows实现,使用它的Web应用程序数不胜数
· WinDivert,一款功能强大的网络数据包捕获及处理工具
上述两款工具都是合法的,虽然攻击者将合法的第三方工具下载到受感染机器上的行为并不少见(例如PsExec经常被滥用来运行其他工具或命令),但Nodersok却经历了一连串的无文件技术,安装了一对非常特殊的工具,最后的目标是将受感染的机器变成僵尸代理。
攻击概述
在过去的几周中,Nodersok已经感染了数千台机器,大多数都位于美国和欧洲。目标对象大多是消费者,还有3%的在教育、专业服务、医疗、金融和零售等行业的组织中。
图1. Nodersok目标分布
Nodersok除了采用了先进的无文件技术外,还用了一种难以捉摸的网络基础设施,而正是这种网络基础设施让攻击显得悄无声息。
7月中旬,Microsoft Defender ATP遥测发现了MSHTA.exe异常使用,这也是Nodersok的活动痕迹首次被观测到,在短短几天活动量就增加了10倍:
图2.从2019年8月到9月的Nodersok活动趋势
经过跟踪和分析,我们将感染链组合在一起:
图3. Nodersok攻击链
步骤描述如下:
1、用户在浏览恶意广告时下载了恶意HTA文件(或是直接点击下载);
2、HTA文件中的JavaScript代码下载第二阶段组件(另一JavaScript文件或是包含JavaScript代码的XSL文件);
3、第二阶段组件通过隐藏环境变量中的嵌入指令来启动PowerShell命令;
4、PowerShell指令下载并运行其他加密组件,包括:
· 一个禁止Microsoft Defender AntiVirus和Windows Update的PowerShel模块;
· 进行权限提升的二进制shellcode;
· WinDiver包捕获库;
· 运行和响应WinDiver包过滤器引擎的shellcode;
· Node.exe(来自Node.JS框架)
· 最终payload app.js(用Node.JS框架编写的JavaScript,能把用户机器变成代理)
感染链的每个步骤中都只能运行合法的LOLBins,无论是从计算机本身(mshta.exe,powershell.exe)还是从第三方下载的LOLBins(node.exe,Windivert.dll / sys)。所有相关功能都托管在脚本和shellcode中,这些脚本和shellcode几乎都是加密的,解密后仅在内存中运行,绝不会将恶意可执行文件写入磁盘。
上述方式仅在Nodersok的最新变体中体现,而在Nodersok早期活动版本(主payload为05sall.js或04sall.js)中,则是在注册表中安装恶意编码的PowerShell命令,解码后运行最终payload。
初始访问:复杂的远程设备
当用户下载并运行名为Player1566444384.hta的HTML应用程序(HTA)文件时,攻击就开始了。每次攻击中文件名中的数字都不同。Microsoft Defender ATP遥测分析指出,恶意广告是传递HTA文件的最可能的感染媒介。在HTA文件运行,mshta.exe工具通过-embedding命令行参数启动,该参数通常表示启动操作是由浏览器启动的。
此外在执行HTA文件之前,遥测数据一致显示用户有对可疑广告服务或对Cloudfront(一个合法内容交付服务)的访问。Cloudfront不是恶意实体或恶意服务,用户访问时不会警告提示,观察到的域名包括:
· d23cy16qyloios[.]cloudfront[.]net
· d26klsbste71cl[.]cloudfront [.]net
· d2d604b63pweib[.]cloudfront [.]net
· d3jo79y1m6np83[.]cloudfront [.]net
· d1fctvh5cp9yen[.]cloudfront [.]net
· d3cp2f6v8pu0j2[.]cloudfront[.]net
· dqsiu450ekr8q[.]cloudfront [.]net
攻击者应该是采用这些域来传递HTA文件,攻击链中滥用的另一种内容分发服务是Cdn77。观察到的一些URL如下:
· hxxps://1292172017[.]rsc [.]cdn77 [.]org/images/trpl[.]png
· hxxps://1292172017[.]rsc.cdn77[.]org/imtrack/strkp[.]png
第一阶段JavaScript
当HTA文件运行时,它会试图访问一个命名随机的域名来下载JavaScript代码。第一阶段中使用的域寿命很短,通常注册上线后一两天就被删除了,包括相关DNS条目。这使得调查检索传递组件变得更加困难。观察到的域名包括:
· Du0ohrealgeek[.]org – 活动于8月12日至14日
· Hi5urautopapyrus[.]org –活动于 4月21日至22日
· Ex9ohiamistanbul[.]net – 活动于8月1日到2日
· Eek6omyfilmbiznetwork[.]org – 活动于7月23日至24日
此阶段先是从C2中检索JavaScript或可扩展样式语言(XSL)文件,文件具有半随机名称,例如1566444384.js和1566444384.xsl,每次数字均不同;下载并运行此文件后,再与远程C2联系,接着下载名为1566444384.mp4的RC4加密文件和名为1566444384.flv文件的解密密钥。解密后的MP4文件是启动PowerShell的JavaScript,代码片段如下:
值得注意的是,恶意PowerShell脚本被隐藏在名为“ deadbeef”的环境变量中(第一行),然后使用编码命令(第二行)启动PowerShell,该命令只运行“deadbeef”变量的内容。这种技巧通常用于隐藏真正的恶意脚本,这样它就不会出现在PowerShell进程的命令行中。
第二阶段PowerShell
感染继续进行,通过启动几个PowerShell实例来下载并运行其他恶意模块。所有模块都以RC4加密形式托管在C&C服务器上,运行之前需要进行动态解密。PowerShell的各种实例均执行以下步骤:
1.下载module.avi,该模块执行以下操作:
· 禁用Windows Defender Antivirus
· 禁用Windows updates
· 运行二进制shellcode,通过自提升的COM接口来尝试特权提升
2.下载Cdn77服务上托管的模块trpl.png和strkp.png
3.从官方nodejs.org网站下载合法的node.exe工具
4.植入WinDivert数据包捕获库组件WinDivert.dll,WinDivert32.sys和WinDivert64.sys
5.执行通过WinDivert来过滤和修改某些传出数据包的Shellcode
6.最后,植入JavaScript payload以及它所需的一些Node.js模块和库,并通过node.exe运行。
到这步算是这感染结束,此时网络包过滤器处于活动状态,机器作为一个潜在的代理僵尸在工作。当一台机器变成了一个代理,它可以被攻击者作为一个中继访问其他网络实体(网站,C&C服务器,被攻击的机器,等等),继续执行隐秘的恶意活动。
基于Node.js的代理引擎
这并不是滥用Node.js的首例威胁,除了干净利落之外,Node.exe还有一个有效的数字签名,允许恶意JavaScript在可信进程的上下文中运行。JavaScript payload本身则相对简单:只包含一组基本函数,允许它充当远程实体的代理。
图4.基于Node.js的恶意代理的
代码似乎仍处于起步阶段,仍在开发中,但确实有效。它有两个目的:
· 重新连接到远程C&C
· 接收HTTP请求以代理形式回传
它支持SOCKS4A协议。虽然我们没有观察到来自攻击者的网络请求,但是我们编写了基于Node.js的C&C服务器应用程序可能的样子:服务器向连接回它的受感染客户端发送HTTP请求,并接收来自这些客户端的响应。我们对恶意JavaScript恶意软件进行了一些修改,以使其记录有意义的消息,运行JavaScript服务器,运行JavaScript恶意软件,并按预期代理HTTP请求:
图5:对调试消息进行编号以使其更容易遵循执行流程
服务器启动,然后客户端启动并连接到它。作为响应,服务器将HTTP请求(使用Socks4A协议)发送给客户端。该请求是一个简单的HTTP GET。客户端将HTTP请求代理到目标网站,然后将HTTP响应(200 OK)和HTML页面返回给服务器.该测试表明可以将该恶意软件用作代理。
Nodersok早期版本的05sall.js
如前所述,该恶意软件存在其他变种。05sall.js的的结构类似于上述模式,但payload不是在Node.js中开发的(而是一个可执行文件)。此外,除了充当代理之外,它还可以运行其他命令,如更新、终止或运行shell命令。
图6.可以由05sall.js变体处理的命令。
该恶意软件还可以处理JSON格式的配置数据。例如,此配置被编码并存储在受感染机器的注册表中:
图7.配置数据公开组件和文件名
该配置表明恶意软件的模块化性质。它显示了感染中使用的两个模块的名称(分别名为block_av_01和all_socks_05)。
WinDivert网络数据包过滤
在分析过程中还有最后一个未解决的问题:WinDivert包捕获库是怎样的?
我们从其中一个活动中恢复了一段shellcode。此Shellcode是解码过的,并且只能通过PowerShell命令在内存中运行。它安装以下网络过滤器(使用WinDivert能识别的语言):
这意味着Nodersok通过拦截发送的数据包来启动TCP连接。过滤器激活后,shellcode仅对与以下特定格式匹配的TCP数据包感兴趣:
图8. Nodersok感兴趣的TCP数据包格式
数据包必须具有标准的以太网,IP和20字节的TCP标头,外加20字节的TCP附加选项。这些选项必须完全按照上图所示的顺序显示:
02 04 XX XX –最大网段大小 01 –无操作指令 03 03 XX – Windows Scale 04 02 –SACK permitted 08 0A XX XX XX XX XX XX XX XX –时间戳
如果检测到符合此标准的数据包,则Nodersok会通过将“ SACK Permitted”选项移动到数据包的末尾(其大小扩展四个字节),然后将原始选项字节替换为两个“ No operation”字节来对其进行修改。
图9. Nodersok对其进行更改后的TCP数据包格式:“SACK permitted”字节(红色)已移动到数据包的末尾,原始位置已由“ No operation”(黄色)取代。
这种修改可能对攻击者有利,例如帮助规避某些HIPS签名。
使用Microsoft Defender ATP阻止Nodersok活动
Nodersok凭借先进的无文件技术和分布式网络构架让这场行动在我们眼皮底下悄悄运行了一段时间。如果我们排除攻击所利用的所有干净和合法文件,则剩下的只是初始HTA文件、最终payload的基于Node.js的和一堆加密文件,传统的基于文件的签名不足以应对这种复杂的威胁,这也是为什么我们投入了大量资源来开发强大的动态检测引擎并通过Microsoft Defender ATP提供最先进的纵深防御的原因。
本文翻译自:https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/如若转载,请注明原文地址: https://www.4hou.com/malware/20655.html