前言
如何通过web浏览器确定设备指纹一直是一个难题,而本篇论文(Cross Browser Tracking_NDSS17)带给我们不少新的思考与突破点。
本人将结合个人理解,对该篇论文进行原理,代码等方面的详细分析。
本次解读分为4部分:
part1:文章整体结构梳理
part2:文章技术理论简单介绍与测试
part3:文章技术理论部分代码实现解读与测试
part4:文章整体架构部分代码实现解读与测试
文章概要
文章目的
通过操作系统与硬件等不同特征,无论用户使用多少种浏览器,都可以唯一跟踪用户设备。
比如:用户A无论使用了谷歌,火狐还是IE浏览器访问了我的网站,我都可以利用该论文中的技术计算出用户A的设备指纹,且无论使用哪种浏览器,设备指纹计算结果均相同
文章由来
第一代追踪技术:根据cookie进行跟踪
第二代追踪技术:根据js获取操作系统、分辨率、像素比等设备信息,进行设备跟踪,设备归并
(但此方法很难确保准确率,因为跨浏览器后会有很多参数发生改变)
第三代追踪技术:则是发现设备后面的人。通过人的习惯、人的行为等等来对人进行归并,此项技术比较复杂。
那么本文进行的研究是2.5代追踪技术,即第二代追踪技术的改进版,希望做到无论用户切换多少种浏览器,设备的跟踪都可以具有稳定性和唯一性
文章结构
第一部分
介绍了借鉴已有技术AmIUnique
的部分:WebGL
WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了。
而作者后续的新提出的十几项渲染任务,基本是使用了该项技术
第二部分
技术改进
1.屏幕分辨率改进点
- 利用屏幕宽度和高度的比率,这样即可不随屏幕的缩放级别而改变
- 新发现参数availHeight,availWidth,availLeft,availTop,screenOrientation可用于指纹特征
2.字体列表改进点
- 曾经的字体列表基于Flash插件获取字体列表,但本技术采用侧信道方式,测量字体的高度与宽度以确定字体类型(后续文章也对这一块的代码进行了详细分析,的确可以在不支持flask的情况下准确得到支持的渲染字体类型)
新技术
1.原子指纹特征
通过WebGL使用精心挑选的计算机图形参数texture,anti-aliasing,transparency
,渲染任务,然后从渲染输出中提取特征进行分析,以区分不同浏览器
2.符合指纹特征
通过WebGL使用精心挑选的计算机图形参数light
,渲染任务,然后从渲染输出中提取特征进行分析,以区分不同浏览器
(作者为设计了十几项渲染任务,详细任务内容在后续文章中进行阐述,但这一块的结果并未应用到跨浏览器的设备指纹计算中)
第三部分
技术实现的整体架构与细节
(后续文章将结合代码分析该技术架构)
第四部分
技术的代码实现(简单介绍了代码量和使用的开源库)
第五部分
技术的实践与数据搜集
对Amazon Mechanical Turks
和MacroWorkers
进行数据搜集,并和当今存在的指纹计算进行比对,得到如下结果:
计算公式
其中H(X)是香农熵,x是变量,值是各种概率。P(x)是概率函数。Hm是最坏情况下的熵,即每个指纹都相同,并且我们拥有最大的熵。N是所有指纹的个数。
值得注意的是,我们发现List of Fonts
越来越少,到本篇论文只有0.219了,这说明Flash正在逐渐被淘汰
然后又进行了唯一性和稳定性对比:
可以看出作者的单一浏览器指纹和跨浏览器设备指纹识别率更高更稳定
第六部分
实验结果统计与分析
从浏览器分类上来看
每个单元格为:唯一性(跨浏览器稳定性)
几个特点:
1.IE与Edge与其他的配对的唯一性相对低,因为其均为微软独立开发的
2.IE与Edge的稳定性很高,说明其有较多的共享代码
3.所有浏览器对Edge浏览器的唯一性都高于其对IE浏览器的唯一性,因为Edge引入更多功能,并严格遵守WebGL,暴露更多指纹信息
从特征分类来看
不难看出List of fonts
无论是对单一浏览器还是跨浏览器都有非常重要的作用。但是由于Flash的逐渐淘汰,我们应该选择使用JavaScript来获取List of fonts
也难怪作者最后的demo,使用了该特性作为跨浏览器指纹特征之一
第七部分
简单提及了指纹识别的防御,主要是tor浏览器为例:
1.对浏览器输出做规范化处理
2.默认禁用canvas,除非用户开启
3.虚拟化,找到近乎所有可用于指纹的特征,将其虚拟化
第八、九、十部分
与本文相关技术的相关工作,本文的文献引用以及总结
后记
本篇文章主要对web指纹,设备指纹做一个简单介绍,对论文脉络做一个简单梳理。更多技术内容见后续文章。