Audio Fingerprint:为什么伪造“音频指纹”反而会暴露浏览器配置,而不是将其隐藏


12.09.26

在浏览器指纹识别方面,音频上下文通常与 Canvas、WebGL、字体和其他浏览器标识符来源归为一类。其逻辑似乎显而易见:浏览器执行操作,接收结果,结果被转换为音频指纹,网站使用该指纹来识别用户。这引出了一个更显而易见的结论:如果指纹可以更改,那么就应该更改。这正是大多数反检测机制背后的逻辑——也正是在这里,用户画像最容易被发现。

实际上,这是反欺诈方法中最危险的误解之一。现代反机器人和反欺诈系统通常关注的并非音频上下文结果本身,而是获取结果的过程。问题不在于“这个用户的音频指纹是什么?”,而在于“他们的计算机花了多少时间计算它,以及这种性能是否与宣传的环境相符?”此时,音频上下文就无缝地从“音频指纹”转变为一个小型浏览器性能测试。

为什么“音频指纹”这个名称具有误导性

“音频”一词本身就让人联想到声卡、扬声器或麦克风。但其工作原理却截然不同:浏览器会创建一个虚拟音频图,生成一个信号,通过 Web Audio API 处理该信号,并分析结果——所有这些操作都无需播放任何实际声音或访问麦克风。大部分计算都在浏览器内部完成,即使没有物理声卡的系统也能轻松执行这些计算。因此,音频指纹并非“音频系统序列号”,而是浏览器音频引擎使用特定输入参数实现的结果。

这种方法本身并不新鲜。早在2010年代中期,研究人员在研究大型网站上的隐蔽指纹识别技术时,就发现了Web Audio API:该页面会运行音频计算并返回一个相当稳定的输出值。表面上看,它就像一个经典的指纹——计算结果会生成一组数字,然后用这些数字构建一个简洁的标识符。但值的稳定性并不一定意味着它是唯一的。

假设某个浏览器返回 35.738329593092,并且这个数字几个月都没变——这看似是一个完美的指纹。但如果数百万使用同一浏览器的用户都收到相同的值,那么它的识别价值就完全不同了。它擅长描述浏览器系列或音频引擎的实现,但很难识别特定用户——就像用户代理(User-Agent)一样:它是一个有用的信号,但并非唯一标识符。而且由于 Chromium 的音频处理算法变化不大,因此即使使用相同的代码库,该结果也可能在多个版本的 Chrome 浏览器以及不同的 Chromium 浏览器(例如 Edge、Opera 等)之间保持不变。

独特性是一种陷阱

这就是许多人都会遇到的悖论。千百万人拥有相同的自然音频特征。反检测技术会随机改变这种特征,使个人特征显得更加“独特”,将一个常见的、预期的值变成罕见的、人为设定的值。这种试图降低被检测难度的做法,反而使个人特征更加引人注目。

问题在于一种根深蒂固的指纹识别谬误:你的参数与其他用户的差异越大越好。但就隐私而言,情况通常恰恰相反。如果一百万个用户看起来都一样,就很难从中识别出任何一个;如果你的浏览器是整个数据集中唯一返回特定参数组合的浏览器,那么你就成了一个“信标”。一个好的用户画像不必独一无二——更常见的情况是,它应该合情合理。独一无二≠合情合理。

对于多账户来说,结论很简单:反检测浏览器中的“噪音”按钮或音频随机化功能看似有用,但如果返回的是一个罕见的、非典型的值,那么用户的特征反而会更加明显,而不是更不明显。与其拥有“独特”的音频指纹,不如使用浏览器预设的批量生成的音频指纹——这样就能将你融入数百万其他用户的音频指纹中,从而更加安全。

真正的价值不在于印记,而在于时间。

如果指纹本身如此无关紧要,为什么还要使用音频上下文呢?因为指纹信息只占一半。另一半信息是浏览器获取它所花费的时间。每一次计算都会消耗 CPU 时间:创建音频上下文、设置信号发生器、将数据通过多个 DSP 操作、执行数学运算,以及生成最终缓冲区。这是一个简单的链条:音频上下文 → 计算 → CPU → 执行时间。

