ESC
科技 1 分钟阅读

AliExpress 在后台静默运行 WebAudio 指纹采集,干扰蓝牙多点连接

AliExpress 首页被发现在后台创建两个 AudioContext,通过 WebAudio 静默采集设备指纹并连接到音频输出。虽然增益为零,页面仍会触发浏览器处理音频,导致用户蓝牙多点耳机无法正常切回手机。脚本来自阿里巴巴安全风控体系,还会采集 Canvas、WebGL、硬件与交互数据,构成综合设备指纹。可用 uBlock Origin 屏蔽相关脚本。

来源:Hacker News

终于找到了:两个隐藏的音频上下文!

在对 AliExpress 首页进行空闲态抓取时,页面创建了两个 AudioContext 对象。两者都进入运行状态,并且都将节点连接到了 AudioContext.destination。

构造函数堆栈指向两个脚本:

https://assets.aliexpress-media.com/g/AWSC/uab/1.140.0/collina.js

https://assets.aliexpress-media.com/g/AWSC/fireyejs/1.231.67/fireyejs.js

第一个上下文由 collina.js 创建,第二个来自 fireyejs.js。两者都位于 AWSC 目录下,看起来属于阿里巴巴的浏览器安全与反滥用工具链。

这些脚本被高度混淆,但仍有足够多的名称和操作保留下来,让 AI 能推断出这些音频代码在做什么。

两个脚本构建的 WebAudio 图大致如下:

-> AudioContext.destination

振荡器生成一个已知波形;分析器测量信号经过浏览器音频实现后的结果,脚本从中读取频率数据。

增益被设为零,因此用户应该听不到任何声音。然而,该图仍然连接到了系统音频目标。连接到目标会导致浏览器主动处理该图,即使最终音量为零。

这与自动播放视频非常不同。这里没有媒体元素,浏览器常规的标签页静音控件无法将其停止。对页面而言,它是在进行实时音频处理。

就我的情况而言,这似乎足以让 Firefox 或 Windows 保持蓝牙音频通路处于活动状态,导致我的多点连接耳机无法干净地切回手机。

WebAudio 测试并不是这些脚本中唯一的测量项。检查打包后的代码发现,其中包含会查询或测量以下内容的代码:

此外还有用于对结果进行序列化和加密、向阿里巴巴遥测服务发起请求,以及通过 fetch() 或 sendBeacon() 发送数据的代码。

这构成了相当全面的浏览器与设备指纹。

音频指纹之所以可行,是因为浏览器版本、操作系统、音频库和硬件中的细微差异,会让同一个生成信号产生略有不同的结果。它本身不一定足以唯一识别一台设备,但一旦与 Canvas、WebGL、硬件、时序和交互数据结合,就会有用得多。

我无法看到 AliExpress 在这些数据到达其服务器后会用它们做什么。它可能被用作持久化设备标识符,也可能只是欺诈或机器人检测评分的一个输入。

AliExpress 有很多理由需要区分普通购物者与自动化或可疑客户端,同时也要跟踪用户的浏览习惯。该网站需要应对账号被盗、虚假账号、爬取、自动购买、支付欺诈、评论操纵,以及滥用优惠券或新客促销等行为。同时,和大多数大型企业一样,它们也会利用大规模用户行为数据集来更好地营销产品和服务。

Cookie 在这方面并不是特别可靠,因为 Cookie 可以被清除、复制或替换。由许多独立浏览器测量数据构成的指纹,更难被持续一致地伪造。

交互数据也有助于判断浏览器是由真人还是自动化程序控制。从 AliExpress 的角度来看,这可以减少欺诈,并让受信任的客户无需每隔几页就看到一次 CAPTCHA 验证码。(尽管 AliExpress 在使用其 AI 生成的验证码方面并不克制。)

就我个人而言,我不希望一个购物首页在后台悄悄调用我的图形、音频、WebRTC、硬件和运动 API 等来跟踪我的行为,尤其当它还会产生像阻断我的音乐这样烦人的副作用时。也许正是 AliExpress 阻断我的音乐,才让我去调查这个网站到底在做什么。

我测试了屏蔽这两个已识别的脚本系列。在同时屏蔽这两个请求的情况下,AliExpress 首页仍然正常渲染,并且在对照抓取期间没有出现 AudioContext 对象或 destination 连接。

在 Firefox 中,我使用 Raymond Hill 开发的官方 uBlock Origin 扩展。要屏蔽这些脚本,请打开 uBlock 控制面板,选择“我的过滤器”,然后添加:

||assets.aliexpress-media.com/g/AWSC/uab/*/collina.js$script,domain=aliexpress.com
||assets.aliexpress-media.com/g/AWSC/fireyejs/*/fireyejs.js$script,domain=aliexpress.com

点击“应用更改”,关闭所有已打开的 AliExpress 标签页,然后重新打开该网站。必须关闭已有标签页,因为屏蔽脚本并不会关闭脚本已创建的音频上下文。

这些过滤规则有意收得很窄。它们只屏蔽观察到的这两个脚本系列,且仅在 AliExpress 请求它们时生效。如果这招将来失效,我也不会感到意外;真到那时候再说吧。