深度 · 小互解读

阿里全球通 AliExpress 通过一种类似间谍技术的手段来监控用户

一次蓝牙耳机故障,暴露了网页如何运行无声音频、收集多类设备信息,并在后台组成设备指纹。

一分钟速览
  • AliExpress 没有可听声音,标签页却显示正在使用音频,并在作者设备上干扰蓝牙切换。
  • 网页用固定波形测试设备,把计算差异和图形、硬件、操作信息组合成设备指纹并上传。
  • 两条规则可阻断,但可能影响登录和付款。

起因:蓝牙耳机突然被电脑“霸占”

AliExpress 使用了一种听起来很像间谍技术的手段来监控用户:它不是偷偷打开麦克风录音,而是在后台给设备做“指纹”。在目前找到的两条音频图里,没有麦克风输入,信号是网页自己生成的。网页让设备处理这段无声信号,再把结果和图形、硬件、操作信息拼成“设备指纹”。

这件事是技术作者 m-c-tech 无意中发现的。他的蓝牙耳机同时连着 Windows 电脑和手机。平时手机放音乐,电脑有声音时,耳机会自动切到电脑。

他打开 AliExpress 首页几秒后,手机音乐突然停了。网页没有播放视频或音乐,把标签页、浏览器和 Windows 静音也没用。只有关掉 AliExpress 标签页,手机音乐才马上恢复。

这是他在一套 Windows、手机和蓝牙多点耳机上的复现,不代表所有耳机都会这样。但这个故障暴露了一件事:AliExpress 页面虽然没有发出声音,却一直让电脑的音频通道保持活跃。

AliExpress 标签页出现扬声器图标

midudev 在西班牙 AliExpress 页面拍到:标签页出现了扬声器图标,说明浏览器把这个网页认作正在使用音频。图中的西班牙语 te identifica 意为“它识别你”,是原帖加上的判断;单凭这个图标,只能证明网页启用了音频通道,不能证明它已经识别出具体的人。

类似的底层问题并不是第一次出现。Mozilla 在 2023 年就记录过:AliExpress 页面会让 Windows 11 持续认为音频设备正在使用,甚至阻止电脑按时休眠;关掉标签页后才恢复正常。

破案:网页在后台运行一段听不见的音频

作者继续检查,发现页面在后台启动了两个 AudioContext。可以把它理解成网页内部的音频处理器。一个来自 collina.js,另一个来自 fireyejs.js,两者都处于运行状态。

西班牙 AliExpress 首页加载 fireyejs.js

补充素材:midudev 在西班牙 AliExpress 首页的开发者工具里也截到了 fireyejs.js,代码中能看到 onaudioprocess 和连接音频输出的语句。这证明相关代码确实被加载,不代表服务器已经把访问者关联到具体身份。

它们做的事,可以理解成网页给设备出了一道很短的“数学题”。

第一步,网页自己生成一段固定的锯齿波。这不是从麦克风录来的声音,而是一串由代码算出来的信号。无论谁打开网页,题目基本相同。

第二步,浏览器让电脑的 CPU、音频引擎和底层驱动处理这段信号。不同硬件、操作系统和浏览器在浮点计算、舍入和音频实现上可能出现极小差异,就像不同计算器算同一道题,最后几位小数略有不同。

第三步,脚本读取处理结果,把这些人耳无法分辨、代码却能读取的细小差异变成一组数字。这组数字才是“音频指纹”的原料;网页生成的锯齿波只是试题,不是它要保存的指纹。

最后,脚本把输出音量设成 0,所以人听不见。但为了完成这套处理,它仍把音频图连接到了浏览器的系统输出端点 destination。这也是浏览器可能显示扬声器图标的原因。

同一道题,不同设备可能算出不同小数
  1. 网页生成固定波形

    这是代码生成的“试题”,不是麦克风录音

  2. 设备计算这道题

    CPU、浏览器和驱动可能在最后几位产生差异

  3. 读取差异,音量设为 0

    网页拿走数字结果,人耳仍听不见

  4. 没有妥善停止上下文

    部分处理可能继续,系统仍认为音频设备在用

蓝牙耳机可能留在电脑侧;另一套 Mozilla 记录中,Windows 自动休眠也被阻止。

蓝牙后果来自作者的一套设备;休眠后果来自 Mozilla 的另一套 Windows 11 记录。

固定波形只是试题,计算结果才是指纹原料;测量很短,也不等于音频上下文已被正确停止。

