一场蓝牙耳机故障牵出的追踪代码
中国跨国科技巨头阿里巴巴被指追踪网页用户。一名开发者在排查自己的无线耳机问题时,发现阿里旗下全球电商平台在后台运行隐藏音频进程,这些进程可能被用于复杂的音频指纹识别。
Matt Callaghan 当时正在处理一个多设备蓝牙连接异常。他在 Firefox 或 Chrome 中打开 AliExpress 网页后,耳机的多点蓝牙音频功能就受到干扰。按照他博客里的描述,正常情况下电脑会优先播放音频,手机只在电脑没有声音时出声。他平时习惯用手机听音乐,电脑只用来接收通知或播放 YouTube。
但加载 AliExpress 首页几秒钟后,手机端的音频就会停止,尽管电脑上并没有播放任何媒体。关闭 AliExpress 标签页后问题立刻消失,而把标签页、浏览器或 Windows 静音都没有效果。
从媒体元素查到 Web Audio API
Callaghan 起初检查了各种常规媒体元素,没有发现异常活动。他还注意到问题不是页面一打开就出现,而是网页闲置几秒后才开始。随后他把调查方向转向 Web Audio API,对 AudioContext 构造函数做了包装,用来记录页面何时创建音频处理上下文。他还包装了 AudioNode.prototype.connect(),查看是否有东西连接到音频上下文的输出端。
最终他发现页面加载了两个可疑脚本,名字分别是 collina.js 和 fireyejs.js,看起来属于阿里巴巴的浏览器安全和反滥用工具。借助 AI 辅助研究,他确认这些脚本构建了一个 Web Audio 图,用锯齿波振荡器生成波形。分析器在波形经过浏览器音频实现后测量结果,另一个脚本读取得到的频率数据。
脚本还把音量增益设为零,这意味着用户听不到任何声音或噪音,但浏览器仍在持续处理这个 Web Audio 图。与自动播放视频不同,这里没有媒体元素在播放,所以浏览器的标签页静音控制不起作用。网页继续执行实时音频处理,让蓝牙音频通道保持活跃,阻止多点蓝牙耳机在设备之间切换。
收集的数据不止音频
进一步调查还发现代码在收集与屏幕尺寸、设备内存、浏览器插件、WebGL 渲染、支持的音视频格式、浏览器性能、鼠标事件等相关的信息。这些脚本似乎还会对收集到的数据进行序列化和加密,然后通过 fetch() 或类似方式发送到阿里巴巴的遥测服务。
从目前公开的信息看,这些隐藏进程的核心用途指向设备指纹识别。音频处理链路的独特表现可以成为区分不同设备的依据,而屏幕、插件、WebGL 等数据则能进一步补全指纹维度。整个过程在用户无感知的情况下完成,音量归零的设计让耳机和扬声器都不会发出提示音。
Callaghan 的发现把阿里旗下 AliExpress 的浏览器行为推到了台前。对于普通用户来说,关闭标签页是眼下最直接的应对方式,但更值得关注的是,这类脚本在多大范围内被部署,以及它们收集的数据最终被用于什么场景。
热门跟贴