神刀安全网

2.5代指纹追踪技术—跨浏览器指纹识别

2.5代指纹追踪技术—跨浏览器指纹识别

0x01 设备指纹技术介绍

本文主要是对这篇理海大学的 paper 的理解,各位也可以去看原文,或者看我翻译的蹩脚的中文版

这应该算是js获取的设备指纹最前沿的研究了

第一代指纹追踪是Cookie这类的服务端在客户端设置标志的追踪技术,evercookie是cookie的加强版

第二代指纹追踪是设备指纹技术,发现IP背后的设备,是通过js获取操作系统,分辨率,像素比等等一系列信息,传到后台计算,然后归并设备,唯一性可以保证,但准确率很难完全保证。

解释的明白一点就是,设备指纹相同,那么一定是同一台设备(很大概率),但是,设备指纹不相同,不一定不是同一台设备。

第三代指纹追踪技术,则是发现设备后面的人,通过人的习惯,人的行为等等来对人进行归并,比较复杂

第一代,第二代指纹追踪技术都是可以直接通过js收集信息的,第三代指纹追踪技术目前可以看到的实现是,2017年RSA创新沙盒的冠军 unifyid技术 ,但是通过RSA的答辩现场我们可以看到,unifyid会在移动端安装软件,然后收集信息,不是仅仅通过js收集信息,对于在web上的利用来说,还很难。

刚刚我们说到第二代指纹识别技术是唯一性可以保证,但准确率很难完全保证,主要原因就是在跨浏览器指纹识别上面,跨浏览器之后,第二代技术中很重要的canvas指纹,浏览器插件指纹,都变了,所以很难把跨浏览器指纹归并到同一设备上,当然,这是在完全没有考虑ip的情况下,理海大学的那篇paper也是没有用到ip,但是ip作为一个重要的因素,是可以发挥一定的作用的,后面会继续说明

那么2.5代指纹识别技术即是跨浏览器指纹识别技术

0x02 跨浏览器指纹识别特征

这篇paper中的创新点很多,最主要的是深入研究了显卡的渲染方法,图片的哪些部分用到硬件渲染,哪些部分只用到软件渲染,或者跟浏览器有关,paper中都有深入研究

着重讲一些比较有意思的特征,文章中用到的所有特征如下:

2.5代指纹追踪技术—跨浏览器指纹识别

其中很多特征都是在其他设备指纹的paper中出现过的,并且目前被广泛用于设备指纹项目的。比如canvas指纹是在单浏览器识别中是比较有区分度的特征。

对比一下已经开源的fp2的指纹列表

2.5代指纹追踪技术—跨浏览器指纹识别

fp2中的都是一些常规的追踪项目,并且如果用过就知道,其中很多项目是没有什么区分度的,比如

  1. Has session storage or not
  2. Has local storage or not
  3. Has indexed DB
  4. Has IE specific ‘AddBehavior’
  5. Has open DB
  6. Is AdBlock installed or not
  7. Has the user tampered with its languages 1
  8. Has the user tampered with its screen resolution 1
  9. Has the user tampered with its OS 1
  10. Has the user tampered with its browser

这些项只能进行一些大致的区分,并没有什么实际的参考价值

但是这篇paper中去掉了这些区分度低的特征,用到了另一类特征,显卡渲染图片,就是特征表中的task(a)-task(r),可以看到这些task的跨浏览器稳定性都非常高,也就是说受浏览器的影响不是很大,抽一些任务介绍一下

首先,paper中对图片渲染进行了简单的介绍

在此之前,首先介绍下面的基本画布设置。画布的大小为256×256。画布的轴定义如下,[0,0,0]是画布的中心,其中x轴是向右延伸的水平线,y轴是延伸到底部的垂直线,z轴朝远离 屏幕方向延伸。存在功率为[R:0.3,G:0.3,B:0.3](1)的环境光,相机位于[0,0,-7]的位置。这两个组件是必需的,否则模型完全是黑色的。在本文的其余部分,除非指定,例如具有2D特征的任务(d)和其他带有附加灯的任务,其他所有任务中使用相同的基本设置。

这里列举几个典型的task

task(a):纹理。 图2(a)中的任务是测试片段着色器中的常规纹理特征。 具体来说,Suzanne模型[19]在随机生成纹理的画布上呈现。纹理,大小为256×256的正方形,通过随机选择每个像素的颜色来创建。也就是说,我们在一个像素的三个基色(红色,绿色和蓝色)之间产生0和255之间的三个随机值,将三个基色混合在一起,并将其用作像素的颜色。

2.5代指纹追踪技术—跨浏览器指纹识别

选择这个随机生成的纹理,而不是常规的纹理,因为这个纹理具有更多的指纹特征。原因如下,当片段着色器将纹理映射到模型时,片段着色器需要在纹理中插入点,以便将纹理映射到模型上的每个点。插入值算法在不同的显卡中是不同的,当纹理变化很大时,差异被放大。 因此,我们需要生成在每对相邻像素之间颜色变化很大的这种纹理。

task(d):线和曲线。 图2(d)中的任务是测试线和曲线。 在画布上绘制一条曲线和三条不同角度的直线。具体来说,曲线遵循以下功能:y = 256-100cos(2.0πx/ 100.0)+ 30cos(4.0πx/ 100.0)+ 6cos(6.0πx/ 100.0),其中[0,0]为画布的左上角,x轴向右增加,y轴增加到底部。 三行的起点和终点是{[38.4,115.2],[89.6,204.8]},{[89.6,89.6],[153.6,204.8]}和{[166.4,89.6],[217.6,204.8]}。 选择这些特定的线条和曲线,以便测试不同的渐变和形状。

