通过图标来识别网站用户指纹

  • A+
所属分类:安全闲碎

背景知识

现代浏览器提供了各种各样的功能来改善和简化用户体验。其中一个特性就是所谓的favicon:favicon是一个小的(通常是16×16或32×32像素)logo,由web浏览器使用,以可识别的方式标记网站。多数浏览器通常在地址栏和书签列表中的页面名称旁边显示favicon。

为了在他们的网站上提供favicon,开发者必须在网页的标题中包含一个属性。如果此标记确实存在,则浏览器会从预定义源请求图标,如果服务器响应包含可以正确呈现的有效图标文件,则浏览器会显示此图标。在任何其他情况下,都会显示一个空白的favicon。

<link rel="icon" href="/favicon.ico" type="image/x-icon">

favicon文件对于浏览器来说,必须是可以很容易访问到的。因此,它们被缓存在系统上一个单独的本地数据库中,称为favicon缓存(F-cache)。F-Cache数据项包括访问的URL(子域、域、路由、URL参数)、favicon ID和生存时间(TTL)。虽然这为Web开发人员提供了使用各种各样的图标来描绘其网站的各个部分的能力,但是它也导致了一种可能的跟踪场景。

当用户访问某个网站时,浏览器通过查找所请求网页的快捷图标链接引用的源来检查是否需要favicon。浏览器初始检查本地F-Cache中是否有包含活动网站URL的条目。如果favicon条目存在,图标将从缓存加载,然后显示。但是,如果没有条目,例如,因为此特定域下从未加载favicon,或者缓存中的数据已过期,则浏览器会向服务器发出GET请求,以加载站点的favicon。

威胁模型

本文将介绍一种可能的威胁模型,该模型允许为每个浏览器分配一个唯一的标识符,以便得出关于用户的结论,并且即使在应用了反指纹措施的情况下也能够识别该用户,例如使用VPN、删除Cookie、删除浏览器缓存或操纵客户端标题信息等等。

一台Web服务器可以判断是否已经加载了favicon,因此当浏览器请求网页时,如果favicon不在本地F-cache中,则会对favicon发出另一个请求。如果该图标已存在于F-Cache中,则不发送进一步的请求。通过组合浏览器特定URL路径的已传递和未传递favicon的状态,可以为客户端分配唯一的模式(标识号)。当网站重新加载时,Web服务器就可以根据客户端发送的favicon丢失请求来重建标识号,从而识别浏览器。

支持该攻击场景的浏览器如下(包含移动端浏览器):

通过图标来识别网站用户指纹

关于Supercookie

Supercookie可以使用favicon来给网站的访问者分配唯一的标识符。跟传统的用户追踪技术不同,这种ID标识符几乎是可以永久存储的,而且用户无法轻易删除或修改。

值得一提的是,这种跟踪技术即使是浏览器处于匿名模式下也是可以正常工作的,而且无法通过刷新缓存、关闭浏览器、重新启动系统、使用VPN或安装AdBlockers来清除。


工具安装

Docker

要求:Docker守护进程

首先,我们需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/jonasstrehle/supercookie

接下来,更新supercookie/server/.env中的.env文件:

HOST_MAIN=yourdomain.com #or localhost:10080

PORT_MAIN=10080

 

HOST_DEMO=demo.yourdomain.com #or localhost:10081

PORT_DEMO=10081

现在,使用下列命令运行容器:

cd supercookie/server

docker-compose up

此时,我们的Web服务器就已经在运行了。(https://yourdomain.com)

本地设备安装

要求:Node.js

首先,我们需要使用下列命令将该项目源码克隆至本地:

git clone https://github.com/jonasstrehle/supercookie

接下来,更新supercookie/server/.env中的.env文件:

HOST_MAIN=localhost:10080

PORT_MAIN=10080

 

HOST_DEMO=localhost:10081

PORT_DEMO=10081

现在,使用下列命令运行服务:

cd supercookie/server

node main.js

此时,我们的Web服务器就已经在运行了。(http://localhost:10080)

工具演示

演示地址:【点我查看】

项目地址

Supercookie:https://github.com/jonasstrehle/supercookie/

本文始发于微信公众号(盾山实验室):通过图标来识别网站用户指纹

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: