最近,宅宅听说一个朋友和游戏里认识了两个月队友奔现脱单了,还有这种操作?闲(xiang)来(zhao)无(dui)事(xiang)的宅宅准备找几个网游玩玩。
打开某个2017热门网游排行榜,宅宅发现排名靠前的热门游戏都相当大手笔,代言人请了张家辉、古天乐、陈小春一票男神。
抱着试一试的心态宅宅选了一个看起来并不难的游戏,顺手点了下载,等待安装的过程中还特意选了一个人美奶大的角色,准备进行一番厮杀。
万万没想到,下载下来的竟然是病毒……
恶性病毒?热门游戏正被病毒团伙利用
近日,有病毒团伙利用被制作者伪装成安装数据统计组件的后门病毒“Backdoor/Jsctrl”,通过植入《传奇世界》、《传奇霸业》、《蓝月传奇》、《九天封神》等热门游戏的微端安装包内,用户在PChome、下载吧等网站下载某些软件时,会被捆绑安装这些游戏微端,而病毒也借机进入用户电脑。
病毒入侵电脑后,病毒制作者可以通过修改服务器上的后门代码,远程操控受害者电脑,进行多种破坏行为,包括下载其他病毒程序、后台暗刷流量等。
据雷锋网宅客频道(微信公众号:letshome)了解,这一病毒致使每天约 30-50 万台电脑感染病毒,且病毒“Backdoor/Jsctrl”极为顽固、隐蔽,不仅无法通过卸载游戏清除,还具备“反追踪”设置,可以监测远程协助软件(如安全厂商常用的TeamViewer等)中的运行窗口,一旦发现正在被远程协助,则会彻底删除病毒相关所有文件,以免被安全研究人员追踪。
这是如何实现的?
样本分析
火绒安全实验室在追踪过程中,发现该后门病毒在上述游戏微端按转包运行后即被植入,且即便游戏被卸载仍然会常驻系统,该病毒会在远程 C&C 服务器存放的 JavaScript 代码控制下,利用病毒中封装的 JavaScript 对象可以执行任意 Windows API 或其他后门逻辑(如:下载、运行命令行等)。并且,该 C&C 服务器下发的后门脚本仍处于持续更新状态。
上文所述的几款游戏微端安装包中都包含有相同恶意代码,下文以 cqsj_Y_905908_feitian.exe(《传奇世界》游戏微端安装包)为例展开详细分析。此类安装包的文件名通常为“xxxx_Y_nnnnnn_*.exe”(‘x’代表任意字母,‘n’代表任意数字,‘*’代表部分内容不固定)。安装包整体逻辑如下图所示:
病毒执行流程图
游戏微端安装包
该病毒安装包中都包含有一个病毒动态库(病毒动态库名通常为“游戏全拼首字母.dll”,如:“tdzs.dll”对应“天地诸神”)。文件属性如下图所示:
安装包文件属性
将NSIS安装包进行解包后,可以在NSIS脚本中看到tdzs.dll调用逻辑。如下图所示:
NSIS脚本中调用tdzs.dll代码
运行安装包之后,可以看到其进程调用关系及tdzs.dll调用参数。如下图所示:
安装包运行
安装后,游戏登陆界面如下:
游戏运行界面
通过安装发现,虽然安装包文件信息为“天地诸神微端”,但是安装后的游戏界面却是《37传奇世界》登录界面,安装逻辑较为混乱。
tdzs.dll
tdzs.dll动态库在文件信息中说明自己是“安装数据统计”程序,且在软件卸载时,该病毒动态库也会被一起删除,从而诱使用户误以为该动态库只进行“安装数据统计”操作。文件信息如下图所示:
安装包释放的病毒动态库文件属性
微端卸载程序删除tdzs.dll相关NSIS脚本,如下图所示:
卸载相关NSIS脚本
虽然tdzs.dll会被卸载程序删除,但是该动态库是直接被安装包进行调用的,所以通常在用户对游戏微端进行卸载时,病毒逻辑已经执行完毕。tdzs.dll动态库执行参数,如下图所示:
tdzs.dll运行参数
在tdzs.dll被rundll32调用后,首先会在全局构造过程中创建名为external的JavaScript对象,在该对象中封装了很多较为底层的方法(相较于在浏览器中执行的JavaScript脚本),用于执行其从远端服务器获取到的后门代码。
在报告中所提及的三个病毒样本(tdzs.dll、随机名服务和up_zlib1.dll)中,关键的字符串数据都是经过XOR加密的,每一个字符串解密都对应一个独立的解密函数。解密代码举例,如下图所示:
解密字符串
构造external对象的相关逻辑以在对象中添加callapi方法为例,如下图所示:
向external对象添加方法
callapi函数实现
除了callapi函数外,external对象中还实现有诸多方法,本文所提及的三个病毒样本运行远程后门脚本逻辑全部都依托于external对象。部分关键方法列表,如下图所示:
external中封装的方法列表
在构造external对象之后,会统计当前进程关系信息和一些本地计算机信息(如:IP地址、MAC地址、CPU ID等),之后再将数据转为字符所对应的二进制字符串,经过加密后将最终数据发送到C&C服务器(hxxp://cdn.37wanyou.com)的53端口。相关代码如下所示:
获取进程关系信息
获取本地计算机信息
最终上传至服务器中的数据,如下图所示:
上传的数据
在将加密后的数据上传C&C服务器之后,C&C服务器会返回一段被加密的压缩数据。在将数据还原后,程序会得到一个后门JavaScript脚本,通过运行脚本执行后门逻辑(其他病毒组件也同样存在相同逻辑,下文不再赘述)。
下载数据解密逻辑如下图所示:
下载解密JavaScript脚本
调用ScriptControl.AddObject引用external对象后,执行后门JavaScript代码。脚本执行逻辑,如下图所示:
执行后门JavaScript代码
程序执行的后门脚本可以通过云端控制,现阶段病毒已经进入蛰伏期,tdzs.dll所执行的远程脚本已经不再释放后续病毒,只有个别环境才能运行出远程脚本调用逻辑,进行软件推广。另外,通过终端威胁情报系统检索与该病毒相关的行为信息时,可以发现除了《传奇世界》游戏微端带有tdzs.dll病毒动态库外,还有其他游戏微端安装程序(下图为《九天封神》相关数据)也会释放运行该病毒,且调用参数与前文所述完全相同。火绒捆绑拦截功能日志,如下图所示:
捆绑拦截日志
随机名服务
该病毒服务的文件名是通过固定字典随机组合两个英文单词而成,文件名例如:AcceleratorLeaders.exe、AcronymOcclude.exe等等。病毒服务启动后会创建一个相同的子进程,父进程为守护进程,当子进程被结束时会重启启动子进程。代码逻辑,如下图所示:
等待进程退出
重新创建进程
在子进程创建之后,父进程会执行与tdzs.dll中相似的信息收集流程(收集进程关系信息和本地计算机信息),之后由父进程将加密后的数据上传至C&C服务器(hxxp:// update.wanyou7.com:3900/config/gameupdate.asp)。上传后,服务器会返回JavaScript脚本进行下一步病毒释放和执行(执行JavaScript脚本相关逻辑与上文相同)。但如上文推断,现阶段该病毒已经进入“蛰伏期”,该链接已经无法访问。在服务还可以继续释放病毒文件的时,病毒服务会释放up_zlib1.dll并使用rundll32进行执行,由于服务文件说明为“游戏微端更新”,使得其释放其他病毒文件时不会引起用户注意。
病毒服务的文件信息,如下图所示:
病毒服务文件信息
病毒服务所使用的签名并不固定,如火绒截获的另一个相同的病毒服务文件信息,如下图所示:
文件信息
病毒服务使用rundll32调用up_zlib1.dll,如下图所示:
病毒服务调用up_zlib1.dll日志
子进程也会将上述进程信息和计算机数据发送至C&C服务器的另一个服务页面(hxxp:// update.wanyou7.com:3900/config/crm.asp),上传数据后返回JavaScript脚本并进行执行。
JavaScript脚本逻辑,如下图所示:
crm.asp页面中获取到的JavaScript脚本
如上图,如果检测到远程协助窗口类名(如:TeamViewer等)和数据包过滤分析工具进程(包括WireShark、Fidder、HttpAnalyze),则会调用external对象中的SvcExecScript方法执行远程C&C服务器(hxxp://update.wanyou7.com:3900/config/service.asp)中存放的JavaScript脚本执行自毁逻辑。自毁主逻辑代码,如下图所示:
自毁代码
如图,JavaScript脚本会依次执行close_proc_has_module、del_self和del_dllservice三个函数执行自毁逻辑。close_proc_has_module函数用于遍历遍历进程,将进程模块中包含“up_zlib1.dll”的进程全部结束。具体逻辑,如下图所示:
结束所有加载指定模块名的进程
del_self函数主要用于删除当前进程镜像文件,如下图所示:
del_self函数代码逻辑
del_dllservice函数逻辑会先检测是否存在指定服务名的注册表启动项(如果未指定则删除自身服务项),如果存在则通过调用“sc delete”和“sc stop”结束并删除病毒服务。如下图所示:
del_dllservice函数代码逻辑
up_zlib1.dll
up_zlib1.dll动态库被rundll32调用后会创建隐藏的web控件,在后台暗刷流量,并且在访问导航页面的同时,病毒还利用JavaScript脚本模仿用户操作,欺骗导航站的作弊检测逻辑。在显示web控件窗口后,执行效果如下图所示:
执行效果
up_zlib1.dll动态库由服务进行调用。调用参数,如下图所示:
up_zlib1.dll调用参数
调用参数网址(hxxp://121.43.33.129:8064/apithird/getlink)中存放有一段JavaScript脚本,如下图所示:
JavaScript脚本片段
在进行上述访问时,host_id属性是随机的,每个host_id所对应的script链接属性各不相同。在拿到host_id后,动态库会使用rundll32再次调用up_zlib1.dll动态库,网址参数中传入了host_id和来自delay成员中的任意数值。如下图所示:
运行参数
此次在服务器中获取到的内容,如下图所示:
第二次请求获取的内容
url_list属性中存放的是web控件在刷取流量时要跳转的网址,如果网址为“about:blank”,则跳转网址会由script属性网址返回的JavaScript脚本进行设置。病毒会创建出一个隐藏的窗体,之后在该窗体上绘制web控件。在创建窗体之前,程序先会检测当前模块文件所在目录下是否存在扩展名为“.debug”的同名文件,如果存在则会显示web控件所在窗体,病毒作者可能在测试时使用。
创建窗体相关代码,如下图所示:
创建窗体
窗口类初始化
在窗口响应WM_CREATE消息时会设置一个Timer,间隔为8秒。在窗口回调函数接收到WM_Timer消息后,如果网页加载状态readyState值为complete或者interactive,则在网页中插入从远端服务器地址(http://tj.im991.com/dh/view_360_uv_so.asp)中获取到的JavaScript脚本。相关代码,如下图所示:
窗口回调函数
检测readyState相关逻辑,如下图所示:
检测readyState
如果页面加载完成,则在页面中插入script标签执行JavaScript脚本。如下图所示:
创建script标签
添加脚本内容
程序会在获取到C&C服务器地址(http://tj.im991.com/dh/view_360_uv_so.asp)末尾拼接“t=1”参数,如果没有该参数则无法获取到完整的JavaScript代码。“t=1”参数所影响的关键代码,如下图所示:
脚本关键逻辑
__get_url函数用于从网址列表中随机获取网址,如下图所示:
__get_url函数逻辑
模拟用户操作部分主要可以进行搜索关键字和点击网页连接操作,如下图所示:
模拟用户操作
溯源分析
说了这么多,这个神秘的病毒团伙是否有露出蛛丝马迹?
据雷锋网(公众号:雷锋网)了解,火绒安全实验室在对多数主流下载站进行排查之后,发现 “下载吧”和“电脑之家”下载站现今所提供的高速下载器会推广该病毒安装包。如下图所示:
推广列表
虽然病毒安装包释放的动态库名称不尽相同,但是调用参数与前文所述tdzs.dll完全相同,且代码逻辑也完全相同。这些病毒安装包的下载地址都来自于域名“hxxp://cdn.xunshark.cn”,且这些病毒安装包与前文提到的病毒安装包(cqsj_Y_905908_feitian.exe)签名同为“北京迅XXX有限公司”签名。如下图所示:
安装包签名信息
安装包所释放病毒动态库签名信息也同为“北京迅XXX有限公司”,如下图所示:
病毒动态库文件签名信息
该组病毒文件中,up_zlib1.dll的签名信息还涉及另一家公司“北京神州XXXXXX有限公司”。签名信息,如下图所示:
up_zlib1.dll签名信息
通过搜索该公司的知识产权信息,可以找到另一款同样带有该模块的软件。如下图所示:
软件著作权信息
在下载柠檬输入法软件安装后,也发现了具有相同数据和代码逻辑的“zlib1.dll”。如下图所示:
软件下载
对”up_zlib1.dll”和柠檬输入法中的“zlib1.dll”动态库脱壳后,可见同源性代码及数据,如下图所示:
代码同源性
数据同源性