2.5代指纹追踪技术—跨浏览器指纹识别

task(f):光。图2(f)中的任务是测试漫射点光和Suzanne模型的相互作用。 漫射点光在照亮物体时会引起漫反射。 具体地说,该光是在RGB上具有相同值的白色,对于每种原色,光的功率为2,光源位于[3.0,-4.0,-2.0]。

2.5代指纹追踪技术—跨浏览器指纹识别

在这个任务中选择一个白光源,因为纹理是各种颜色的,单色光可能会减少纹理上的一些微妙差异。 光线的强度也是精心挑选的,因为非常弱的光线不会照亮Suzanne模型,模型就会看不见,但是非常强的光将使一切变白,并减少所有的指纹特征。 在6台机器的小规模实验中,当功率从0增加到255之间测试,我们发现当光功率为2时,这些机器之间的像素差异最大。 光照位置是随机选择的,不会影响特征指纹识别结果。

可以看到这些任务深入研究了图片渲染引擎的特征,js没办法直接获取到显卡的设置和驱动,但是通过这种方法,不同的显卡渲染同一张图片,因为设置不同而渲染出来的图片hash也不同,用这种图片hash作为特征,其实是从侧面得到机器显卡的特征,同一台机器是在不同的浏览器上用到同一个显卡,所以可以看到这些task的跨浏览器稳定性都很高,总共10余种 task,建议看原文,或者文后翻译的中文版。

Paper中除了这些task,还有一些其他新颖的东西

CPU内核数量:

这个在之前的设备指纹方案中都是没有使用到的,现代浏览器可以用navigator.hardwareConcurrency来获取,如果不支持这个方法,则可以利用另一种方式获取,具体来说是,当增加Web Worker的数量时,可以监视payload的完成时间。当计算量到达一定的程度的时候,Web Woker完成payload的时间显着增加时,就是达到了硬件并发的限制,从而通过这个判断核心的数量。 一些浏览器(如Safari)会将Web Workers的可用内核数量减少一半,所以在获取跨浏览器指纹时,我们需要将获取到的核心数量加倍。

具体可以看这篇 文章

writing script(language):

这个其实可以理解为语言,但是不是当前浏览器所使用的语言,而是系统支持的所有语言,比如中文简体,中文繁体,英语,js中并没有接口直接获取这种语言,但是这里作者想到了另一种方法,就是在页面用所有的语言写两个字,如果系统支持该语言,那么就能正常写出来,如果不支持,显示出来的就是方框

2.5代指纹追踪技术—跨浏览器指纹识别

通过这种方法获取系统支持的语言

AudioContext:

可能熟悉设备指纹的同学都知道,AudioContext在很多设备指纹项目上都用到了,具体来说现有的指纹识别工作使用OscillatorNode产生一个三角波然后将波传入DynamicsCompressorNode,一个抑制大声音或放大小声音的信号处理模块,即产生压缩效果。 然后,经处理的音频信号通过AnalyserNode转换为频率域。但是该paper指出频域在不同的浏览器中是不同的,这个特征受到了浏览器的影响,所以不能完全反应出声卡的特征。也就是说现有的方案只能识别单浏览器,但是他们发现,频率和峰值的比在浏览器之间是相对稳定的。因此,我们在频率和值的坐标系上创建一个间距很小的列表,并将峰值频率和峰值映射到相应的格子。 如果一个格子包含一个频率或值,我们将格子标记为1,否则为0:这样的格子列表用作跨浏览器特征。

除了波形处理外,还从音频设备获取以下信息:采样率,最大通道数,输入数,输出数,通道数,通道数模式和通道解释。这是现有的设备指纹工作没有用到的,又一个跨浏览特征.

在demo站中,从我电脑上收集到的信息如下

2.5代指纹追踪技术—跨浏览器指纹识别

我跨浏览器测试的结果

2.5代指纹追踪技术—跨浏览器指纹识别

的确能够跨浏览器识别,看到这里,由衷的佩服该项目

0x03 看代码

在我看来,十多个task,AudioContext,CPU core number,writing script,跨浏览器稳定性都如此之高,做一些机器学习的分析工作,算一算相似性,真的非常容易达到跨浏览器识别的目的,但是当我看到后端分析代码的时候,大跌眼镜

2.5代指纹追踪技术—跨浏览器指纹识别

这是代码中获取到的从前端传来的特征

然后就该通过这些特征计算跨浏览器指纹了

但是,他只是简单的把这些项目加到一起hash了一下,就作为跨浏览器指纹

2.5代指纹追踪技术—跨浏览器指纹识别

虽然demo站说明了跨浏览器指纹还在开发中,但是也太草率了吧

并没有什么复杂的计算,跟paper中提到的分析方式完全不同,跟我预期的什么机器学习的方式也不同。但是,跨浏览器的特征倒是选用了一些稳定性极高的特征,所以直接hash也能进行跨浏览器识别。

Paper的思想真的很好,但是这个代码质量,我就不说了。

所以沿着这个思想,还有很多工作要做

0x04 争议

该paper中一直提到的IP不可信的问题,既然是黑客溯源,对面是黑客,提出这个观点也无可厚非,毕竟大家都会挂VPN或者用肉鸡,但是IP作为一个重要信息,在设备指纹项目中完全舍弃,这一点我还是不能苟同的

我个人的观点:IP虽然不可信,但是短时间的IP是可信的

这里我不方便多讲,各位可以自己去试试IP+设备指纹的区分度还是很好的,而且很大程度上能解决一部分跨浏览器识别的问题。

转载前请务必文章出处作者

最后编辑时间为: May 27, 2017 at 06:08 pm

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 2.5代指纹追踪技术—跨浏览器指纹识别

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址