当前位置: 首页 > 创领中心 > 网络优化

原来阅读器插件有这么多风险

  • 网络优化
  • 2024-11-15

嫦美找到我时,整团体是解体的 —— “卡颂,我似乎被监督了”。

黄昏的星巴克,她的影子被吊灯拉得很长,哆嗦着似乎她此刻的心坎。

“怎样回事?”我尽量让声响听起来安静些。

“最近意识个男生,是我MBA同窗,对我很激情,也很懂我”嫦美环视周围,似乎随时会有什么物品从夜色中跳进去。

“缘分啊,这不很好嘛?”我笑着说。

“不是那种心有灵犀的懂,是那种「生存起居都被监督的懂」”嫦美解释道。不待我回应,又补充道:“这次约你进去,也是想让你帮助看看我电脑有没有被植入啥监听木马”。

说罢,从背包里取出MacBook Air递给我。

“Mac普通安保性都蛮高的,你最近没装啥去路不明的运行吧?”一边摆弄她的电脑,我一边问道。

“我也不会装运行,往常重要就上上网、刷刷剧”。

阅读完她的运行列表,我随手关上了阅读器,又习气性关上插件列表。

这时,一个阅读器插件吸引了我的留意:

“这是啥?”

“奥,咱们MBA的网课要求在这个平台看。这个平台很严,看课不能快进,也不能切换到其余页面。这是那个男同窗发我的,装了后就能打破这些限度,还挺繁难”说罢,嫦美皱了皱眉“和这个插件不会有相关吧?”

“不好说,等我看看插件源码”。

理想证实,这个插件真的有疑问......

阅读器插件为咱们上网提供了极大便利,比如:

实践上,阅读器插件除了能「剖析并修正原始页面」外,还能:

可以说,有心人只需应用切当,就能经过阅读器插件取得咱们上网的一切足迹。

这时,有人会说:“插件能做这些没错,但必需放开必要的权限,我不给他权限不就行了?”

理想真的这么繁难么?

《Building Browser Extensions》一书作者「Matt Frisbie」为了演示阅读器插件的潜在安保疑问,结构了一个「会放开所有49项权限」的chrome阅读器插件spy-extension[2]。

当你在阅读器装置这个插件后,阅读器确实会揭示你「插件放开的权限」:

不过,等等!明明放开了49项权限,这里为什么只显示5项?原来,窗口显示的内容行数有限,超出局部要求拖动滚动条才会显示。

可是,又有几个用户会发现「在放开的5项权限上方,滚动条前面还暗藏了44项权限呢」?

一旦有了权限,想做什么就取决于插件作者的构想力了。可以被用来做坏事的WebExtensions API十分多,比如:

后盾运转的Service Worker可以监听收回的网络恳求,并在恳求发送到网络之前修正它们。

这象征着插件可以经常使用Service Worker发送数据到主机,或许在用户阅读网页时阻拦恳求并发送额外的数据。

因为Service Worker运转于一个独立的后盾进程中,所以关上调试工具的Network面板看不到插件收回的恳求:

都有哪些有价值的数据可以搜集呢?

最繁难的,监听用户键盘输入:

[...document.querySelectorAll("input,textarea,[contenteditable]")].map((input) =>input.addEventListener("input", _.debounce((e) => {// 处置 用户输入}, 1000)));

除此之外:

上述API联合Service Worker传输数据,用户在插件作者背地无异于裸奔。

据嫦美示意 —— 她那个MBA同窗似乎知道她住哪儿,这是怎样做到的呢?很有或许是经过「失掉天文位置」的插件配置。

一个网课插件失掉天文位置,这不是太奇异了么?可是嫦美一点都没觉察,这是怎样办到的?

假设插件脚本失掉天文位置(经过navigator.permissions.query({ name: "geolocation" })),将征询用户授权。

但假设「被注入脚本的网站」曾经取得用户的天文位置授权,插件不要求授权就能静默经常使用对应配置。

举个例子,假设百度地图向你恳求「失掉天文位置」的授权,这很正当,你也大略率会赞同。

假设恶意插件可以向百度地图注入脚本,当你访问百度地图时,他就不用再失掉授权就能访问你的天文位置。

以上所说的一切配置都局限在 —— 插件向已有网站注入脚本。那插件能否能不被觉察的间接关上恶意网站呢?

答案是 —— 可以,我愿称其为「借尸还魂」之法。

而这些「闲置的Tab」就是最好的下手指标。

经常关上很多Tab

首先,插件经过以下代码挑选出闲置的Tab:

const tabs = await chrome.tabs.query({// 挑决定户没经常使用的Tabactive: false,// 挑决定户没有pin的Tab,pin的Tab经常使用频率通常比拟高pinned: false,// 不经常使用有音频的Tabaudible: false,// 经常使用曾经加载终了的Tabstatus: "complete",});// 挑选出闲置Tabconst [idleTab] = tabs.filter(/** ...省略其余挑选条件 **/)

只需恶意网站的题目、图标(favicon)与闲置Tab分歧,那么用恶意网站交流闲置Tab后,用户也不会有任何觉察。

举个例子,假设闲置Tab是React官方,那恶意网站只要求题目是React,图标是React,即使闲置Tab跳转到恶意网站,从Tab外观上也不可辨别。

上方的代码结构了恶意网站的url,其中「与闲置Tab分歧的题目、图标」保留在url searchParams中:

// 将题目、图标保留在searchParams中const searchParams = new URLSearchParams({returnUrl: idleTab.url,faviconUrl: idleTab.favIconUrl || "",title: idleTab.title || "",});const url = `${chrome.runtime.getURL("恶意网站.html")}?${searchParams.toString()}`;

恶意网站在url searchParams中取出题目、图标数据,并交流:

// 修正题目document.title = searchParams.get('title);// 修正图标document.querySelector(`link[rel="icon"]`).setAttribute("href", searchParams.get('faviconUrl'));

最后,用恶意网站交流闲置Tab的网站:

await chrome.tabs.update(idleTab.id, {url,active: false,});

恶意网站只要求在「做完坏预先」或「用户从新点击 闲置Tab 时」跳回原来的网站即可。代码如下:

const searchParams = new URL(window.location.href).searchParams;function useReturnUrl() {// 跳回原来网站window.location.href = searchParams.get('returnUrl');}if (document.visibilityState === "visible") {useReturnUrl();}// 用户访问了闲置Tabdocument.addEventListener("visibilitychange", () => useReturnUrl());// ...开局做坏事// 做完坏事,跳回原来网站useReturnUrl();

从用户的视角看,当他点击闲置Tab时,网站从新加载。关于一个闲置的Tab来说,从新访问时加载页面是再反常不过的逻辑。

只是用户不会知道,这并不是「网站从新加载」,而是「退回到前一个网站」。

有人会说 —— 我只经常使用那些信得过的插件。

但当天信得过的插件,明日就必定信得过么?在暗网中,「用户量大的收费阅读器插件」能卖不错的价钱。

为什么会有人收买这类「没有商业价值的收费插件」呢?一种或许是 —— 收买后向代码中投毒,只需用户更新插件就会中招。

所以,好用的插件不必定没疑问,当天没疑问的插件明日也不必定没疑问。

关于嫦美来说,技术上能做的只能是删除插件、肃清缓存、肃清cookie,分开一切的账号登录并修正明码。

但似乎更大的风险,来自理想环球......

Let's build a Chrome extension that steals everything:。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://www.clwxseo.com/wangluoyouhua/8858.html

猜你喜欢

热门资讯

关注我们

微信公众号