特殊恶意软件JsOutProx问世,或能绕过SymantecVIP验证
Yoroi安全团队近期检测到了一类新型恶意软件,它具有复杂的混淆和反逆向技术,让研究人员在分析时遭遇了许多困难,且似乎与当前的主流恶意软件都无关联,于是研究人员决定对其深入研究。
技术分析
表1.样本信息
初始感染文件是一个又一万多行高度混淆的代码的Javascript文件。文件的第一行嵌入了一个由Base64编码的元素组成的大型数组,对它原始解码后产生的数据无法理解,证明了还有更复杂的保护层。
图1.具有Base64编码元素的数组
浏览代码时,我们注意到一些疑似初始化的指令。函数“ t_ey”是“ t_ep”数组中字符块的去混淆函数,使我们能够恢复一些明文。
对代码初步整理后,我们发现了一些值得注意的信息,例如在恶意软件执行阶段初始化的静态配置,以及远程C2地址91.189.180.199(该地址在挪威服务器供应商“ ServeTheWorld”的名下),代码中还有一个名为“ JsOutProx”的特殊标签。
图2.恶意软件的一些基础信息
继续分析代码,我们重构了攻击者用来混淆负载的方法:所有必要的信息都经过了加密、拆分,然后以Base64块的形式编码,并存储在不同的结构中,这些结构分别称为“ta”、“t_ep”、“t_eq”。
图3.包含Base64数据的结构
通过解码例程“t_ey”,能在运行时检索明文代码,进而使恶意软件的结构具体化,恶意软件的结构存储在“t_fT”对象中,如下图所示。
图4.恶意软件的核心结构
结构里包含了恶意软件的对象和函数。很多时候对象之间都有命名对应关系,例如“Outlook”和“OutlookPlugin”,或者“Proxy”和“ProxyPlugin”。这表明该恶意软件具有一个模块化的结构,其中包含能够执行各种操作的特定插件,通过填充关联对象来窃取数据。例如,“OutlookPlugin”填充“Outlook”对象后就能窃取关于电子邮件和联系人的信息。
每个插件都嵌入了一个名为“ receive”的混淆函数用于执行特定的操作。该函数名称是常量,表示恶意软件模块之间的一种通用接口。
图5.将“ receive”函数转换为“ InfoPlugin”
检入和命令列表
一旦创建了主结构,恶意软件运行的第一个函数就是“init”。它的设计目的是为受感染计算机创建一个标识字符串,并将标识字符串存储到“t_fT[" ID "] "变量中。
如下图所示,标识字符串是由计算机名、用户名和操作系统版本组成,后接一个后缀,其中包含恶意软件正在执行的当前操作。在本例中是“ ping”,一种确保命令和控制服务已启动并正在运行的心跳机制。
图6.创建受害者ID
然后恶意软件不断循环,在循环中每5秒调用一次“ receive”函数。“ receive”函数本质上来说是一个能让攻击者与恶意软件交互的接口。
恶意软件连接到C2并检索字符串,字符串指示了下一个要执行的命令进入“np[0x0]”变量。恶意软件有许多功能,能够处理一个完整的感染生命周期,可以更新、重启,或是执行另一段JavaScript代码、其他VB脚本,以及删除自身痕迹。
图7.支持命令
综上所述,分析样本支持以下操作:
表2.支持的命令
此外,主循环结构默认包括一系列IF-Else,用于计算接收到的字符串并检查特定的前缀。每个前缀都与一个插件模块相关联。
图8.调用插件
分析选择链可以重建此样本完整的支持插件列表。
表3.恶意软件支持插件
现在,我们把注意力转移到函数和插件的功能及工作机制上,并简要介绍其中最值得注意的一些:
持久性
顺便说一下,为了确保重启后仍然存在,恶意软件将初始JS脚本的副本写入“%appdata%”和“%temp%”文件夹,通过流行的“HKCU\Software\Microsoft\Windows\CurrentVersion\Run”注册表项设置系统的持久性。
图9.设置持久性
插件模块
从插件数量上可以看出这个恶意软件是相当成熟且危险的。有些插件对某些RAT和间谍软件的标准功能重新进行了编码,包括一些不常见的功能。
· “Process”插件
ProcessPlugin能够操作系统中运行的其他进程,既可以按PID和名称杀死进程,也可以通过WSH或WMI创建新进程,还可以收集特定进程的内存转储。这项功能对常规的恶意软件而言并不常见。它的存在可能表明幕后的运营人员会对受害者环境作分析,通过内存抓取来窃取数据。
图10.ProcessPlugin的部分代码
· “Dns”插件
DnsPlugin处理机器的DNS配置。它可以向C2发送当前配置并设置新配置,如下图所示。
图11.DnsPlugin的部分代码
· “Token”插件和SymantecVIP对象
这个插件很有趣,从名字来看是窃取令牌,但它是专门为盗窃SymantecVIP一次性密码而设计的。SymantecVIP是赛门铁克团队开发的一种多因素身份验证技术,许多公司都有采用他家的服务。
图12. TokenPlugin的部分代码的
· “ Outlook”插件
OutlookPlugin将植入程序武器化。它具备常见的信息窃取功能,使攻击者能够收集账户信息和联系人列表。
此插件是嵌入在恶意软件中的唯一一个信息窃取插件。
商品恶意软件中,通常能支持对多个电子邮件客户端、Web浏览器和ftp客户端的窃取工作,但此恶意软件仅能处理Outlook,而Outlook正是大多数企业环境中使用的标准电子邮件客户端。
图13.部分OutlookPlugin代码
· “Prompt”插件
PromptPlugin提供了另一项有趣的功能,它使攻击者能够通过C2向受害者显示自定义消息提示。
图14. PromptPlugin部分代码
JS和.NET之间的桥梁
所有的JavaScript插件似乎只是攻击者用来与恶意软件通信的高级接口。深入研究代码搜索插件的实现时,我们遇到了另一个名为“ DotUtil”的神秘组件,该组件似乎是JavaScript接口与实际操作实现之间的链接。
同样,在挖掘JS代码时,我们发现了一种称为“ hasDotnet”的方法,让我们怀疑是否存在其他.NET部件,用以掩盖上述某些功能的实现。此外,此方法包含对“ DotUtil”模块实例下载和内存加载的引用。
图15. DotUtil模块的一部分
通过动态分析恶意软件,我们拦截名为“ libDotJs.dll”的.NET DLL的下载。分析后发现在它实现的函数和到“DotUtil”组件中声明函数之间存在一个完整的映射。
图16. DotUtil和.NET DLL之间的映射
从更广的角度来看,我们可以断言植入程序至少有两个不同的层:JavaScript接口作为第一阶段传递到目标机器,并不断进行更改以降低其可检测性,从而提供了核心机制以确保对目标计算机的灵活访问,以及利用.NET依赖项的高级功能层。
图17.恶意软件的宏观透视
结论
以JsOutProx的复杂性和工程级别来看,在当今恶意软件世界中算是比较特殊的。它是一个具有特殊远程访问功能的工具箱。从架构的角度来看,JsOutProx包含了核心引擎内的所有函数原型,并且可以在运行时进行远程扩展。
JsOutProx的功能实现则通过对“ dotUtil”类(NET插件的加载程序)实现的共享接口与JavaScript内核分离。这些类通过序列化远程提供,这种解耦提供了可延展的模块化实现,使恶意软件背后的运营人员能够进行通用的代码管理。另外JsOutProxy还有处理SymantecVIP技术的功能,我们推测此举是应对高价值的企业目标。
JsOutProx于今年12月首次出现,目前可能处于开发阶段,Cybaze-Yoroi Zlab将保持持续关注。
IOC
Hashes:
6bf0d9a7ca91f27a708c793832b0c7b6e3bc4c3b511e8b30e3d1ca2e3e2b90a7
af10e6d1e3a3b4ed1d5524da25b782a4deddbd14d04e259f13dd1502d43b3045
C2:
91.189.180.199:9989
Yara Rules
rule JsOutProx_Dec_2019{ meta: description = "Yara Rule for JsOutProx" author = "Cybaze Zlab_Yoroi" last_updated = "2019-12-19" tlp = "white" category = "informational" strings: $re1 = /,'([0-9a-zA-Z])+=',/ $re2 = /[a-zA-Z]{1}_[a-zA-Z]{2}\[0x/ $a1 = "WScript" $a2 = "0x" condition: $re1 and $a1 and #a2>20000 and #re2>1000 }