随着网络隐私保护日益受到重视,浏览器指纹识别技术也在不断演变。近日,安全研究人员发现,自 Chromium 148 版本起,JavaScript 中的数学函数 Math.tanh 在不同操作系统下返回的结果存在微小但可检测的差异,这一特性可能被恶意网站利用,将用户的浏览器行为与底层操作系统精确关联,从而绕过传统的指纹防御机制。
一、背景:从“数学函数”到“指纹探针”
浏览器指纹(Browser Fingerprinting)是一种无需 Cookie 即可识别用户设备的技术,通过收集浏览器版本、屏幕分辨率、时区、已安装字体、Canvas 绘制结果等数十项参数,生成唯一的设备标识。过去几年,攻击者常使用 Canvas、WebGL、AudioContext 等 API 来提取硬件或软件差异。如今,Math.tanh——一个看似与安全毫无关系的双曲正切数学函数——也被纳入了“指纹武器库”。
Chromium 148 于 2024 年 8 月发布,其对 V8 JavaScript 引擎的数值计算精度进行了优化。但研究人员发现,不同操作系统的浮点数运算单元(FPU)实现差异,以及编译器优化策略的不同,导致 Math.tanh 在处理某些边界值(如接近 0 或接近无穷大的数)时,在 Windows、macOS、Linux 以及不同的 CPU 架构(x86、ARM)上会产生尾数位级的微小偏差。通过重复调用该函数并分析输出值之间的统计模式,即可判断用户运行的是哪一类操作系统。
二、技术细节:如何通过 Math.tanh 实现 OS 指纹
研究表明,攻击者只需要在网页中嵌入一段看似无害的 JavaScript 代码,例如:
for (let i = -10; i <= 10; i += 0.001) {
const result = Math.tanh(i);
// 将结果按位提取并记录
}
通过分析 result 的二进制表示或浮点数值的十进制尾部,可以观察到在不同操作系统下浮点舍入误差的分布差异。以 x86 架构为例,Windows 默认使用 x87 FPU 的 80 位扩展精度进行内部计算,而 Linux 下的 GCC 编译器倾向于使用 SSE 指令集的 64 位双精度,这导致 Math.tanh(0.001) 的 IEEE 754 表示在几个最低有效位上存在差异。尽管这种差异小于 1e-15,但多次测量后的统计特征足够稳定,使得分类算法(如随机森林)能以超过 95% 的准确率识别 OS 类型。
更令人担忧的是,该方法对虚拟机或容器环境同样有效。由于宿主机操作系统的 FPU 行为会透传到虚拟机内部,即使浏览器运行在 Docker 或 KVM 环境中,攻击者仍能通过 Math.tanh 反向推断出宿主机 OS——这在云端环境下可能暴露用户的底层平台信息。
三、影响评估:从单点识别到跨站追踪
该技术的出现,补全了传统浏览器指纹中“OS 识别”精度不高的一块短板。过去,操作系统通常通过 navigator.userAgent 字符串获取,但现代浏览器已允许用户自主修改 User-Agent。而 Math.tanh 指纹基于底层硬件运算特性,用户几乎无法通过常规设置(如禁用 JavaScript)来防御(因为多数网站必然依赖 JS)。
潜在风险包括:
- 绕过反指纹浏览器:许多反指纹工具通过随机化 User-Agent 或 Canvas 噪声来干扰指纹,但它们无法修改 CPU 浮点运算行为。攻击者可结合
Math.tanh输出,配合 WebGL 和 Canvas 指纹,生成更难以伪造的设备签名。 - 跨域用户关联:当用户从同样使用 Chromium 148+ 的浏览器在不同域下访问时,OS 指纹可作为辅助特征,帮助广告网络或分析服务将分散的活动记录关联到同一设备。
- 隐私破坏:已曝光的跟踪脚本库(如 FingerprintJS)将可能迅速集成该技术,使数百万网站无需用户同意即可收集 OS 级硬件信息。
四、浏览器厂商与用户的应对之策
截至目前,Chromium 团队已经意识到该问题,但尚未决定是否修复。从历史上看,对于像 Canvas 指纹这类依赖于硬件差异的漏洞,浏览器厂商通常采取以下措施:
- 引入噪声:在 V8 的数学函数实现中添加随机噪声(类似 Apple Safari 在 Canvas 中做的“干扰”),使攻击者无法获得稳定结果。
- 统一默认精度:强制使用严格的双精度计算,消除不同 O S之间的浮点差异(但可能影响性能)。
- 限制调用频率:对
Math.tanh等候选函数设置调用阈值,超出后返回固定值或触发警告。
对普通用户而言,目前最直接的防御手段是升级浏览器至修复版本(若厂商后续推出补丁),或使用支持指纹随机化的扩展(如 CanvasBlocker),但需要确认其是否覆盖了 Math.tanh 点。企业安全团队则应关注内部系统的浏览器版本,并在审计中检测可疑的 Math.tanh 循环调用。
五、结语
随着隐私法规(如 GDPR、CCPA)对 Cookie 追踪的限制日益严格,浏览器指纹正成为数字广告和数据分析行业的新宠。然而,每一次新的指纹向量被发现,都是对用户隐私的又一次侵蚀。Math.tanh 的案例提醒我们:即便是一个简单的数学函数,也可能在看似无关的角落成为隐私泄露的缺口。在技术快速迭代的今天,隐私保护将永远是一场猫鼠游戏。