作者:{whiteater}@ArkTeam
Mozilla计划于2018年1月份推出Firefox 58版本,该版本特别针对用户隐私进行了重大调整:网站在使用Canvas功能时,需要用户授权[1]。
Canvas是HTML5推出的一项功能,用于动态地在浏览器前端绘图。网站在HTML页面上创建Canvas标签,指定一块区域作为”画布”,就可以通过JavaScript操作这块区域的每一个像素绘图。
图1 在HTML5中使用Canvas标签绘制一个红色矩形
广告联盟和部分网站运营商,希望能够精准标识并追踪每一个用户,这样就可以在分析用户行为(如浏览的商品、使用的功能、搜索关键字等)的基础上,更加精准地营销,比如投放广告。如果多个网站联合起来,则可以实现更加强大的跨网站用户标识,使营销变得更加广泛和精准。Cookie曾经是最受欢迎的标识用户的方式,但随着浏览器对Cookie的限制增多,Cookie越来越不受待见。伴随着HTML5广泛地浏览器接受,Canvas逐渐成为网站标识和追踪用户的主流技术,并出现了Canvas指纹(Canvas Fingerprint)这一概念。
Canvas指纹的基本原理是,对于相同的HTML5 Canvas元素绘制操作,在不同的浏览器、操作系统、设备硬件上生成的Canvas图片,虽然视觉效果上极为相似,但图片二进制内容并不会完全相同。因为从图片格式来看,不同浏览器使用了不同的图形处理引擎、不同的图片导出选项、不同的默认压缩级别等等;从像素级别来看,操作系统各自使用了不同的设置和算法来进行抗锯齿和子像素渲染操作。这就导致了在不同的环境下,相同Canvas操作产生的图片的CRC校验值或者Hash值存在差异,学术上估算这个差异的信息熵至少在10个比特以上,非常适合用来作为区分浏览器或者用户的”指纹”。虽然Canvas指纹并非标识和追踪用户的最佳方案,但其隐蔽性极好,用户也无法完全阻止,因此该技术自出现以来就备受青睐。
图2 Canvas指纹的部署
2012年,K.Mowery等人[2]在”Pixel Perfect: Fingerprinting Canvas in HTML5″论文中对Canvas指纹的原理做了详细的阐述,并估算了其信息熵;2014年,Gunes Acar等人[3]在”The Web Never Forgets:Persistent Tracking Mechanisms in the Wild”论文中,详细介绍了Canvas指纹在真实互联网上的应用部署情况,并指出Alexa全球排名前10万的网站中,有5%的网站都在使用Canvas指纹来标识追踪用户(截至2014年5月)。
虽然网站标识和追踪用户的初衷可能是为了获得更好的用户体验,但无可辩驳的是,这种行为确实可以泄露用户的隐私,造成比较严重的负面影响——毕竟谁都不希望第三方网站或黑客知道自己刚刚在某购物网站下单了几款”令人尴尬的商品”,更不希望因此收到敲诈邮件,扬言不支付赎金就将购买尴尬商品的消息广播给自己的亲朋好友。如今Mozilla已充分认识到Canvas指纹可能给用户隐私带来的威胁,为了给用户提供更安全的上网环境和隐私保护,阻止不必要的网络追踪,Mozilla可能成为了首个为用户提供阻止Canvas指纹的浏览器厂商。未来的Firefox浏览器在使用Canvas功能时,可能会像下图的Tor浏览器(基于Firefox改进的浏览器)一样,弹出一个框框,请求用户赋予网站使用Canvas的权限!
图3 在Tor浏览器中使用Canvas功能需要用户授权
浏览器用户的标识与追踪一直是学术界和产业界感兴趣的话题,想深入了解这方面知识的同学们不妨读一读ArkTeam的另一篇技术文章”浅谈Web客户端追踪”[4]。
参考文献:
[1] https://www.bleepingcomputer.com/news/software/firefox-implements-another-privacy-preserving-feature-taken-from-the-tor-browser/
[2] K.Mowery and H.Shacham. Pixel perfect: Fingerprinting canvas in HTML5. In Web 2.0 Workshop on Security and Privacy (W2SP). IEEE, 2012.
[3] Acar G, Eubank C, Englehardt S, et al. The Web Never Forgets:Persistent Tracking Mechanisms in the Wild[C]// ACM, 2014:674-689.
[4]