前述
2016年8月份,360白名单分析组披露了数字签名冒用的案例,然而并未引起相关数字证书颁发机构的重视。2017年,360白名单分析组监控到大量带有“李鬼”签名的私服和木马在传播。通过伪造知名公司的资料,可以成功在境外证书颁发机构申请相应公司数字证书。这些证书被用来签发恶意程序,而恶意程序由于带有知名公司的“签名”,容易被安全软件放行,严重危害了网络安全。同时,这种冒用行为,使多家知名公司躺枪,对被冒用的公司的名誉带来了恶劣影响。
以下为2017年新增签名冒用事件的时间轴。
时间轴上方三家公司的冒用签名主要被大量传播中的劫持类私服使用,其签发过的样本种类主要如下:
时间轴下方的冒用签名则频繁用于签发其他恶意程序,目前发现5家不同的数字签名,其签发过的样本种类主要如下:
由于360在第一时间发现并查杀带有冒用签名的样本,其他恶意程序虽然换签名更频繁,但由于及时查杀并未大规模流通。而私服类程序虽然受到360的拦截,但依靠不知情用户的主动使用和信任得以在互联网上泛滥 。带冒用签名的私服类程序劫持流量,而且屏蔽安全软件的防护功能及正常网站访问,对网络秩序和用户个人电脑安全危害极大。
冒用方式
签名冒用的利用方式在之前的披露文章早已分析,这里简单再说明一下。下图是官方正常数字签名与冒用数字签名的样本对比,两者都显示数字签名正常且签名主体均为“上海**软件有限公司”。左图是该公司官方的程序签名,颁发者为国内知名的签名机构“WoSign”。而右图则是冒用的数字签名,其是冒用签名的作者伪造该公司资料在国外签发机构“Go Daddy”申请的数字证书。
目前为止,发现的冒用签名主要都是通过“Go Daddy”和“Startfield”两家国外签发机构申请的,今年新增的8种冒用签名如下所示,其中每种签名对应若干张数字证书,且部分证书目前已被颁发者直接吊销:
样本分析
本文主要分析带冒用签名的劫持类私服程序,由于其他恶意程序传播受限这里暂不分析。
(一)流程框架
360截获的带冒用签名的劫持类私服程序种类较多且更新频繁,其劫持组件也是经常变化,不过总体的功能框架相对不变。样本的整个运行过程如下所示,部分程序模块在玩家电脑上采用随机文件名,图中的备注名(如[msvcs.dll])是其对应在私服服务器上的模块名称。
当玩家电脑上的私服程序运行时会释放并启动一个劫持程序的母体splog.exe,该母体负责检测环境并下载安装劫持模块msvcs.dll。母体程序开始运行时会检测ip地址,控制在特定地区不进行传播,如:
一旦开始进行传播,将从某个服务器地址直接下载劫持模块msvcs.dll,并以命令行参数“/install”启动进行安装,由于后面将安装成服务程序,所以安装前检测了特定服务名“ExtendApp”,若服务已存在则删除该服务来准备进行重装:
msvcs.dll模块以 “/install”参数首次进行安装时将自身创建为服务程序,之后并没有立即启动服务程序,而是将服务的启动类型设置为开机自启动,劫持流程将在下次重启开机时自动运行:
一旦服务例程开始运行,将首先循环进行联网判断,保证在网络畅通环境下进行后续的感染:
从前文的流程图看,本模块主要进行两条劫持流程,首先进行的是流程图的上半部分,母体是dnetsup.dll,最终通过安装文件过滤驱动进行劫持:
紧接着进行流程图的下半部分,母体是drvsup.dll,最终通过安装tdi过滤驱动进行劫持:
下面分别对劫持的两条流程线进行分析。
(二)文件过滤流程劫持DNS
首先是文件过滤流程,过程基于dotnet(.Net)的运行环境,所以dnetsup.dll先判断并安装dotnet环境:
确保运行环境具备执行dotnet程序的条件时,再进一步判断dotnet环境的执行版本:
判断版本的目的是为了搭配合适的版本模块,然后通过注册通用类库的方式来得到程序运行机会:
一旦注册成功,之后每次用户启动浏览器,浏览器进程都会被“注入”该劫持模块(donetset2/4),从而执行其中的程序代码,通过我们的行为监控工具查看,可以看到IE浏览器的进程树下多出了两个子进程,这两个子进程其实是注入其中的劫持模块donetset2.dll创建的(见下文):
Donetset2.dll是一个C#编写的.Net程序,更具体地说其实是一个.Net的COM类库组件,如下可以看出该组件将自身注册成一个shell图标覆盖类库,所以每次浏览器运行都能顺其自然地被引入执行:
当该组件的工作例程开始运行时,就进行文件过滤驱动的安装或启动,并下载一份hosts列表保存到dida.mid这个文件来进行本地DNS劫持,上文看到浏览器的进程树即是下载完劫持列表文件后调用cmd的ipconfig命令进行DNS缓存刷新:
下载的列表格式与系统hosts文件一致,主要用于劫持安全软件和竞争对手的DNS请求:
当然,劫持的关键还在于文件过滤驱动,本模块安装的驱动程序是从资源里释放的,并且根据int类型指针的大小来判断使用x86还是x64的文件过滤驱动:
另外,文件过滤驱动的安装和启动操作都是通过导入从本模块释放出来的dHelperKit.dll导出函数,该模块相对应地分为x86版本和x64版本,负责和文件过滤驱动的通信操作:
先看一下驱动程序,发现具有一个国外公司EldoS的数字签名,并且是由VeriSign机构签发的非冒用签名,可以确认是官方的程序:
从版本信息上可以看出该文件是出自EldoS公司的一款名为“CallbackFiler“的产品,版本号为3.1.85,该产品实际上是专门为开发人员提供文件系统过滤功能的程序库:
既然是第三方驱动程序库,那么与其通信的操作模块dHelperKit.dll就显得尤其重要,负责控制完成劫持的功能。该模块的导出函数“kitStartCbfltfs”通过“CallbackFiler“提供的API来操作文件过滤驱动cbfltfs3.sys,借助其对文件系统的的过滤功能来劫持DNS。具体实现的方式是添加一个文件名(路径)重解析的回调函数,设置请求的目标文件名(路径)为本地hosts文件的路径,在系统进程访问到该文件路径时重定向到一个新的控制路径(dida.mid文件的路径):
回调函数中,会进一步过滤请求访问hosts文件的进程,只有当请求进程为svchost时才进行文件名(路径)重定向操作,因为包括DNS查询的本地网络服务其所属进程为svchost,判断该进程一方面已经足够达到通过hosts文件重定向劫持DNS的目的,另一方面也可以让用户正常访问hosts文件,难以发现hosts文件被重定向:
设置完重定向回调后,过滤驱动也正常工作,待重新下载dida.mid列表文件后调用命令刷新DNS缓存,此时负责网络服务的进程svchost会将新的hosts列表刷入本地DNS缓存,安全软件或竞争私服等程序在联网时默认先查询DNS缓存,发现缓存列表里存在相关记录项就会导致该域名解析被重定向,从而实现屏蔽或劫持网络的作用。此时检查系统的hosts文件将看不到任何异常,然而通过ping命令便能验证出DNS已被劫持:
由于目标域名劫持后重定向到一个本机回环地址(127.0.0.1),所以屏蔽了对劫持域名(ip***360safe.com)的网络请求,此目的为干扰安全软件的正常联网。当然要进行劫持的域名都是由云端分配控制的,劫持列表可以随时更换,例如下面是一组被劫持的知名游戏网站,均被劫持到某一固定的ip地址(139.***.246.167):
(三)TDI过滤流程劫持网络流量
接下来分析tdi过滤流程,最终实现通过驱动劫持用户的网络流量。母体drvsup.dll通过IsWow64Process判断系统环境,选择下载x64或者x86版本的tdi驱动到本地保存为mstd32.sys:
下载后按照正常启动服务的方式直接启动该驱动程序:
一旦驱动加载起来,后面的流程全靠该驱动独立完成,无需与应用层程序进行其他交互。驱动每次启动时重新下载一份劫持列表tdipaddr.dll到内存,并将其解析到链表中方便后面进行劫持过滤:
下载的列表经常发生变化,并且同时存在多种不同的传播版本,对不同类型的知名网址进行劫持,如下是截获的其中一个版本,其中包含大量知名的游戏公司官网,如盛大游戏和冰川网络,均被劫持到某搜索引擎的一个服务器ip(14.***38):
后面过滤IO请求时,将以该列表去匹配当前网络访问的host:
满足过滤规则的所有网络IO请求会被标记,待相应的请求响应后对接收到的数据进行修改,添加301重定向响应头或者嵌入html框架来实现劫持,最后将修改后的内容返回给请求联网的应用层程序(如浏览器)处理:
例如我们通过浏览器正常访问盛大游戏官网时如下:
而驱动劫持后访问盛大游戏官网则会发生跳转,将其劫持到某搜索引擎(或其他地址,根据云端列表来控制),阻碍用户正常访问游戏网站。从360浏览器的抓包工具可以看出劫持方式是嵌入一个指向搜索引擎地址的html框架:
对劫持过程进行双机调试,也能观察到访问盛大游戏官网时驱动程序劫持的过滤过程:
最后发现驱动程序还注册了一个关机回调,在系统关机时改变驱动文件名,重写驱动文件来增加自身的隐蔽性。驱动的路径如下图所示,可以看到文件名为8位随机字母:
重写驱动文件后将新的驱动路径注册成一个开机自启动的服务,以保证在用户电脑上的劫持活动得以延续。
传播情况
冒用签名的恶意程序在搜索引擎中的排名非常靠前,吸引了很多用户去下载,例如通过一些关键字:
该网站打开之后可以直接下载:
根据360大数据监测统计,今年新增冒用样本数量约400个,感染量约35万。下图所示是2017年8月份之前的受害用户地域分布图,其中沿海一带以浙江、辽宁和广东传播最多,内陆则以四川和湖南居多 。
除了以上“梁山传奇”还有上万款传播相关样本的私服网站,共同形成了一条庞大的灰色产业链,这里列出部分:
查杀
自从签名冒用的恶意程序出现以来,我们持续监测其发展的动态,并率先进行查杀。本次带有冒用签名的恶意模块通过私服程序大量传播,受害用户群主要为传奇游戏玩家,希望广大的用户提高安全意识,尽量通过正规的官方渠道下载游戏,避免损失。同时,希望相关的数字证书签发机构严格审查企业资质,避免此类情况再次发生。