我们假设有两个系统。系统 A 是一台配备高速桌面处理器的现代物理 PC。系统 B 是一台资源受限的虚拟专用服务器 (VPS),其 CPU 时间被分配给多个虚拟机。两者都能返回完全相同的音频指纹,但前者计算速度更快,后者则明显更慢。仅从指纹来看,这两个系统似乎完全相同;但查看运行时间可以发现更多信息。这时,Audio Context 就派上了用场,它是一个基于浏览器的小型 CPU 基准测试工具。

为什么时机比任何价值都更有趣

反欺诈系统之所以关注时间信息,原因很简单:伪造一个数字通常比伪造环境的物理属性要容易得多。JavaScript API 可以被拦截,返回值可以被修改,一些浏览器属性也可以被覆盖。但实际的计算仍然需要在某个地方进行。如果环境声称“我只是现代 PC 上的一个普通 Chrome 浏览器”,但多个独立的性能测试显示其性能更接近于一台配置有限的 VPS,这就产生了矛盾。这本身并不能证明存在欺诈行为——但反欺诈系统正是寻找这类矛盾之处。

反欺诈并非寻找“不良价值观”,而是寻找不一致之处。

现代系统可以同时考虑操作系统、浏览器、CPU、WebGL、Canvas、音频上下文、可用内存、逻辑处理器数量、屏幕分辨率、GPU、用户行为、IP地址、ASN、网络延迟、时区、语言和账户历史记录等因素。每个参数单独来看可能都完全正常,但它们的组合分布才值得关注。Chrome浏览器、Windows系统、RTX 4080显卡、16线程和64GB内存的组合看起来合情合理。但如果最简单的CPU测试运行速度都只有老式双核处理器的水平,那就值得怀疑了。

为什么VPS和服务器会泄露自身信息?

VPS(虚拟专用服务器)运行在物理主机上,与其他虚拟机共存。用户通常会获得一个虚拟CPU(vCPU),但vCPU并不总是等同于一个独立的物理核心:性能取决于相邻虚拟机的负载、虚拟机管理程序调度器、超额分配、NUMA布局、物理处理器频率、服务提供商的限制以及许多其他因素。因此,在VPS上运行相同的JavaScript基准测试可能会出现更不稳定或异常的计时结果。

大多数人在租用服务器时会忽略一个细微差别:他们关注核心数、内存、固态硬盘和网络,却往往忽视了单核性能。然而,基于浏览器的任务在几十个核心上的性能扩展性往往很差——即使是64个核心,一个小型顺序JavaScript基准测试也几乎无法从中受益;单核速度远比多核速度重要。对于某些浏览器操作,拥有大量低速核心的服务器的性能远不如典型的现代高性能CPU那样接近桌面级体验。需要注意的是:仅以GHz来比较处理器是不恰当的——IPC、代数、睿频加速和微架构都会产生显著影响。但重点很明确:核心数量多并不一定意味着所有基于浏览器的任务都能获得更快的性能。

即使是裸机硬件也未必能解决问题。服务器硬件本身就与消费级硬件有所不同:较老的至强处理器通常拥有多个核心、相对较低的时钟频率以及不同的缓存架构,一些性能测试也反映了这些差异。网站虽然无法通过 Audio Context 读取具体的至强处理器型号,但其性能表现很可能与现代家用电脑的性能表现存在统计学上的显著差异。

这引出了一个套利者经常低估的实际问题:运行账户的基础设施也是资源占用的一部分。如果账户运行在廉价且资源紧张的VPS或只有少量低速核心的服务器上,即使参数选择完美也无济于事:从时间性能来看,这样的环境与家用电脑截然不同。对于高价值账户而言,与其一味追求核心数量和内存容量,不如选择单线程性能强劲且拥有专用资源的硬件更为明智。

但这并非“虚拟机检测器”。

这是否意味着 Audio Context 一定能检测到 VPS?并非如此——这种说法过于绝对。没有任何浏览器基准测试能够通用地检测虚拟化环境。现代虚拟化技术非常高效,即使是物理计算机也可能运行缓慢:老旧的笔记本电脑、节能模式、高后台负载、过热降频——所有这些因素都会影响测试结果。更准确的说法是,Audio Context 的测试结果可以作为判断环境的指标之一。

