静默页面突然抢占蓝牙音频

安全研究员 Laserphile 使用一副同时连接电脑和手机的多点蓝牙耳机时发现,只要在 Firefox 或 Chrome 中打开阿里速卖通首页,手机端正在播放的音频就会突然中断。页面上没有任何可见的视频、音频播放器或媒体内容,但耳机连接却被电脑端持续占用。

打开网易新闻 查看精彩图片

将浏览器标签页静音、把整个浏览器静音,甚至关闭 Windows 系统音频,都无法恢复手机端播放。只有关闭速卖通标签页后,问题才立即消失。这一现象出现在页面空闲数秒之后,常规排查没有找到任何 或 元素,也没有调用 HTMLMediaElement.play(),媒体会话接口同样未报告任何活动播放。

零增益音频图被用于设备指纹识别

为查明原因,Laserphile 通过改写 JavaScript 对 Web Audio API 进行直接监控。他覆盖了 AudioContext 构造函数和 AudioNode.connect() 方法,最终捕获到两个独立的 AudioContext 实例被创建并进入运行状态,每个实例都有节点连接到系统音频输出,却没有发出任何可听见的声音。

堆栈跟踪将相关活动指向两个脚本:collina.js 和 fireyejs.js。它们均托管在阿里巴巴资产服务器的 AWSC 路径下,与该公司的反欺诈和机器人检测工具相关联。对高度混淆的代码进行逆向分析后,研究员还原出一个 WebAudio 图结构:锯齿波振荡器接入分析器节点和脚本处理器,再经过一个设为零的增益节点,最后到达音频输出。

由于这个图在零音量下仍然保持与音频输出的连接,浏览器会持续对其进行处理。这种状态与静音视频有着根本区别,而 Firefox 和 Windows 似乎将其视为合法的音频活动,从而让蓝牙连接持续锁定在电脑端。

指纹采集范围远超音频

音频指纹只是整套追踪机制中的一层。同一批脚本还会探测画布渲染、WebGL 渲染器细节、屏幕与视口指标、硬件并发数、设备内存、已安装插件、WebRTC 行为、鼠标与触摸事件、设备运动数据,以及常用于检测浏览器自动化的信号。

采集结果经过序列化和加密后,通过 fetch() 和 sendBeacon() 发送到阿里巴巴的遥测端点。研究员指出,这类指纹识别通常用于对抗欺诈、虚假账户和爬虫,但该实现会在页面上无条件运行。