一、概述
近日,火绒安全实验室发出警报,病毒团伙正在利用多款热门游戏疯狂传播后门病毒"Backdoor/Jsctrl",每天有数十万台电脑受到感染。感染病毒之后,病毒制作者可随时通过远程指令对电脑做出下载其他病毒程序、劫持流量在内的多种破坏行为,牟取利益。
据火绒安全团队分析,该病毒被制作者伪装成安装数据统计组件,植入到《传奇世界》、《传奇霸业》、《蓝月传奇》、《九天封神》等热门游戏的微端安装包内。用户在PChome、下载吧等网站下载某些软件时,会被捆绑安装这些游戏微端,而病毒也借机进入用户电脑。
这些游戏推广力度非常大,重金邀请张家辉、古天乐等知名港星代言,网络推广铺天盖地,病毒也得以借势传播。根据"火绒威胁情报系统"的统计和评估,目前每天约有30-50万台电脑感染病毒。火绒安全团队表示,该病毒团伙很可能是部分游戏推广渠道商,建议以上游戏厂商尽快彻查自家游戏推广渠道。
病毒入侵电脑后,病毒制作者可以通过修改服务器上的后门代码,远程操控受害者电脑,进行多种破坏行为,包括下载其他病毒程序、后台暗刷流量等。
病毒"Backdoor/Jsctrl"极为顽固、隐蔽,不仅无法通过卸载游戏清除,还具备"反追踪"设置,可以监测远程协助软件(如安全厂商常用的TeamViewer等)中的运行窗口,一旦发现正在被远程协助,则会彻底删除病毒相关所有文件,以免被安全研究人员追踪。
目前,"火绒安全软件"已升级病毒库,可以率先拦截、查杀"Backdoor/Jsctrl"。火绒工程师提醒广大用户,尽量通过官方网站下载软件,以免在被捆绑推广的同时,感染病毒。
二、样本分析
近期,火绒发现"下载吧"、"PCHome"软件下载中心等下载站的高速下载器所推广的《传奇世界》、《传奇霸业》、《蓝月传奇》、《九天封神》等多款游戏微端安装包内包含后门病毒。该后门病毒在上述游戏微端按转包运行后即被植入,且即便游戏被卸载仍然会常驻系统,该病毒会在远程C&C服务器存放的JavaScript代码控制下,利用病毒中封装的JavaScript对象可以执行任意WindowsAPI或其他后门逻辑(如:下载、运行命令行等)。并且,在我们近段时间的分析和追踪过程中,该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地址、CPUID等),之后再将数据转为字符所对应的二进制字符串,经过加密后将最终数据发送到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函数逻辑会先检测是否存在指定服务名的注册表启动项(如果未指定则删除自身服务项),如果存在则通过调用"scdelete"和"scstop"结束并删除病毒服务。如下图所示:
△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)签名同为"北京迅鲨科技有限公司"签名。如下图所示:
△安装包签名信息
安装包所释放病毒动态库签名信息也同为"北京迅鲨科技有限公司",如下图所示:
△病毒动态库文件签名信息
该组病毒文件中,up_zlib1.dll的签名信息还涉及另一家公司"北京神州安腾科技发展有限公司"。签名信息,如下图所示:
△up_zlib1.dll签名信息
通过搜索该公司的知识产权信息,我们找到另一款同样带有该模块的软件。如下图所示:
△软件著作权信息
在下载柠檬输入法软件安装后,我们也发现了具有相同数据和代码逻辑的"zlib1.dll"。如下图所示:
△软件下载
对"up_zlib1.dll"和柠檬输入法中的"zlib1.dll"动态库脱壳后,可见同源性代码及数据,如下图所示:
△代码同源性
△数据同源性
四、附录
文中涉及样本SHA256:
文中样本所所涉及的域名及IP地址:
|