CPU运行缓慢可能意味着使用的是虚拟专用服务器(VPS)或老旧笔记本电脑——单次测试无法区分这些情况,因此,优秀的防欺诈解决方案会采用概率和一系列指标,而不是像“超过X时间即阻塞”这样的绝对规则。实际的商业系统要复杂得多,但风险评分仍然是一个有用的模型。同样重要的是,虚拟化是可以调整的:通过为虚拟机分配更多CPU资源、使用CPU绑定、减少资源争用、利用硬件虚拟化、主机CPU直通以及使用单线程性能高的处理器,虚拟机的性能将接近其原生性能水平。顺便一提,现代硬件虚拟化技术直接在CPU上执行大多数指令,因此“每条指令都被模拟”的说法是不正确的;运行时间还会受到其他因素的影响——虚拟CPU调度、虚拟定时器、上下文切换和CPU争用。所有这些都再次表明,这项技术并非“看到VirtualBox”,而是观察环境运行的后果。当这些后果消失时,信号也会消失。

替换毫无用处,随机化则很危险。

假设实际值为指纹 A,而反检测算法将其更改为指纹 B。虽然指纹编号发生了变化,但处理器、虚拟机管理程序、运行时间、WebGL 运行环境和网络环境均未改变。往好了说,你只是替换了一个薄弱环节;往坏了说,你却制造了一个新的差异。

随机伪造参数是最糟糕的策略之一。我们来看一个看似合理的配置:Windows 11、Chrome浏览器、NVIDIA RTX 4070显卡、1920x1080分辨率、Intel Core i7处理器、48 kHz音频采样率。如果反检测系统开始独立地随机化采样率、Canvas、WebGL和其他参数,那么最终得到的组合在现实世界中几乎不可能出现。反欺诈系统无需证明具体是哪个参数被伪造——只需注意到这台计算机的配置在统计上异常即可。

采样率就是一个很好的例子。44.1 kHz 和 48 kHz 是常见的采样率,当然也存在其他值。改变采样率会改变原始音频处理参数,这意味着指纹识别器(或称“指纹识别器”)也可能随之改变。从形式上看,你会得到一个不同的指纹识别器,但问题在于这种配置对于该设备来说是否自然。不常见的频率本身并不值得怀疑:市面上有很多专业音频接口都采用了非标准设置。归根结底,一切都取决于它与其他特性的一致性。

实际上,这通常是对“为什么一个运行良好的账户突然被封禁?”这个问题的答案。声音、Canvas、WebGL 和其他组件的独立随机化创建了一种在现实世界中几乎不存在的组合——而且系统不需要知道你具体调整了哪些设置;只要设备整体看起来不真实就足够了。

不是意义,而是一致性

传统的指纹识别方法是:找到一个唯一的数字来识别用户。而现代方法则更有趣:收集多种特征并检查它们的一致性。无需知道确切的设备型号——只需观察系统的某个部分是否显示为“现代消费级PC”,而另一个部分是否显示为弱云环境即可。因此,反检测并非仅仅是生成一个随机指纹;真正具有挑战性的任务是构建一个内部一致的环境。

这就是为什么性能指纹变得越来越重要。简单的 API 参数相对容易伪造——你可以篡改 `navigator.hardwareConcurrency`、Canvas、WebGL 或返回的音频指纹。但性能特征属于另一类信号:要让性能较弱的虚拟 CPU 表现得像一台强大的桌面电脑,仅仅依靠一个变量是不够的。你可以尝试篡改像 `performance.now()` 这样的计时器,但这会带来新的问题:JavaScript 会不断地操作时间,而一个网站可以同时比较几种独立的计时方法。

音频上下文与其他浏览器基准测试结合使用时,尤其能揭示问题所在。WebGL 基准测试报告图形子系统及其性能,而音频上下文则报告基于 CPU 的计算。如果 WebGL 基准测试显示图形性能较弱,音频基准测试显示 CPU 性能较弱,渲染器看起来异常,并且 IP 地址属于托管服务提供商,那么综合这些信号比任何单一参数都更有参考价值。

为什么反机器人程序会搜索虚拟环境?

