supercookie - ⚠️ 通过 favicon 进行浏览器指纹识别!

Created at: 2021-01-25 21:33:24
Language: HTML
License: MIT

超级饼干

文档

网站状态 授权协议

指纹索引 N 重定向

Supercookie使用网站图标为网站访问者分配唯一标识符。
与传统的跟踪方法不同,此 ID 几乎可以永久存储,并且不能被用户轻易清除。

跟踪方法即使在浏览器的隐身模式下也能工作,并且不会通过刷新缓存、关闭浏览器或重新启动操作系统、使用 VPN 或安装 AdBlockers 来清除。 🍿 现场演示

关于

💭 灵感

🪧 目的

此存储库仅用于教育演示目的

“supercookie”的演示以及该存储库源代码的发布旨在引起人们对使用收藏夹图标跟踪可能性的问题的关注。

📕 完整的文档

安装

🔧 docker

要求Docker 守护进程

  1. 克隆仓库
git clone https://github.com/jonasstrehle/supercookie
  1. 更新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
  1. 运行容器
cd supercookie/server
docker-compose up

-> 网络服务器将在https://yourdomain.com上运行

🤖 本地机

要求Node.js

  1. 克隆仓库
git clone https://github.com/jonasstrehle/supercookie
  1. 更新supercookie/server/.env 中的.env 文件
HOST_MAIN=localhost:10080
PORT_MAIN=10080

HOST_DEMO=localhost:10081
PORT_DEMO=10081
  1. 运行服务
cd supercookie/server
node --experimental-json-modules main.js

-> 网络服务器将运行在http://localhost:10080

的Workwise supercookie

📖 背景

现代浏览器提供了广泛的功能来改善和简化用户体验。这些功能之一就是所谓的网站图标:网站图标是一个小型(通常为 16×16 或 32×32 像素)徽标,供网络浏览器以可识别的方式为网站打上烙印。大多数浏览器通常会在地址栏中和书签列表中页面名称旁边显示网站图标。

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

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

必须使浏览器非常容易访问这些图标。因此,它们缓存在系统上一个单独的本地数据库中,称为网站图标缓存(F-Cache)。F-Cache 数据条目包括访问的 URL(子域、域、路由、URL 参数)、网站图标 ID 和生存时间 (TTL)。虽然这使 Web 开发人员能够使用各种图标为各个路由和子域描绘其网站的各个部分,但它也导致了可能的跟踪场景。

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

💣 威胁模型

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

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

超级饼干头

传统饼干

超级饼干

识别精度 —— 100%
隐身/私密模式检测
刷新网站缓存和 cookie 后仍然存在
识别多个窗口
使用反跟踪软件

🎯 目标

看起来所有顶级浏览器(ChromeFirefoxSafariEdge)都容易受到这种攻击场景的影响。 移动浏览器也受到影响。

当前版本

浏览器

视窗

苹果系统

Linux

IOS

安卓

信息
(v 87.0) ——
Safari (v 14.0) —— —— —— ——
边缘(v 87.0) ——
火狐(v 86.0) 隐身模式下指纹不同
勇敢(v 1.19.92) ——

之前的版本

浏览器

视窗

苹果系统

Linux

IOS

安卓

信息
勇敢(v 1.14.0) ——
Firefox (< v 84.0) ——

可扩展性和性能

通过改变与重定向到子路径的数量相对应的位数,这种攻击几乎可以任意扩展。它可以区分 2^N 个唯一用户,其中 N 是客户端重定向的次数。随着可区分客户端数量的增加,读取和写入操作所花费的时间也会增加。
为了尽可能减少重定向次数,N 可以有一个动态长度。更多关于这里

📌如何防御?

最直接的解决方案是完全禁用网站图标缓存。只要浏览器供应商不提供针对此漏洞的功能,这可能是清除 F-cache 的最佳方法。

  • MacOS

    • 删除
      ~/Library/Application Support/Google/Chrome/Default/Favicons
    • 删除
      ~/Library/Application Support/Google/Chrome/Default/Favicons-journal
  • 视窗

    • 删除
      C:\Users\username\AppData\Local\Google\Chrome\User Data\Default
  • SafariMacOS

    • 删除内容
      ~/Library/Safari/Favicon Cache
  • 边缘MacOS

    • 删除
      ~/Library/Application Support/Microsoft Edge/Default/Favicon
    • 删除
      ~/Library/Application Support/Microsoft Edge/Default/Favicons-journal

其他

🙎‍♂️ 关于我

我是一个二十岁的学生 🇩🇪德国。我喜欢从事软件设计和开发工作,并对 IT 安全领域感兴趣。

这个存储库,包括一个演示门户的设置,是在两天内创建的,作为一个关于“网络跟踪”主题的私有研究项目的一部分。

💖 支持项目

科菲

蔓延全球!

喜欢这个项目吗?给它一颗星 并传播世界!