临近6.18电商促销日,火绒在官方微博、微信等平台收到不少用户反馈,称电脑不断出现托盘闪烁弹窗,点击后即为淘宝天猫的6.18促销网页。火绒工程师溯源调查后发现,该弹窗均来自于常用软件“搜狗输入法”,该广告配置通过云控下发,无法通过设置关闭。进一步分析发现,该软件除了疯狂弹窗,还存在统计用户浏览器浏览历史数据等越位行为,符合广告程序的定义。目前,火绒已对该软件中广告模块进行拦截查杀。
查杀图
根据分析,“搜狗输入法”通过云控,向用户下发专门添加了用以在6.18期间弹窗的相关组件,该组件与“搜狗输入法”主程序功能之间并无任何关联作用。用户安装运行“搜狗输入法”后,就会频繁收到托盘闪烁弹窗,如果不小心点击,就会打开关于天猫6.18整个推广促销网页。
虽然右键可暂时退出该弹窗,但根据其云控下发的配置,5小时后仍旧会再次顽固弹出,循环往复,严重影响了用户的正常上网及工作。
除此之外,更为严重的是“搜狗输入法”还会收集用户本地的安全软件、广告拦截工具的运行状态,甚至搜集用户IE浏览器和搜狗浏览器历史记录数量和页面标题数量,并回传至后台服务器,推测用以制作用户画像进行精准推广。该行为涉及隐私数据,严重越位,存在损害用户权益的风险。
由于该软件下载量较多,导致受影响的用户范围较大,火绒在用户群、论坛、微博、微信、邮箱等各平台均收到大量的相关反馈与私信求助。目前,火绒最新版已对“搜狗输入法”内的弹窗与搜集用户信息的模块进行拦截查杀。需要注意的是,火绒查杀该广告模块后或导致“搜狗输入法”的“工具”功能无法使用,但不影响键入文字等主要功能。
图:火绒各平台的私信求助
图:火绒用户群的反馈情况
图:火绒论坛反馈信息
图:知乎相关话题讨论
弹窗问题由来已久,继去年人民日报点名批评弹窗乱象后,今年两会期间也有政协委员建议将过度弹窗的软件厂商列入失信名单。但随着流量经济愈发至上,部分软件厂商已然越过雷池,将弹窗流氓化、病毒化,对于此类软件和程序,火绒将会持续、及时进行拦截查杀,保护用户权益。同时我们也呼吁广大软件厂商抱表寝绳,合理逐利,注重用户体验才能长远发展。
附:【分析报告】
一、详细分析
近期,搜狗输入法用户大量遇到6.18托盘广告弹窗的情况,该流氓推广行为通过云控下发,在搜狗输入法界面中未发现相关功能开关。广告弹窗程序showinfo.exe由sgutil.dll释放执行,sgutil.dll被sgtool.exe调用。相关代码,如下图所示:
sgtool.exe加载执行sgutil.dll
sgutil.dll执行”StartPopupServer”导出函数后,会根据云端配置释放执行托盘广告模块showinfo.exe。相关代码,如下图所示:
根据配置决定是否释放执行showinfo模块
showinfo模块
showInfo.exe模块主要负责弹出桌面托盘广告图标及更新广告配置。当此模块运行之后,首先会对存放于%Appdata%\LocalLow\SogouPY\Popup\traynet\目录下的配置资源config.ini进行AES解密并读取其中的配置信息,相关信息如下图所示:
AES解密并读取配置信息
解密后的config.ini配置信息如下图所示:
解密后的config.ini信息
解密并读取配置信息无误之后,showInfo.exe模块便会收集:系统硬件签名、主机运行的安全软件等信息,连同搜狗输入法的版本信息一起回传。收集的安全软件信息如下图所示:
收集的安全软件信息
收集安全软件运行信息相关代码如下图所示:
收集安全软件信息
收集的安全软件信息以标记位形式发送给服务器(sfsw及sfw参数中0,1代表各家安全软件运行状态。0代表未运行,1代表正在运行),相关信息如下图所示:
收集的主机信息内容
收集完所需的主机信息之后,程序便会将其与“http://api.pinyin.sogou.com/v1/bubble/ad“加密发送给服务器“http://get.sogou.com/q”, 发送加密信息相关代码如下图所示 :
发送加密信息
传输的数据信息
服务器根据发送信息,返回加密数据。程序通过AES算法解密之后便得到托盘广告所需的配置信息,解密数据相关代码如下图所示:
AES解密返回数据
解密后的配置数据如下图所示:
解密后的配置数据
当得到所需的托盘广告配置信息以后,程序便将其AES加密并更新到%Appdata%\LocalLow\SogouPY\Popup\traynet\目录下的net.ini文件中。之后,开始检查当前系统时间是否在net.ini配置中所规定的“sdate”到“edate”时间范围之内,并且查询当前系统时间距离上次关闭广告托盘的时间(config.ini中的lastclose字段值)是否大于5个小时(net.ini中的interval字段值),满足上述两个条件则弹出托盘广告,相关代码如下图所示:
时间检测
弹出广告托盘相关现象如下图所示:
广告托盘
sgutil模块
在sgutil.dll加载执行后会根据云端返回的配置决定是否弹出托盘广告,广告弹窗的功能开关只能由云控页面控制(hxxp://api.pinyin.sogou.com/v1/config/netswitch_pc),在搜狗输入法界面中,未发现相关弹窗功能开关。从云端请求的配置信息中“trayad”为弹出开关标记位,如下图所示:
云端配置
当“trayad”标记位为1时,sgutil.dll会从资源中释放执行showinfo模块。相关代码,如下图所示:
从资源中释放showinfo模块
sgutil.dll会间隔6个小时取最新云端开关的状态。相关代码,如下图所示:
请求云端开关配置
并且根据不同地区多次测试发现,请求到的开关配置会有所不同。相关现象如下图所示:
不同地区多次测试得到不同的配置
sgutil.dll除了会释放showInfo.exe外,还会收集Chrome内核浏览器和IE浏览器的历史记录信息。虽然历史记录中的URL、标题等数据也会进行收集,但是尚未发现上传上述数据的相关代码逻辑,现阶段仅会上传历史记录条目数量。在获取Chrome内核浏览器历史记录信息时,首先会根据预留的浏览器历史记录数据库路径找到数据库所在位置,如果预留路径为空,则不会执行任何操作。除IE浏览器外,现阶段最新的sgutil.dll模块只会获取搜狗浏览器的历史记录信息。获取Chrome内核浏览器历史记录信息,相关代码如下图所示:
搜集用户浏览器历史中的标题个数
获取搜狗浏览器历史记录信息相关代码,如下图所示:
获取搜狗浏览器历史记录信息
获取其他浏览器历史信息相关代码,如下图所示:
获取其他Chomre内核浏览器历史记录信息
在搜集历史记录信息结束后,会将搜狗浏览器历史记录条目数拼接到HTTP请求参数中。相关代码,如下图所示:
将收集到的浏览器历史信息拼接为HTTP请求参数
获取IE浏览器中历史记录条目数和标题数相关代码,如下图所示:
收集IE浏览器历史记录信息
上述收集到的浏览器历史记录条目数量和标题数量,会被拼接为回传数据的请求链接地址,回传地址为:hxxp://ping.pinyin.sogou.com/webtitlequery.gif。相关代码,如下图所示:
拼接上传浏览器历史信息的请求参数
由于在目前最新模块中发现了疑似查找360安全浏览器等其他浏览器相关逻辑,但统计这些浏览器浏览历史的代码逻辑无法激活,所以推测以往版本中该模块曾安插过统计其他浏览器浏览历史的代码逻辑。通过分析发现,在2015年的sgutil.dll模块中,我们发现该模块会收集更多不同浏览器的历史记录信息,包括:360安全浏览器、搜狗浏览器、Chrome浏览器、360极速浏览器、猎豹浏览器和淘宝浏览器。相关代码及数据,如下图所示 :
早期的sgutil.dll模块历史记录信息收集代码
2015年的sgutil.dll模块文件信息及数字签名信息,如下图所示:
2015年的sgutil.dll模块文件信息及数字签名信息
二、附录
相关文件hash