测量本身很短。Mozilla 日志显示,约 80—100 毫秒后部分节点已经断开;但脚本没有妥善停止、挂起或关闭整个音频处理器。对操作系统来说,“没有可听见的声音”和“没有音频任务”不是一回事,因此它仍可能认为这个标签页占着音频设备。

结果是:系统仍可能把音频设备当成正在使用。在作者的设备上,蓝牙耳机因此留在电脑这一侧,不能顺利切回手机;在 Mozilla 记录的另一套环境里,它还阻止了 Windows 自动休眠。

这也解释了为什么“静音”无效:静音只负责不让你听见,不会替网页关闭 AudioContext。支持多点连接的耳机也不会分析声音是不是零音量,它只看到电脑这边仍有音频会话。在作者的耳机上,电脑因此继续获得优先权,手机音乐被打断。关掉标签页后,音频处理器被销毁,耳机才恢复正常。

真正的技术:给设备做“指纹”

无声音频只是其中一项。两段脚本还会收集很多设备特征:

  • Canvas、WebGL 等图形表现;
  • 屏幕尺寸、像素比例、CPU、内存和浏览器插件;
  • 音视频格式、WebRTC 和运行速度;
  • 鼠标、触摸、滚动、传感器和自动化工具的迹象。

更隐蔽的地方在于,这些高度混淆的脚本在普通购物首页就会加载,页面没有明显提示。

网站关心的不是其中某一个数字,而是这些特征放在一起时,当前设备表现得像什么。音频测试像一张答卷,Canvas、显卡、屏幕、CPU、插件和操作习惯则是其他答卷。单看一张未必能认出设备,把多张答卷拼在一起,可区分的范围就会变小。

这些信息会和音频测量结果放在一起,经过序列化、加密,再上传到 Alibaba 的遥测服务。单看任何一项都未必特别,但组合起来,就像给当前浏览器和设备做了一枚“指纹”。

多项信息,拼成一个设备指纹
  1. 图形表现

    Canvas、WebGL 等图形差异

  2. 屏幕与硬件

    屏幕、像素比例、CPU、内存、插件

  3. 音视频与网络

    音视频格式、WebRTC、运行速度

  4. 操作与传感器

    鼠标、触摸、滚动、传感器、自动化迹象

  5. 无声音频结果

    同一道波形经设备计算后留下的数字差异

组合成设备指纹加密上传

音频像一张答卷,其他特征是更多答卷;拼在一起,设备就更容易被区分。

Firefox 118 后,99.24% 的音频结果落在三个主要值;服务器如何保存和使用组合数据仍未知。

网页代码能显示多项信息被组合、加密并上传;它不能说明服务器之后会怎样保存或使用这些数据。

为什么有 Cookie 还要做这一套?Cookie 可以被删除、复制或替换。多组设备特征却更难同时伪装,所以常被用来判断设备是否异常、访问者是真人还是机器人,并辅助反欺诈和风险评分。

但别把它说成万能追踪器。Firefox 118 以后,WebAudio 输出已经被大幅标准化:Mozilla 的样本中,99.24% 的结果落在三个主要值里,主要反映 CPU 指令架构,而不是某一台具体设备。

这意味着音频单项几乎不能独立锁定一台设备。它更像“这台设备属于哪一类”的线索,而不是身份证号码。真正提高辨识力的,是多类信息的组合。从网页里的代码,也看不出服务器会保存多久、如何把不同访问关联起来,或最终只用于反欺诈、反机器人,还是也用于用户追踪。

怎么屏蔽

作者用 Firefox 的 uBlock Origin 阻断了两个脚本。在“我的过滤器”中加入:

||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 标签页,再重新打开网站。旧标签页已经启动的音频处理器不会因为新增规则自动停止。

在作者的测试中,首页和普通商品浏览仍能使用,两个音频处理器也不再出现。但这些脚本可能参与安全检查,屏蔽后可能增加 CAPTCHA,或影响登录、结账和付款。遇到这种情况,可以临时停用规则再重试。脚本地址以后变化,规则也可能失效。

来源
AliExpress webpage keeping multipoint Bluetooth headphones active with WebAudio fingerprintingm-c-tech / laserphile·查看主材料
本站说明
蓝牙故障来自一位作者的一套设备;目前定位到的两条音频图没有麦克风输入,音频单项也不是保证唯一的设备 ID。