导语:FireEye跟踪了一场利用受感染网站传播虚假更新的野外攻击,在payload为NetSupport RAT的情况下,对其使用的JavaScript和相关组件的详细分析。
过去几个月,FireEye跟踪了一场利用受感染网站传播虚假更新的野外攻击活动。在某些情况下,payload是NetSupport Manager RAT(远程访问工具)。 NetSupport Manager是一种商用RAT,可供系统管理员合法使用,用于远程访问客户端计算机。然而,恶意攻击者在受害者不知情的情况下将其安装到受害者系统,滥用此程序来获得未授权访问他们机器的行为。本博客介绍了在payload为NetSupport RAT的情况下,对其使用的JavaScript和相关组件的详细分析。
一、感染向量
这些攻击行动背后的运营者使用受感染的网站来传播伪装成Adobe Flash,Chrome和FireFox更新的伪更新。当用户访问受感染的网站时,会下载恶意JavaScript文件,大多来自DropBox链接。在传送payload之前,JavaScript将基本的系统信息发送至服务器。在接收到来自服务器的进一步命令后,它会执行最终的JavaScript来传送最终的payload。在我们的例子中,传送payload的JavaScript被命名为Update.js,并在wscript.exe的帮助下从%AppData%中执行。图1显示了感染流程。
图1: 感染流程
二、深度分析JavaScript
初始JavaScript文件包含多层混淆。像其他恶意脚本一样,第一层具有混淆,创建并执行第二层作为新函数。JavaScript的第二层包含dec函数,用于解密和执行更多JavaScript代码。图2显示了第二层的快照。
图2: 初始 JavaScript文件的第二层
在第二个JavaScript文件中,恶意软件作者使用一种棘手的方法使逆向工程师的分析变得更加困难。作者使用调用者和被调用者函数代码来获取解密密钥。在正常的JavaScript分析过程中,如果分析人员发现任何混淆的脚本,分析人员会尝试去混淆或美化脚本以进行分析。JavaScript美化工具通常会添加换行符和制表符,以使脚本代码看起来更好,更易于分析。这些工具还尝试重命名局部变量并从脚本中删除未引用的变量和代码,这有助于仅分析核心代码。
但在这种情况下,由于恶意软件使用调用者函数和被调用函数代码来派生密钥,因此如果分析人员添加或删除第一层或第二层脚本中的任何内容,则脚本将无法获得密钥而终止于例外。图3中的代码片段展示了这个技巧。
图3: JavaScript中的反分析技巧
该代码作为函数解密并执行JavaScript代码。此解密函数包含启动网络连接的代码。在解码函数中,命令和控制(C2)URL以及名为tid的值在脚本中被硬编码并被一些编码函数保护。
与服务器的首次通信时,恶意软件以编码格式发送系统的tid值和当前日期,并等待来自服务器的响应。它解码服务器响应并作为一个函数执行响应,如图4所示。
图4: 首次Server通信及响应
来自服务器的响应是恶意软件名为step2的函数执行的JavaScript代码。
step2函数使用WScript.Network和Windows Management Instrumentation(WMI)来收集以下系统信息,然后将其编码并发送到服务器:
Architecture, ComputerName, UserName, Processors, OS, Domain, Manufacturer, Model, BIOS_Version, AntiSpywareProduct, AntiVirusProduct, MACAddress, Keyboard, PointingDevice, DisplayControllerConfiguration, ProcessList;
将系统信息发送给服务之后,来自服务器的响应包含两部分:content2和content3。
脚本(step2函数)解码这两部分。解码后的content3包含名为step3的函数,如图5所示。
图5: 解密和执行响应step3
step3函数包含将解码后的content2作为Update.js写入%temp%目录的代码。Update.js包含下载和执行最终payload的代码。step3函数还将结果数据(如runFileResult和_tempFilePath)发送到服务器,如图6所示。
图6: 释放和执行Update.js的脚本
Update.js文件也包含多层混淆。解码后,JavaScript包含用于释放%AppData%中多个文件的代码,包括7zip独立可执行文件(7za.exe),密码保护压缩文件(Loglist.rtf)和批处理脚本(Upd.cmd)。我们稍后会详细讨论这些组件。
JavaScript使用PowerShell命令从服务器下载文件。它将属性的执行策略设置为bypass,并将windows -style设置为hide,以便使自己对终端用户隐藏。
三、攻击中的组件
图7显示了我们观察到恶意软件作者更新脚本内容的恶意服务器的目录。
图7: 恶意服务器目录
· 7za.exe:7zip独立执行程序
· LogList.rtf:密码保护的压缩文件
· Upd.cmd:安装NetSupport客户端的批处理脚本
· Downloads.txt:IP列表 (可能是感染系统的)
· Get.php:下载LogList.rtf
(一)Upd.cmd
该文件是批处理脚本,用于提取压缩文件并在系统上安装远程控制工具,该脚本使用变量替换方法进行混淆。在我们的分析过程中该文件由恶意软件定期更新。
在去混淆之后,我们可以在脚本中看到批处理命令(图8)。
图8: 去混淆的Upd.cmd脚本
该脚本执行以下任务:
1.使用脚本中的密码及7zip提取压缩文件。
2.解压后,删除下载的压缩文件(loglist.rtf)。
3.禁用Windows错误报告和应用程序兼容性。
4.将远程控制客户端可执行文件添加到防火墙允许的程序列表中。
5.运行远程控制工具client32.exe。
6.添加名为ManifestStore的注册表项或将快捷方式文件下载到启动文件夹。
7.使用属性隐藏文件。
8.删除所有的组件(7zip,脚本,档案文件)。
注意:在分析脚本时,我们在其中发现了一些拼写错误(图9)。是的,恶意软件作者也犯了错误。该脚本可能处于测试阶段,在后续更高版本中,作者删除了这些拼写错误。
图9: 注册表项
(二)痕迹清理
如前所述,该脚本包含用于从受害者系统中删除攻击中所使用部件的代码。在监视服务器的同时,我们还观察到与该代码相关的脚本中的一些变化,如图10所示。
图10: 痕迹清理命令
其中一个变体中突出显示的命令表明它可能会在攻击中释放或使用此文件。该文件可能是一个诱饵文档。
(三)持久性机制
在分析过程中,我们观察到该攻击的两种变体具有不同的持久性机制。
在第一个变体中,恶意软件作者使用RUN注册表项来保持系统中的持久性。
在第二个变体中,恶意软件作者使用服务器上托管的快捷方式文件(名为desktop.ini.lnk)。它下载快捷方式文件并将其放入启动文件夹中,如图11所示。
图11: 下载快捷方式文件
快捷方式文件的目标命令指向已放入%AppData%的远程应用程序client32.exe,这样在系统启动时就可以启动该程序。
(四)LogList.rtf
尽管文件扩展名是.rtf,但该文件实际上是一个7zip压缩文件。此压缩文件受密码保护并包含NetSupport Manager RAT。脚本upd.cmd包含提取压缩文件的密码。
NetSupport工具提供的主要功能包括:
· 远程桌面
· 文件传输
· 远程目录和系统信息
· 在客户机中启动程序
· 地理位置
(五)Downloads.txt
该文件包含一个IP地址列表,这可能是被入侵的系统。它具有IP和User-agent。文件中的IP地址属于不同的地区,主要是美国,德国和荷兰。
四、总结
RAT通常被系统管理员广泛用于合法目的。但是,由于它们是合法应用程序并且易于获得,因此恶意软件作者可以轻松滥用它们,有时也可以避免用户怀疑。
FireEye HX Endpoint平台在攻击周期的初始阶段成功检测到此攻击。
IoC
注册表项
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run : ManifestStore
HKCU\Software\SeX\KEx
文件
%AppData%\ManifestStore\client32.exe
%AppData%\ManifestStore\client32.ini
%AppData%\ManifestStore\HTCTL32.DLL
%AppData%\ManifestStore\msvcr100.dll
%AppData%\ManifestStore\nskbfltr.inf
%AppData%\ManifestStore\NSM.ini
%AppData%\ManifestStore\NSM.LIC
%AppData%\ManifestStore\nsm_vpro.ini
%AppData%\ManifestStore\pcicapi.dll
%AppData%\ManifestStore\PCICHEK.DLL
%AppData%\ManifestStore\PCICL32.DLL
%AppData%\ManifestStore\remcmdstub.exe
%AppData%\ManifestStore\TCCTL32.DLL
%AppData%\systemupdate\Whitepaper.docx
快捷方式
%AppData%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\desktop.ini.lnk
Firewall program entry allowing the following application
%AppData%\ManifestStore\client32.exe
Running process named “client32.exe” from the path “%AppData%\ManifestStore\client32.exe”
Hashes
fc87951ae927d0fe5eb14027d43b1fc3
e3b0fd6c3c97355b7187c639ad9fb97a
a8e8b2072cbdf41f62e870ec775cb246
6c5fd3258f6eb2a7beaf1c69ee121b9f
31e7e9db74525b255f646baf2583c419
065ed6e04277925dcd6e0ff72c07b65a
12dd86b842a4d3fe067cdb38c3ef089a
350ae71bc3d9f0c1d7377fb4e737d2a4
c749321f56fce04ad8f4c3c31c7f33ff
c7abd2c0b7fd8c19e08fe2a228b021b9
b624735e02b49cfdd78df7542bf8e779
5a082bb45dbab012f17120135856c2fc
dc4bb711580e6b2fafa32353541a3f65
e57e4727100be6f3d243ae08011a18ae
9bf55bf8c2f4072883e01254cba973e6
20a6aa24e5586375c77b4dc1e00716f2
aa2a195d0581a78e01e62beabb03f5f0
99c7a56ba04c435372bea5484861cbf3
8c0d17d472589df4f597002d8f2ba487
227c634e563f256f396b4071ffda2e05
ef315aa749e2e33fc6df09d10ae6745d
341148a5ef714cf6cd98eb0801f07a01