admin 管理员组

文章数量: 887006

1. 引言

上一篇文章,我们简单的聊了一下什么是浏览器指纹,它的作用,以及指纹浏览器诞生的过程。在这篇文章里,我们会通过指纹检测工具,进一步的深入了解指纹如何被识别,以及指纹都涉及了浏览器的哪些特征。

2. 查看浏览器的指纹

最老牌,也是曾经的权威检测站是 BrowserLeaks,它内部提供大量的工具,帮助我们查看浏览器的指纹。

2.1 IP

IP版块,会围绕当前浏览器的网络环境进行指纹的采集,其中包括浏览器地址,运营商信息,定位信息等。

除了这些基础信息,它还提供了DNS泄露检测,对于透明代理,我们可以通过追踪DNS信息发现代理的存在,以及整条代理链路的信息。像下图所示,此时网站的运营商,是可以知道我挂了代理,并且是通过中国一路跳转到美国节点的,甚至跨越了10个网络运营商。

除了DNS链路,还有一个比较重要的标识是TLS-JA3指纹

它会根据不同的系统,不同的浏览器,以及开启的TLS版本支持而存在细微的差距。

2.2 Javascript

在JavaScript版块中,主要是基于BOM API搜集浏览器公开的一些信息,这里的数据项十分多,并且大部分只是进行展示,就挑重点解释了

navigator.object & navigator.userAgentData

这俩板块要合在一起看,navigator是一个很重要的BOM对象,它提供了UA,操作系统,语言,CPU架构以及品牌等信息。而userAgentData,则对UA信息进行了详细描述和佐证。

webdriver这个属性,当Selenium通过WebDriver执行自动化脚本的时候,会被设置为true,这样网站就知道我们在使用自动化工具了。

而UserAgentData这个对象,是Chrome独有的对象,它提供了UA详细信息的描述,其中Brand/FullVersion用于校验UA的合法性,当这两个值被非法篡改时,无法通过WebDriver连接操作浏览器。

2.3 WebGL & Canvas&Audio

下面到了我们指纹的重头戏,也是指纹检测中比较常用和权重比较高的指纹

无论是Canvas还是WebGL,其原理都是通过绘制一张图片,获取其Hash作为唯一标识,这是因为不同显卡,操作系统以及浏览器在处理文字,图片时,抗锯齿的算法是不同的。

而WebGL的Vendor和Renderer可以与操作系统进行交叉验证指纹的真实性,举个例子,当一个浏览器的在UA里识别的是IOS,然后他的Renderer是 GTX4090,那么这个指纹已经可以被明确判定为造假了。

最后我们要说的是Audio指纹,这个在BrowserLeaks中一直没有被收录 ,所以没有办法给大家截图。他的原理同样是通过Web Audio API 合成一段音频,然后根据它的波形计算Hash,这个同样利用了不同硬件设备的差异,来确定指纹。

以上三种指纹都是通过动态运算获得的,他们也许很多时候会因为相同系统,相同版本浏览器,相同的机器而碰撞,但是依旧是权重很高的指纹。他们现在更多的作用是指纹验真,这个我们会在后续的文章中继续探讨。

2.4 WEB RTC

WebRTC这个,理论上并不算做指纹,它的作用是与IP部分进行交叉验证,找出用户真实的IP。由于WebRTC是基于UDP的,因此它在发送消息时,会携带自身的地址。这个地址,就是当前设备最终的IP。在这里,我的Web中国IP就被检测出来了。

如果希望隐藏自己的真实IP,那么有如下几个解决方案

  • 禁用WebRTC
  • 代理劫持全部流量

第一种方式简单粗暴,当您用不到WebRTC功能时,可以通过禁用它,防止网站尝试获取的您的真实IP。

如果我们期望WebRTC正常工作,例如我们经常在网站上看直播,或者进行视频会议。那么我们可以考虑通过代理的方式来解决。如果您的代理支持UDP,那么当您的代理劫持全部流量时,WebRTC的连接会使用NAT模式,也就是说,它UDP的回源地址,是您代理的IP,这样就可以隐藏您的真实IP。

2.5 字体

不同的系统,会携带一些自己特有的字体,例如微软的 微软雅黑,苹果的 苹方 等字体。通过对这些特征字体的识别,我们可以得到用户当前正在使用的是哪个操作系统。而Emoji表情在各个系统的实现差异,也可以辅助佐证这件事。例如我这台mac上发现了Apple字体族

3. 使用扩展改变浏览器指纹

如果我们希望改变指纹,那么我们可以使用 All Fingerprint Defender 这款扩展来实现这个目的。它通过劫持DOM API来达到这个目的。

下面我们来对比一下BrowserLeaks每次检测的结果

3.1 Canvas

3.2 WebGL

3.3 Font

通过以上几个指纹的对比,我们很遗憾的是它并没有对Canvas进行模拟。但是这恰恰说明了这是一个很聪明的扩展,具体原因,我们会在下一章进行解释。但是WebGL和字体,已经是随机指纹了。

除了以上内容,还有许多可以作为指纹的属性,这些大家可以通过指纹检测网站自行查看。

4. 总结

本篇内容主要带大家了解常见的指纹,他们之间互相的关系,以及指纹检测站的运用。我们通过扩展的形式动态修改了指纹,解决了指纹的唯一性。在下一篇文章《2024指纹浏览器——浏览器指纹 下》中,我们会讨论指纹的真实性,以及如何检查指纹是否真实。

本文标签: 指纹 浏览器 隐私 系列 产品