双十一期间,火绒对金山系部分软件仿冒其它安全软件,进行广告推广的行为开启拦截查杀(报告见链接1)。随后,火绒接到不少用户反馈,称在已经卸载金山毒霸、驱动精灵等软件的情况下,火绒依然出现相关报毒。火绒工程师与用户沟通和远程查看分析后,发现是驱动精灵在卸载时故意留下一个名为“kbasesrv”的后门程序,包含广告模块被火绒报毒。
经过深入分析发现,驱动精灵在卸载时会投放”kbasesrv”后门程序,在用户电脑中执行软件推广、流量劫持、云控锁定浏览器首页等恶意行为。不仅如此,该后门程序还可云控在用户电脑中执行任意文件、拷贝或删除文件、结束进程、修改注册表、向指定窗体发送消息等,这就意味着用户电脑随时面临被远程执行任意操作的风险。
上述种种行为已经满足安全厂商对后门程序的定义,因此火绒对该程序进行查杀。未安装火绒的用户也可以选择火绒专杀工具彻底清除后门程序“kbasesrv”。(专杀地址见链接2)
“kbasesrv”后门程序的投放方式除驱动精灵服务项、特殊版本的金山系软件安装包以外,最主要是在驱动精灵被用户卸载时投放。并且该程序部分云控指令会主动规避火绒等主流安全软件以及一些主要省会城市(北京、上海、深圳、广州)。此外,因为”kbasesrv”后门程序组件与金山毒霸、猎豹浏览器、猎豹Wifi等众多金山系软件组件有重叠关系,如果金山向这些软件下发云控命令后,它们同样可以实施”kbasesrv”后门程序执行的恶意行为,所以火绒也会相应的对其进行拦截报毒。由于金山系软件用户量较大,导致该后门程序的影响也较为广泛。
事实上,数年前就有用户曝光过金山系软件相关的劫持行为(见链接3),我们也曾报道过金山利用病毒推广安装、仿冒其它安全软件推广广告等行为(报告见链接1、4)。火绒并非有意针对某个厂商,确实是这一系列程序行为触及到我们的原则和底线,不加以制止的话,受到损害的将是广大用户的权益。在火绒看来,如果这些软件厂商继续作恶,盘剥用户利益,火绒也将持续拦截、查杀这类危险程序。
在对“浏览器主页劫持”现象曝光后,近日人民日报再次对“弹窗广告”等损害用户体验的商业软件恶劣行为进行批评,指出相关平台厂商应该“优化行业生态、加强业界自律”。在此,火绒也呼吁广大厂商理性逐利,让用户不再受到恶意侵扰,享受应有的权益。
注:文中所述后门程序“kbasesrv”曾用名“主页安全防护”、“金山安全基础服务”。
相关链接:
2、专杀地址
http://down4.huorong.cn/hrkill_1.0.0.31.exe
3、用户曝光金山劫持
https://www.zhihu.com/question/26615909
http://www.vuln.cn/6310
附:【分析报告】
目录
一、 溯源分析
二、 投放渠道
驱动精灵推广kbasesrv
金山系软件渠道包投放kbasesrv
三、 云控后门
四、 篡改浏览器内存数据
五、 流量劫持
推广号劫持
浏览器劫持
六、 云控锁首
首页锁定
锁定新建标签页
添加外链
七、 同源分析
八、 附录
火绒在近期报告《双十一成流氓推广狂欢节 单日侵扰千万量级电脑》中,揭露了金山系广告模块带有伪装安全软件进程名、监听用户剪切板、检测安全分析工具等流氓广告推广行为。在我们对金山系相关广告模块进行查杀后,我们又收到了大量用户的相关反馈。我们奇怪的发现,在很多被植入流氓推广模块的电脑中,用户从未主动安装过任何金山系软件或已经卸载。通过分析,我们最终定位到是带有金山签名的后门服务kbasesrv在下发流氓推广模块,该服务被安装时不会产生任何界面提示,且可以通过云控服务器控制该服务在用户终端的程序行为,包括但不限于在用户计算机执行广告投放、流量劫持、软件推广等,该服务行为符合火绒对后门程序的定义。
kbasesrv后门程序文件签名信息
通过溯源,我们定位有多个渠道在推广kbasesrv后门程序,如:驱动精灵服务项、驱动精灵卸载程序、金山软件特殊版本渠道包等。经过我们确认,上述推广渠道中用户无法通过手动设置阻止kbasesrv服务被安装,即在用户不知情的情况下就会被该后门程序控制。后门程序安装包在投放时,会主动规避主流安全软件(火绒、360)。后门程序暂时主要会执行软件推广、流量劫持(包括劫持推广计费号、劫持浏览器等)、云控锁定浏览器首页。
除此之外,我们还发现该后门程序还带有执行任意可执行文件、命令行,释放推广快捷方式,结束进程,向指定窗体发送消息,拷贝文件,修改删除注册表等后门功能。后门云控配置下发时会主动规避主要省会城市(北京、上海、深圳、广州),并且也会躲避主流安全软件。上述恶意行为完全符合我们对后门程序的定义,直接影响到了用户对个人电脑的正常使用。后门程序执行流程,如下图所示:
后门程序执行流程图
驱动精灵卸载程序投放kbasesrv时,为避免重复安装,会检测kbasesrv或金山毒霸是否已经安装(金山毒霸包含kbasesrv相关组件,具体后文同源性分析会有相关说明),同时还会规避安全软件(火绒、360安全卫士),防止其恶意投放行为被安全软件捕获。相关代码,如下图所示:
驱动精灵卸载程序投放kbasesrv逻辑
规避火绒相关代码,如下图所示:
规避火绒相关代码
驱动精灵服务和卸载程序中均存在有kbasesrv服务投放逻辑。相关代码逻辑,如下图所示:
驱动精灵服务投放kbasesrv相关代码逻辑
通过我们溯源分析,我们还找到了一个特殊版本的猎豹浏览器安装包,kbasesrv安装包与猎豹浏览器安装包都以二进制数据形式被存放在安装包资源中。安装包运行后,会弹出猎豹浏览器安装界面,但猎豹浏览器与kbasesrv后门程序的安装互不影响,即使用户不安装猎豹浏览器也不会影响kbasesrv后门程序的安装。相关动作截图,如下图所示:
投放kbasesrv动作截图
该特殊版本猎豹浏览器安装文件数字签名信息,如下图所示:
特殊版本猎豹浏览器安装文件数字签名信息
kbasesrv后门程序会调用指定后门模块(infocenter.exe、phoenix.exe、kwhcommonpop.exe)根据云控配置执行后门指令。其中kwhcommonpop.exe由kcmppinvoker.dll调用,现行的云控配置主要用来进行软件推广;kpolicy.dll可以根据kpctrl.dll加载的云控配置调用infocenter.exe、phoenix.exe执行后门命令。以phoenix.exe为例,该后门模块可以执行的部分主要后门指令,如下图所示:
phoenix.exe可以执行的后门指令
kpctrl.dll会首先会从通过本地同步的fnsign.dat(该文件被加密,该文件同步地址为:hxxp://pc001.update.lbmini.cmcm.com/cmcm/kprotect/bin/2001/kprotect/data/d8d04a39237358e3125162fe1f1641b0,最后部分为文件内容哈希值)配置中解析出执行后门模块的相关策略数据。解密后的配置数据,如下图所示:
推广配置
kbasesrv会根据kpctrl中加载的配置数据调用kpolicy.dll,创建推广软件控制线程,每隔5秒检测一次云控数据列表,如果该列表不为空,则会调用指定的后门模块根据同步到本地的云控配置执行后门逻辑。相关代码,如下图所示:
软件推广相关代码
如果云控数据中设置了拷贝路径,则会将后门模块拷贝到指定目录执行。相关代码,如下图所示:
调用后门模块相关代码
由于infocenter.exe、phoenix.exe和kwhcommonpop.exe三个模块关键代码基本相同,所以报告中仅以phoenix.exe进行分析说明。phoenix.exe执行后会解析同步到本地的云控配置(云控下发地址:hxxp://config.i.duba.net/rcmdsoft/6/7/generalizecfg.dat)文件generalizecfg.dat(文件在软件目录中的phoenix/6/7目录下,其中6代表当前软件名称,如kbasesrv、金山毒霸、驱动精灵等;7为模块中的给定数值)。云控配置文件解密后,如下图所示:
generalizecfg.dat配置内容
我们所请求到的相关云控配置主要用来进行软件推广,根据现有配置后门模块会执行诱导软件推广。上图配置中resinfo标签下的url字段用来拼接资源文件下载地址(下载地址如:hxxp://config.i.duba.net/rcmdsoft/6/7/db/kp_music_push_db.zip),资源文件为诱导弹窗页面资源。用户再点击“一键清理”后,则会推广安装金山毒霸。弹窗界面,如下图所示:
诱导推广弹窗界面
在另一份generalizecfg.dat配置中,我们又找到了很多规则安全软件的策略,根据注释我们推测此配置为金山毒霸卸载时所执行的推广行为。相关配置,如下图所示:
generalizecfg.dat配置内容
除此之外,我们还在phoenix.exe后门模块中找到了其他后门指令功能(执行任意可执行程序、命令行,拷贝文件、修改注册表等)。我们还通过对金山系软件历史文件的筛查,找到了利用后门指令的相关配置文件。我们从配置内容中发现,部分软件功能与后门功能都存在与同一配置文件中,即。配置文件内容,如下图所示:
后门指令配置
解析执行云控命令相关代码,如下图所示:
解析执行云控命令相关代码
后门指令功能仅以个别功能为例。相关代码,如下图所示:
执行指定命令行
结束指定进程
调用kinst.dll动态库推广安装软件
kinst.dll为金山系通用软件推广模块,可以通过根据云端推广配置推广安装指定软件。在我们下载到的推广配置中,推广策略可以静默推广金山毒霸。该推广软件安装程序为一个特殊构造的动态库,运行InstallEx导出函数后即可静默安装金山毒霸。相关配置文件,如下图所示:
推广软件相关云端配置
下载解析云端推广配置(服务器地址:http://config.i.duba.net/lminstall3/[config_number].json?time=[time_tickcount])相关代码,如下图所示:
下载解析云端推广配置代码
执行软件推广相关代码,如下图所示:
执行软件推广相关代码
注入到浏览器中的knb3rdhmpg.dll模块会篡改浏览器内存数据,破坏浏览器首页防篡改的功能。受到影响的浏览器,如下图所示:
受影响的浏览器
以360安全浏览器为例,在sesafe.dll模块中会检测360安全浏览器启动参数,如果发现首页的启动参数中存在 “duba”字符串,则会开启首页修复功能模块。相关代码,如下图所示:
sesafe.dll首页劫持防护
当360安全浏览器检测到首页被毒霸劫持后会进行首页修复。相关现象,如下图所示:
360安全浏览器首页修复
为了成功劫持浏览器首页,注入到浏览器中的knb3rdhmpg.dll模块会通过hook LdrLoadDll函数,在浏览器dll模块加载时,对相应模块数据进行篡改,破坏原有的恶意篡改主页拦截功能。该模块不仅会固定的篡改一部分内容,而且会根据配置文件进行篡改。相关的配置文件为safepatch.dat文件,可以通过云控下发,其中包含了要篡改的浏览器模块和内容。相关代码,如下图所示:
Hook LdrLoadDll
篡改sesafe.dll内存数据
safepatch.dat文件
注入到浏览器中的knb3rdhmpg.dll模块会对百度搜索,搜狗搜索以及hao123的导航页进行推广号劫持。当用户使用浏览器访问这些站点时,该模块便会劫持这些链接的推广号。劫持推广号的配置文件有两个,kbasesrv目录下使用简单异或的se_redirect_ex2.dat和uredirect.dat文件。配置文件均可以通过云控下发更新,其中包括了劫持的url前缀,劫持白名单,劫持到的推广号和劫持的概率等信息。se_redirect_ex2.dat文件现在为主动更新派发,uredirect.dat文件目前不会更新下来,但是从金山毒霸目录下找到同名文件,且文件中的字段信息与程序逻辑相吻合。劫持配置文件,如下图所示:
se_redirect_ex2.dat文件
uredirect.dat文件
对于不同的浏览器,实现推广号劫持的方法有所不同,主要有三种方法。
(1)调用SetWinEventHook,对EVENT_OBJECT_NAMECHANGE事件进行过滤,并针对浏览器标签页窗体做劫持处理。当标签页的窗口标题发生改变时,便会触发事件钩子的回调函数,进入劫持流程。knb3rdhmpg.dll模块会根据标签页的窗口标题查询得到劫持链接,并将其保存到粘贴板中。然后以模拟键盘输入的方式,将劫持的链接粘贴到地址栏中并访问,完成劫持。相关代码,如下图所示:
调用SetWinEventHook过滤EVENT_OBJECT_NAMECHANGE事件
模拟键盘输入进行推广号劫持
(2)Hook NtDeviceIoControlFile对浏览器传输的流量进行分析,解析其中的域名和请求的url,匹配对应的劫持链接,并将传回的数据替换为302重定向返回数据,跳转到劫持的链接上。相关代码,如下图所示:
使用302重定向劫持推广号
(3)通过HookSetWindowTextW对设置浏览器标题栏内容的调用进行过滤。当浏览器将要访问搜索工具链接(百度,搜狗,hao123)时,标题栏被设置为搜索工具名称,就会触发劫持流程。knb3rdhmpg.dll模块根据原有链接得到劫持链接,并调用SetWindowTextW设置地址栏链接,最后模拟键盘输入回车进行访问。
Hook SetWindowText劫持推广号
受到劫持影响的浏览器有:2345浏览器、搜狗浏览器、QQ浏览器
kbasesrv.exe会根据当前系统版本将kbasesrv模块下的“knbhmpg.dll“和“knb3rdhmpg.dll”或“knbhmpg64.dll“和“knb3rdhmpg64.dll”注入到系统进程explorer.exe中。注入后的explorer.exe进程如下图所示:
被注入后的explorer.exe进程模块列表
成功注入到explorer.exe后,knbhmpg.dll会对IcontextMenu接口下的InvokeCommand方法进行hook。InvokeCommand方法主要是用于执行与快捷菜单项关联 的命令。也就是说当我们双击快捷方式等操作时,就会触发hook函数。Hook InvokeCommand方法代码如下图所示:
HookInvokeCommand方法
当成功触发hook代码后,程序便会载入knb3rdhmpg.dll,获取其导出函数“F1”的地址,相关代码如下图所示:
获取knb3rdhmpg.dll中导出函数F1的地址
在获取到knb3rdhmpg.dll中导出函数F1的地址后,程序便会进入F1的代码逻辑中运行, 首先会根据所获取的快捷方式路径获取到其所指向的可执行文件路径,相关代码如下图所示:
获取快捷方式所指向的文件路径
之后解密自身路径下的safeurl.dat配置文件,并得到所需配置内容。解密safeurl.dat,相关代码如下图所示:
解密safeurl.dat
解密出的Safeurl.dat文件中所对应的配置及字段解释如下图所示:
解密出的Safeurl.dat内容及字段解释
然后检测代表触发次数的times字段是否大于0,如果大于0功能正常继续往下运行,否则功能失败,相关代码如下图所示:
检测times字段值
当触发次数值满足条件时,会获取一个随机数除以100,将所得余数与配置文件中的数值进行比较,从而实现控制触发的概率,相关代码如下图所示:
检测概率
概率被成功触发后,该模块会根据注册表键值来获取自身所在路径,拼接出启动参数”C:\\Program Files\\kbasesrv\\knbhm.exe -url SogouExplorer.exehttps://www.duba.com/?f=lnkjks”,创建新的进程。相关代码如下图所示:
拼接启动参数并创建进程
knbhm.exe实际上相当于一个启动器,根据其它模块启动它的不同参数来处理不同的逻辑,knbhm.exe可接收的参数如下图所示:
knbhm.exe接收参数
当knbhm.exe以“-url”参数启动时,会根据safeurl.dat配置,创建新的进程,劫持用户点击的浏览器,如果用户电脑存在猎豹浏览器,则会以猎豹浏览器启动用户点击的浏览器,下面以搜狗高速浏览器为例,双击后被猎豹浏览器劫持现象如下图所示:
劫持用户浏览器
注入到浏览器中的knb3rdhmpg.dll模块会通过进程间通信的方式获取锁首配置内容,锁首功能可以通过配置文件进行控制。此配置文件可以通过云控下发更新,其中包含了不同推广渠道的锁首策略。多数的锁定策略都对北京、上海、深圳和广州大城市地区进行规避。受影响的浏览器和推广策略,如下图所示:
受影响的浏览器
首页锁定策略
在HookInvokeCommand方法后,如果未触发上述劫持浏览器的条件时,该模块会根据浏览器名称获取内置的字段名,以搜狗高速浏览器为例,获取内置字段“BROWSER_SOGOU”,通过进程间通信发送到“kbasesrv.exe”,从而得到锁首网址。之后便会拼接出新的启动参数,其中hash字段后面接的是浏览器路径及启动参数的hash值。创建knbhm.exe进程相关代码如下图所示:
拼接启动参数并创建knbhm.exe进程
下面以搜狗高速浏览器为例,双击后首页被毒霸导航锁定现象如下图所示:
毒霸锁定搜狗导航页
注入浏览器中的knb3rdhmpg.dll通过Hook SetWindowTextW对设置浏览器标题栏内容的调用进行过滤。当用户打开特定浏览器的新标签页时,便会进入锁定流程。该模块通过进程间通信获得新标签页锁定功能是否开启的标记和锁定链接,然后调用knbhm模块启动浏览器打开锁定链接,产生一个锁定的新标签页。相关代码,如下所示:
HookSetWindowTextW函数
锁定新建标签页
注入到浏览器中的knb3rdhmpg.dll模块会在命令行上添加外链。knb3rdhmpg.dll模块对某些浏览器hook GetCommandLineW函数对命令行参数进行处理,在原有链接基础上添加额外的链接。当用户浏览器带有网址参数启动时,该模块便会在后面添加额外的链接。在打开原有页面的同时,打开一个额外的链接页面。相关代码,如下图所示:
Hook GetCommandLineW
在原有的命令行参数后添加外链
除了在驱动精灵投放的kbasesrv目录中发现上述恶意模块,我们还在金山旗下其它软件中(例如:金山毒霸、驱动精灵、猎豹浏览器、猎豹WiFi)发现存在类似的恶意模块。以含有同名文件kwhcommonpop.exe为例,解析执行后门指令相似代码如下图所示:
同源代码分析
样本hash