你用简书有没有被劫持?
前言
每天第一次打开简书都会跳转到一个恶意网页,它以浏览器错误问题引导用户下载一个安装包。这个安装包安全性未知。另外打开网页时还会自动向剪贴板中写入一个淘口令,打开淘宝的时候会自动打开一个红包。页面跳转似乎是同一个 IP 每天只有第一次会触发,自动复制淘口令每次都会触发。然而恶意网页的域名隔一段时间会更换。
经过分析得出,此问题准确来说不算是网页劫持,而是简书自己的一个广告供应商的问题。恶意代码是直接嵌入正常业务代码的,排除了被劫持的可能。由于已经持续很长一段时间了,所以说不定是简书默许了这个行为。此外,CSDN 和豆瓣某些情况下也有这个问题,今天不做介绍。
抓包
打开 Chrome 浏览器,按 F12 打开 Chrome DevTools(Chrome 开发者工具),切换到 Network 标签中勾选 Preseve log,然后访问一个简书的网页。由于劫持只劫持安卓系统的部分机型,所以需要用开发者工具中的模拟工具,这里随意选一个安卓机型。
很容易发现很多来自非简书的域名,在移动端也是很多这样奇奇怪怪的域名导致出现图一的那种情况。
代码简析
这不是此次目的不在PC端,在此不陈述。
但是我发现了一件很有意思的事:那就是不知道简书和百度之间有啥py交易,整个网页基本上由四类链接组成:简书、CNZZ、广告(包括了伪装的)、百度。将近1/3~1/2全是百度的链接。但这网页中没有发现百度任何字眼或者广告,这之间有啥py交易不得而知。
真机调试
很好奇为什么PC端并未触发跳转到下载浏览器 apk 那个广告,应该是浏览器真伪进行了检测,只有真正的安卓端才会弹。绕过方式也不难。Chrome 支持远程调试,我可以拿一台 Android 真机来运行 Chrome。
在安卓机上显而易见的就是出现了这个,不管你点取消还是确认都是会跳转
由于我的手机打开了搜狗输入法的快捷翻译功能,就明确地看到了自动复制了对应的淘口令,淘口令代开就是一个红包,满多少减几分钱的那种
下面进行调试
调试后加载部分js文件就找到了其中一部分的恶意网站
打开任意一个恶意网页五分就出现两种情况:拦截标红或者不存在(多重拦截伪装)
其中不难发现那些劫持代码
这类代码可能对 IP 有检测,同一IP再次访问这个链接时,并没有刚才那些链接的代码。重新换一个 IP 有用,并且也可能跟时间有关,可能是每 1 个小时刷新某些东西,不太确定。
最后
关于解决和预防这里不做表述,此乃前端大佬们的工作。
总结
简书移动端页面会加载一堆 webpack bundle 其中的上述js包含广告功能,其中一个广告功能的代码加载了一个外部脚本。这个外部脚本是动态生成的,他会判断访问者的 IP,同 IP 每天第一次访问会跳转到恶意下载页面,之后不会再跳转。这个广告还接入了大量统计平台,加载一次页面就有好几百的请求。还另外一个广告也引入了外部代码,其中嵌入了向剪贴板中写入淘口令的指令。
希望简书尽快解决这个问题吧。(会不会简书内部已知,并且默许呢?这个不得而知)
欢迎技术大佬指导和交流!