恶意网页

点开一个链接,恶意网页手机突然开始疯狂下载文件——这种事我遇到过三次。恶意网页最近一次是恶意网页上个月,朋友在群里发了个“双十一内部优惠券”的恶意网页网址,我手快点了进去。恶意网页页面加载了两秒,恶意网页然后屏幕底部弹出一行灰字:“正在下载 update.apk”。恶意网页我立刻按了返回键,恶意网页但通知栏已经多了一个进度条。恶意网页三秒钟后,恶意网页一个叫“系统更新”的恶意网页应用图标出现在桌面上,图标粗糙得像是恶意网页用画图软件随手画的。

这就是恶意网页典型的恶意网页。它不需要你输入账号密码,恶意网页不需要你点击“同意”,恶意网页甚至不需要你真正下载什么东西。你只是打开了那个页面,它就开始干活了。

那一次我多了个心眼,没有点开那个图标,而是去手机设置里查了应用列表。果然,那个“系统更新”根本不在已安装列表里,它藏在缓存目录下,文件名是一串随机字符。换句话说,它还没完成安装,但已经在后台跑起来了。我后来用文件管理器找到那个目录,里面除了apk安装包,还有两个json文件,打开一看,一个是设备型号和系统版本,另一个是手机里所有已安装应用的包名列表。这些数据在页面加载后的十秒内就被打包发走了。

恶意网页的套路比大多数人想的要深。很多人以为只要不下载、不输入密码就没事。但现在的恶意网页早就不靠骗你点击了。它利用的是浏览器本身的漏洞,或者更常见的是,利用你对“正常网页”的信任。比如一个看起来完全正常的新闻页面,顶部是标题,中间是图片,底部是评论区。但就在你滑动阅读的时候,页面里隐藏的一个iframe已经在尝试调用你的摄像头权限,或者悄悄往你的剪贴板里写入一段恶意代码。

我见过最隐蔽的一个案例,是一个仿冒的快递查询页面。页面设计得和官方几乎一模一样,输入单号后还会显示“正在查询中”的动画。但那个动画是个幌子,真正的动作发生在页面加载时:它通过一个第三方广告脚本,往你的浏览器历史记录里塞了十几个色情网站的条目。你关掉页面后,这些记录会留在那里,下次你打开浏览器输入网址时,自动补全功能会把这些记录弹出来——如果你在公共电脑上,或者别人借用你手机,那就很难解释了。

怎么判断一个网页有没有问题?我的经验是看三点。第一,页面加载时状态栏有没有出现频繁的跳转或重定向,比如从a.com跳到b.com再跳到c.com,最后停在某个奇怪的域名上。第二,打开开发者工具看网络请求,如果页面里加载了来自完全无关域名的脚本,比如一个卖鞋的页面却在加载某个俄罗斯服务器的js文件,那就有问题。第三,也是最直接的:手机有没有发烫。恶意脚本在后台跑的时候,CPU占用率会飙升,手机很快就会热起来。我那次点进优惠券链接后,手机在十秒内就从温热变成了烫手。

浏览器厂商其实一直在堵这些漏洞。Chrome从去年开始默认禁止了混合内容加载,也就是https页面里不能再加载http的资源。Safari也加强了智能防跟踪。但恶意网页的开发者也在进化。他们现在更倾向于利用用户自己的操作——比如让你长按图片“保存到相册”,那个保存动作其实触发了一个恶意脚本;或者让你滑动验证码,滑动轨迹被记录下来后用来模拟你的行为。

我现在的习惯是:任何不熟悉的链接,先用无痕模式打开。无痕模式虽然不能完全阻止恶意脚本,但至少关掉窗口后不会留下cookie和缓存。另外,手机浏览器里我装了一个广告拦截插件,不是因为它能拦广告,而是因为它能拦掉大部分已知的恶意脚本域名。最后,如果某个页面加载后手机突然变卡或者发烫,直接关掉浏览器,然后去设置里清空所有网站数据。别犹豫,犹豫的那几秒可能就够它把通讯录传完了。

恶意网页这东西,本质上和街头骗术没什么区别。它赌的就是你手快、你好奇、你觉得“就点一下应该没事”。但现在的技术环境下,点一下的代价可能比你想象的大得多。