使用虚拟专用服务器 (VPS) 或虚拟机 (VM) 本身并不构成欺诈:开发人员、系统管理员、安全研究人员、质量保证团队和企业都需要虚拟机。然而,自动化活动通常也存在于云端,便于扩展,因此数据中心和虚拟化环境的特征可以用于风险评分,但这些特征只能作为预警信号,而非致命的判定。历史上,音频上下文已被证明对打击机器人程序非常有效,原因就在于此:机器人程序通常运行在无头浏览器、容器、虚拟机、廉价 VPS 和自动化环境中,这些环境与典型的家用浏览器截然不同。浏览器性能测试提供了另一种客户端分类方法——音频指纹本身是次要的,主要关注点在于计算环境的运行情况。

是否有可能判断一个网站是否使用了音频上下文?答案是肯定的——Web Audio API 是一个浏览器接口,因此相应的调用会被开发者工具或专用扩展程序捕获。但是,页面上是否存在音频上下文并不一定意味着该网站具有独特的特征:Web Audio 被广泛应用于音乐和视频服务、游戏、可视化、音频处理和网络会议等领域。

这对多账户、套利和营销意味着什么?

如果去掉理论,只留下影响账户存续的因素,你就会得到一些简单的规则。

  • 合理性比独特性更重要。不要追求所谓的“独特”特征——常见且符合预期的值比罕见的值更能隐藏你。警惕音频、Canvas 和 WebGL 的过度随机化:它往往会凸显而非隐藏你的特征。 

  • 基础设施是用户身份的重要组成部分。运行浏览器的处理器会影响运行速度。廉价且超负荷的VPS和核心速度慢的服务器会暴露其劣势;对于高价值账户,应选择单线程性能强劲且配备独立CPU的硬件,而不是追求数量最多的核心。 

  • 一致性胜过随意替换。让整个配置信息呈现统一的整体——音频、GPU、CPU、显示器、时区、语言和 IP 地址都应该匹配。单独替换其中的某个值会破坏这种一致性。 

  • 绿色勾号并不代表通过。公开的指纹验证器显示的是价值观,而非行为。真正的平台会评估一致性和及时性,因此“通过验证”并不一定意味着“躲过了反欺诈”。 

  • 目标并非不惜一切代价隐藏身份。最终胜出的并非最隐蔽、最随机或最独特的个人资料,而是可信且前后一致的个人资料,以及能够持续存在更长时间的个人资料。 

关键在于逼真,而不是伪装。

这种实际意义颠覆了我们熟悉的问题。与其问“如何隐藏我的音频指纹?”,不如问:网站究竟计算了什么?这个值的波动有多大?以及——最重要的是——它与其他所有因素有何关联?不妨把浏览器想象成护照检查处的人:一份文件显示“我25岁”,另一份文件显示“我的驾照是30年前拿到的”;每份文件单独来看都无可挑剔,但放在一起却完全不符。Chrome浏览器呈现一种信息,WebGL呈现第二种,CPU性能呈现第三种,音频上下文呈现第四种。如果这些信息匹配,个人档案看起来就很自然;如果不匹配,则存在风险。这正是为什么对单个数值进行毫无意义的随机化会逐渐失效的原因:系统不需要知道你的实际数值——它只需要注意到显示的信息与其他信息不符即可。

音频上下文就是一个绝佳的例子,说明了指纹名称的误导性。表面上看,它只是音频指纹;其下层是浏览器的音频引擎;再往下是原始的处理参数;最底层则是运行这一切的计算环境。反欺诈最关注的是底层:虽然数值可以被修改、API可以被拦截、字符串可以被重写,但实际的系统行为却难以隐藏。

反欺诈系统早已不再寻找单一的“神奇指纹”,而是利用众多微弱信号构建设备和用户模型,音频上下文只是其中之一。指纹本身可能识别价值不大,但其计算时间可以提供性能信息。结合 WebGL、CPU、网络和浏览器性能,这些信息有助于区分自然用户环境和异常或自动化环境。因此,替换音频指纹并非隐藏环境的万能方法:有时它不会改变任何事情,有时会造成不必要的异常,有时则会迫使系统提出一个更棘手的问题:为什么浏览器显示一套信息,而计算机的实际行为却截然不同?

想第一时间获取此类分析和最新研究成果吗?立即注册 Detect Expert 并订阅——所有新文章和研究报告都将直接发送到您的邮箱。毕竟,知识就是最好的反侦测手段!

还没有和我们在一起吗?

注册以访问所有网站功能。

注册

相关帖子

点击 "接受",即表示您同意专家可以使用 cookie 来帮助个性化内容。

您可以根据我们的 Cookie 政策.