针对Cookie同意和 GDPR 违规的自动化检测工具

 

欧盟的通用数据保护条例 (GDPR) 要求网站告知用户有关个人数据收集的信息并请求同意其使用 cookie。然而,大多数网站并没有给用户任何选择,还有一些网站试图欺骗他们接受所有的 cookie。本研究通过分析近 3 万个网站的 cookie弹窗中潜在的 GDPR 违规行为来记录这种情况的严重性。本研究确定了六种新的违规类型,例如不正确的类别分配和误导性的过期时间,令人惊讶的是,分析的94.7% 的网站中发现了至少一种潜在的违规行为。然后,研究者开发了一种工具通过赋予用户保护其隐私的权力来解决这个问题,名为 CookieBlock 的浏览器扩展程序(https://karelkubicek.github.io/post/cookieblock ),它使用机器学习在客户端强制执行 GDPR cookie 同意。它仅使用 cookie 本身提供的信息,按使用目的自动对cookie 进行分类。在平均验证准确率为 84.4% 时,模型获得了与该领域的专家知识相媲美的预测质量。此外,本文方法与以前的工作不同,不依赖于网站本身的合作,在一组 100 个随机抽样的网站上对 CookieBlock 进行了实证评估,它在这些网站上过滤了大约 90% 的侵犯隐私的 cookie,而不会显着损害网站功能。

 

0x01 Introduction

浏览器 cookie 是跟踪网站会话状态的最常用方法。虽然网站运行需要一些 cookie,例如保持用户登录的身份验证 cookie,但大多数 cookie 用于用户跟踪和广告。尽管存在浏览器指纹识别等无状态跟踪技术,但使用 cookie 的状态跟踪仍然是主要的跟踪方法。

政府试图通过法规解决用户跟踪问题。在欧盟,通用数据保护条例 (GDPR) 和电子隐私指令对个人数据的收集和跟踪进行了限制。 GDPR 第 6 条规定,网站收集用户数据需要有法律依据,最常见的依据是同意。第 7 条和第 32 条规定,同意必须是自由给予的、明确的、具体的和知情的。 GDPR 的 ePrivacy 指令和 Recital 30 规定同意要求也适用于 cookie 的使用。因此,网站必须告知用户 cookie 的用途,并且必须为用户提供拒绝出于特定目的同意的选项。

GDPR 提出了对同意解决方案的需求,由此出现了一个新的“同意即服务”(consent as a service)行业。提供这些服务的公司,称为同意管理平台 (CMP,Consent Management Platform),为网站提供 cookie 弹窗,用于处理收集用户的同意,并详细描述 cookie 的所有用途。与仅告知用户仅使用 cookie 的简单 cookie 通知不同,CMP 承诺为用户提供对其个人数据的更多控制权,从而满足 GDPR 在这方面的要求。然而在来自英国的大约 14k 个网站和来自希腊的 3k 个网站的样本中,分别只有 44% 和 48% 的网站向用户显示 cookie 弹窗。 90% 的网站使用跟踪 cookie,这意味着许多网站忽略了遵守 GDPR。

使用 CMP 的网站也经常无法兑现承诺,许多网站甚至违反了基本规则。之前研究表明,在 680 个使用 CMP 的已检查网站中,有 88.2% 的网站在三个简单要求中的至少一项未通过,包括选择加入和明确同意的要求。在 1426 个选定网站的样本中,9.89% 的网站在用户做出选择之前表示同意,2.66% 的网站不允许拒绝任何 cookie,1.89% 的网站即使被用户拒绝也表示同意。此外,先前的工作还表明,许多 CMP 试图影响访问者接受所有 cookie。在 1000 个被检查的网站中,有 57.4% 使用轻推,这包括突出显示“全部接受”按钮,或隐藏拒绝同意的选项。这种趋势似乎没有改变,虽然高调的违规行为会受到处罚,但 GDPR 对 cookie 的执行却滞后。

分析:本研究通过扩展和改进过去的研究来确认缺乏 GDPR 合规性。使用了从近 3 万个网站收集的数据集分析cookie 弹窗上显示的信息的准确性。具体来说会识别不正确的类别分配、误导性的 cookie 过期时间,并评估同意机制的整体完整性。定义了六种新方法来检测潜在的 GDPR 违规行为,并扩展了先前工作中使用的两种方法。对于选定的域,发现 94.7% 包含至少一个潜在违规行为。在 36.4% 中,发现至少一个 cookie 的用途分配不正确,在 85.8% 中,至少有一个 cookie 缺少声明或用途。 69.7% 的网站在给予同意之前假设了积极的同意,21.3% 的网站在不同意的情况下创建了 cookie。结果表明这个问题比之前指出的更严重。研究涉及的过程和(中间)结果如下图所示。

浏览器扩展:根据先前工作的证据和本研究的测量,cookie 同意做法如此频繁地违反 GDPR,以至于监管机构无法跟上。因此研究者为用户提供了一种工具,可以在没有监管干预的情况下强制他们的网络客户端同意 cookie。本研究开发了一个浏览器扩展程序 CookieBlock,它按目的对 cookie 进行分类,删除用户拒绝的那些。通过这种方式,用户可以删除 90% 以上的所有侵犯隐私的 cookie,而无需信任 cookie 禁止者或 CMP。以前为用户提供这种控制的尝试,如 P3P 标准,由于网站管理员缺乏实现所需功能的意愿而失败。此工具完全不依赖网站的合作来回避这个问题。

本研究在一组 100 个网站上评估 CookieBlock,以量化扩展对用户浏览体验的影响。 CookieBlock 在 85% 的网站上没有问题,在 8% 上涉及非必要网站功能的小问题,在 7% 上导致更严重的问题。更严重的问题涉及由于删除基本 cookie 而导致用户的登录状态丢失。为了解决这些问题,用户可以选择性地定义网站豁免,并通过CookieBlock 的界面更改cookie 的分类。为了对 cookie 进行分类,CookieBlock 使用了一组决策树模型,该模型使用 XGBoost 库进行了训练。从 29398 个网站收集了一个 cookie 训练数据集,这些网站显示来自一组特定 CMP 的 cookie 弹窗。每个 CMP 都维护自己的 cookie 到目的的映射,用它来为数据集中的 cookie 定义基本事实类标签。

通过将其性能与“Cookiepedia”存储库进行比较来评估该模型。 Cookiepedia 根据其名称为 cookie 分配目标,并由浏览器 cookie 领域的专家在 10 年内手动构建。查询此存储库以进行目的预测,并将结果与选择的基本事实进行比较。总之,发现了Cookiepedia 达到了 84.7% 的平衡准确率,而本文的XGBoost 训练模型达到了 84.4%。因此,模型与人类专家所取得的性能具有可比性,表明可以仅使用 cookie 本身中可用的信息按目的对 cookie 进行自动分类。

首先,本工作识别了cookie 弹窗中的不准确信息,并将其应用于大约 3 万个网站的样本,发现其中 94.7% 的网站可能违反 GDPR。其次,提出了一个机器学习分类器,它可以从 cookie 中推断出目的,达到与人类专家相媲美的性能。第三,开发了一个浏览器扩展程序,可以根据用户的偏好自动删除 cookie,与同类方法不同,该扩展程序适用于任何 cookie,并且不需要网站合作。最后发布了工具,允许网站管理员验证和改进其网站的 cookie 同意合规性。

 

0x02 Dataset Collection

从同意管理平台 (CMP) 收集 cookie的使用目的:与 Cookiepedia 相比,这些使用目的由网站管理员选择,他们控制在用户浏览器中创建哪些 cookie。因此,研究者从完全了解 cookie 目的的各方收集,而不是从可能不知道完整背景的第三方收集。这也能够将类别分配给 Cookiepedia 可能不知道的少数 cookie

第一步是选择列出 cookie 及其用途的 CMP。然后,从一组 600 万个 do mains 中,检测到所选 CMP 的存在。对于每个使用 CMP 的网站,网络爬虫会收集 CMP 声明的 cookie 以及与网站交互时在浏览器中创建的 cookie。最后将声明与 cookie 结合起来,并获得用于分类器的训练数据。

A. 合适的 CMP 和 cookie 类别

网络上有大量的 CMP,每个都提供自己的网站插件。这些插件的范围从简单的通知到精心制作的 cookie 弹窗,允许用户从数十种可能的类别选项中进行选择。本研究打算收集的目的分配只能从所有 CMP 的一小部分中检索。在本节描述了用来选择它们的标准。

第一个标准是 CMP 必须公开且可靠地列出正确实施插件的每个网站上每个 cookie 的用途。这对于收集作为基线的使用目的标签至关重要。在某些网站上,CMP 可能会提供类别选择,但不会显示哪些 cookie 属于哪个类别。第二个标准是,当此映射存在时,它必须能够以一种可以自动处理的方式访问,最好是由 CMP 本身远程托管在服务器上。一些网站在其隐私政策中列出了 cookie 到用途的映射。这通常没有用,因为此类策略的 HTML 结构在站点之间差异很大,因此需要针对每种情况进行专门的数据提取。

在上表中列出了技术趋势数据库 BuiltWith 报告的全球市场份额最高的 CMP。对于每个条目,会根据标准列出它们对数据收集的适用程度。选择了 CMP OneTrust、OptAnon、Cookiebot、CookiePro 和 Termly,此处以粗体显示,将用于数据提取和分析的所有后续步骤。

没有法律规定 CMP 必须声明哪一组 cookie 目的。仅识别网站运行所必需的 cookie,根据 ePrivacy 指令第 5(3) 条,无需用户同意,因此可以在与 cookie 弹窗交互之前设置。

鉴于这些类别不受监管,这种选择因 CMP 而异。例如,IABEurope 定义的行业标准 Transparency and Consent Framework 2.0 (TCF) 提出了一组 12 种 cookie 用途。其他的,比如 OneTrust,甚至支持网站管理员自定义类别的定义。在这项工作中将自己限制在以下四个类别,这些类别最初由英国国际商会定义:

1.(严格)必要的cookie:在不破坏网站主要功能的情况下不能省略,例如身份验证cookies。

2.功能性cookie:允许在不收集用户数据的情况下进行网站定制,并且不是基本服务所必需的。示例包括用户特定的本地化和布局定制。

3.分析性cookie:用于跟踪和分析用户在单个域上的行为,并用于聚合数据收集。 Google Analytics cookie 是此类别的常见示例。

4.广告 cookie:通过跟踪多个不同域的用户来提供有针对性的广告。 DoubleClick 或社交媒体网站是跟踪 cookie 的常见来源。

除了这些类别之外,还识别了未分类的 cookie。上述四个类别的优点是它们代表了从最少到最多侵犯隐私的 cookie 类型的排序,并且它们代表了明显不同的功能。这使用户更容易选择和区分它们。为了将 cookie 弹窗中列出的用途映射到本研究内部使用的类别,使用下表中显示的关键字映射。不包含任何关键字的用途被记录为“其他”,并且既不用于训练分类器也不用于本文分析。

(2)CMP爬虫

在选择要定位的 CMP 后,需要找到使用这些 CMP 来显示 cookie 弹窗的域。为此使用 Python requests 库实现了一个快速的网站扫描程序,以同时获取多个目标网站的索引页面并扫描它们是否存在所需的 CMP。如果使用 CMP,则该网站被记录为检索 cookie 标签的潜在候选者,否则,该网站将被过滤掉。由于使用选定 CMP 的网站比例相对较低,并且为了最大限度地收集数据量,使用一组近 600 万个不同的域来初始化存在爬网。主要来源是 2021 年 5 月 5 日的 Tranco 排名(https://tranco-list.eu/list/P63J/full ),其中列出了按其估计的全球受欢迎程度排名的域名。

本研究的网络扫描是在位于德国的 AWS EC2 服务器实例上执行的,该实例具有 32 个 vCPU、64 GB RAM 和 10 Gigabit 连接。在欧盟国家内进行扫描时特别小心,因为以前的工作表明在 GDPR 执行方面存在重大的地理歧视。 Cookie 弹窗通常不太可能向非欧盟访问者展示。总的来说,为数据收集过程找到了 37 587 个(约 594 万的 0.63%)个候选域。

数据收集过程的第二阶段是从候选域中提取 cookie 及其相应的用途。为此,使用了 OpenWPM 框架,版本 0.12.0,它通过 Selenium 运行多个并发的 Firefox 浏览器实例。 OpenWPM 对浏览器进行检测,以便记录所有 cookie 创建和更新,将这些 cookie 称为观察到的 cookie。

本研究扩展了OpenWPM 以处理从 CMP 中提取的数据。收集的信息至少包括声明的名称、域、过期时间和用途描述,以及 cookie 的用途类别,将这些数据称为声明的 cookie。检索声明的 cookie 的确切方法特定于 CMP 实现。所有方法的共同点是直接从定义同意机制的 JavaScript 文件中检索信息。因此,收集的信息应直接与接受或拒绝哪些 cookie 相关,具体取决于用户在 cookie 弹窗中的选择。

爬取过程如下:对于每个域,在到达登录页面后,爬虫程序会检测网站上活跃的 CMP。然后提取声明的 cookie 集。如果此过程没有错误,则后续步骤旨在触发在浏览器中创建 cookie。首先,爬虫使用 Consent-O-Matic 扩展 同意 cookie 弹窗中的所有 cookie使用目的。这是必需的,否则,未经同意将阻止创建 cookie。之后,浏览器访问指向域子页面的随机链接,向下滚动到每个页面的底部并为每个子页面执行随机光标移动。作为爬行速度和收集数据量之间的权衡,为每个站点访问了十个随机选择的子页面。同意爬取是在AWS EC2 实例上执行的,大约需要 36 小时来处理约 37.5k 的候选域。总共成功地从 29398 个网站的 cookie 弹窗中提取了 ~ 220 万个声明的 cookie(每个站点 ~ 72 个 cookie)。此外从这些相同的网站中提取了 602k 个观察到的 cookie(每个站点约 22 个 cookie)。总共发现 81.2% 的声明 cookie 是第三方条目,而观察到的 cookie 中只有 46.3% 来自第三方。声明和观察到的 cookie 的数量存在差异,解释如下:

与网站的有限自动交互:爬虫不会注册帐户、登录或修改网站设置,这可能会导致观察到的必要和功能性 cookie 减少。

过多的声明:CMP 在其 cookie 弹窗中列出的 cookie 可能比网站上的实际 cookie 多得多。大约 12 个 cookie。观察到用户每个站点会遇到平均约 22 个 cookie。

(4)获取训练数据集

训练数据集由观察到的 cookie 组成,其目的来自匹配的 cookie 声明。每个 cookie 由其名称、主机和爬虫的目标域唯一标识,这些值用作加入观察和声明的 cookie 的关键。这会产生总共 304k 的 cookie 样本用于训练,其中 28.2% 是必要的,6.2% 是功能性的,29.0% 是分析性的,36.7% 是广告。另外 18,000 个 cookie 未分类,或声明的用途无法分配给任何类别。

上图显示了每个类别的声明总数,以及观察到的 cookie 的比率。重要的是要注意功能性 cookie 的类别代表性不足,在训练分类器时通过加权样本来弥补这一点。此外,尽管声明过多,但在 602k 观察到的 cookie 中,只有 53.6% 可以与声明匹配。这意味着网站上可能存在许多 cookie 弹窗未知的 cookie。

 

0x03 Feature Extraction

Cookie 具有多个属性,包括名称、域、路径、值、到期时间戳,以及诸如“HttpOnly”、“Secure”、“SameSite” 和“HostOnly”属性等标志。 这些属性与 cookie 的用途之间没有直接的关系。 因此提取统计丰富的、特定领域的特征,以便机器学习模型可以从数据中提取潜在的复杂、有意义的关系。定义了 50 多个特征提取步骤,将 cookie 表示为实值稀疏向量。 在下面提供了这些步骤的高级说明。 在线文档(https://github.com/dibollinger/CookieBlock-Consent-Classifier )中给出了完整描述。

前 500 个最常见的名称和域名:识别 cookie 用途的一种非常有效的方法是检测 cookie 名称或其来源域是否属于最常见的在线标识符。使用Tranco 列表中具有代表性的随机网站样本,收集了 500 个最常见的 cookie 名称和域的排名。直觉是,Web 模块使用具有预定义名称和用途的第一方 cookie,例如 PHP 中的 PHPSESSID,并且源自同一领域的 cookie 通常具有共同的用途。

值类型、编码和长度:一些特征表明 cookie 内容中存在特定数据类型。范围从标量类型(如布尔值或整数)到复合类型(如 CSV 或 JSON)。还记录复合类型的条目数,以及以字节为单位的内容长度作为序数特征。进一步区分十进制和十六进制整数,以及 base64 和 URL 编码的字符串。直觉是,通过识别 cookie 中存储的数据类型,分类器可以更好地区分哪些 cookie 用于跟踪。例如,长十六进制字符串比短小数更有可能用于唯一标识用户日期、时间戳、UUID、URL 或语言环境字符串。这些值可能会提供有关 cookie 用途的提示。直观地说,日期、UUID 和时间戳可用作跟踪的唯一标识符,而区域设置和 URL 更常用于功能性 cookie,例如更改显示语言或输入法。

更新特征:Cookie 是动态的,可以通过 HTTP 请求或 JavaScript 代码中的事件频繁更新。因此不仅会考虑 cookie 的单一状态的特征,还会考虑随时间发生的变化。例如,cookie 在固定时间间隔内更新的总次数,或 cookie 更新之间的编辑距离。

熵:cookie 内容的熵,例如使用香农方法计算的,可以提供有关其随机性的信息。直觉是跟踪标识符通常包含一个随机生成的组件,因此具有高熵,因此可能允许分类器检测跟踪 cookie。

请注意,并非所有 cookie 特征都可以在所有设置中使用。例如在数据集中,广告 cookie 的更新频率低于其他类型的 cookie。虽然这个属性可以用作训练的特征,但它高度依赖于用户的浏览模式。任何基于此类模式的特征在浏览器扩展的设置中都是不可靠的,并且可能导致在模型验证期间无法观察到的错误预测。因此,对于 CookieBlock,仅使用那些与浏览模式无关的功能。尽管如此,此类属性仍可用于具有固定浏览行为的离线设置,例如涉及自动网络爬虫的研究。每个差异特性概述如下图。所有特征提取为两个连续更新之间的比较,按时间戳排序。

每个cookie的特征概述如下图,所有的特征都从每个独特cookie提取。当标记为*的条目在浏览器扩展的上下文中使用时,可能会导致问题。在名称后面的圆括号中,显示了该特征所接受的向量条目的数量。

每次更新的特征概述如下图,每次Cookie更新时提取一次的所有特征。用于提取的更新数可以单独指定。

 

0x04 Classification

A. 基线

将模型的性能与该领域专家的手动分类性能进行比较。即从公共 cookie 存储库 Cookiepedia 中查询 cookie 用途。据报道,Cookiepedia 存储了超过 3000 万个 cookie 的数据,其中很大一部分都标有目的类别。这些类别与前文中选择的类别相匹配。对于数据集,Cookiepedia 为 79.2% 的 cookie 提供了用途。为了使用 Cookiepedia 作为分类器,在数据集中查询每个 cookie 名称,并从存储库中获取相应的目的。然后将这些目的与从 CMP 收集的类别标签进行比较。为了验证 Cookiepedia 作为分类器,将 cookie 数据集分成 5 个大小相等的块,并计算平均准确率、精度和召回率。在下表中展示了结果。

测量结果表明,Cookiepedia 的平均平衡准确度(即宏观召回)达到了 83.4%。它对必要 cookie 和广告 cookie 都达到了很高的精度,但对功能性 cookie 的精度特别低。这可以通过在验证数据中发现的类别不平衡来解释。由于功能性基本事实的样本数量较少,因此将此类别分配给其他 cookie 的任何错误都会对此类的精度产生比其他类别更大的影响。

B. 模型选择

为分类 cookie 选择的模型是决策树的集合。使用 XGBoost 库训练它们,该库使用 Chen 和 Guestrin 开发的稀疏感知梯度树提升方法。使用 boosting 是因为决策树的集合可以像神经网络一样具有竞争力,并且在多个机器学习竞赛和基准测试中取得了最佳性能。

在多类分类的设置中,XGBoost 为每个目的类创建了一个带有决策树森林的分类器模型。给定一个表示 cookie 的稀疏输入向量,该模型为每个目的生成一个概率,表明 cookie 属于它的可能性有多大。使用贝叶斯决策函数,将这些概率转换为离散预测。对于评估,应用一个简单的 argmax 决策,即选择概率最高的目的作为预测。

C. 训练参数

使用的数据集由 304k 标记的 cookie 组成,其中 277k 用于训练。过滤掉的 27k cookie 是 CMP 创建的 cookie,用于跟踪用户与 cookie 弹窗的交互。这种过滤旨在消除训练偏差,因为这些 cookie 始终存在于抓取的网站上,但在所选网站之外并不常见。

为了找到好的超参数,应用了带有 5 折交叉验证的随机网格搜索。由于训练数据集不平衡,每个模型的性能都使用多类交叉熵损失以及平衡精度进行验证。影响最大的参数是学习率和最大树深度,分别选择了 0.25 的速率和 32 的深度。进一步增加深度会导致验证性能下降。对每个模型进行了最多 300 轮的训练,在 20 轮后提前停止,验证分数没有增加。对于最终模型,每个森林有 12 到 29 棵树,平均大小为 22 棵树。完整的参数集见下表。

D. 错误分类的影响

选择的使用目的类别可以解释为一种排序,必须是最少的并且广告最侵犯隐私。使用这种排序,将功能 cookie 错误分类为必要类别会降低隐私影响,因为功能 cookie 的排序很接近,不太可能用于用户跟踪。将广告 cookie 错误地分配给必要的内容代表了更大的隐私威胁,因为这些类别在排序上相距甚远,可能无条件地允许跟踪 cookie。

同样还考虑了由于错误分类而导致网站崩溃的可能性。当必要的 cookie 被预测为广告并因此被删除时,它可能会破坏网站上的一项基本服务,并大大降低用户体验的质量。将类功能分配给必要的 cookie 会减少影响,因为用户不太可能拒绝此目的,因为它对隐私的侵入性较小。可以使用广告类的召回指标来识别广告 cookie 逃避检测的概率。在必要类别的召回中可以发现破坏网站基本功能的潜力。任一性能指标越接近 1,隐私威胁越低,网站被破坏的可能性就越小。

D. 评价

下图比较了 XGBoost 和 Cook iepedia 的性能,下表展示了 XGBoost 模型的性能指标。

XGBoost 获得更高的隐私保护:首先考虑通过召回广告类别的潜在隐私保护。在这里,召回衡量的是分类器正确识别为广告的广告 cookie 的比例。 XGBoost 的召回率比 Cookiepedia 高出近 9%。在上图中看到 Cookiepedia 在这方面的错误分类主要是因为它将广告 cookie 分配给分析或功能类。

XGBoost 保留必要的功能性 cookie:考虑了网站崩溃的可能性。 XGBoost 分类器对必要 cookie 的召回率为 81.7%,比 Cookiepedia 所达到的低近 7%。对于功能性 cookie,召回率为 76.3%,比 Cookiepedia 低约 2%。正如在上图中看到的,大多数必要的错误分类都被分配给了功能目的,反之亦然。因此,如果用户同时接受必要和功能性 cookie,则扩展程序将保留大约 91% 的必要和 88% 的功能性 cookie。

XGBoost 与人类专家一样强大:自动 XGBoost 模型在其余指标中的表现与手动策划的 Cookiepedia 非常相似。两者在功能性 cookie 中的精度和准确性都降低了,这是由于类不平衡而发生的。此外,两者都实现了分析类的高召回率,XGBoost 将精度提高了 5% 以上。

总而言之,当查询每个 cookie 名称时,Cookiepedia 在数据集上实现了 84.7% 的平衡准确率。自动化、XGBoost 训练的分类器实现了 84.4% 的平衡准确率,从而获得了与人类专家所达到的性能相当的性能。虽然 Cookiepedia 在必要类别中更准确,但 XGBoost 在广告 cookie 方面表现更好。在必要 cookie 方面的不足可以通过使用另一种贝叶斯成本函数来抵消,该函数比其他方法更强烈地惩罚必要 cookie 的错误分类。最后,Cookiepedia 可以分类的 cookie 数量是有限的。对于数据集,Cookiepedia 能够为 79.2% 的 cookie 提供一个类别,而分类器可以为每个 cookie 预测一个类别。

E. 性能上限

在本节中尝试在数据集上估计理论上最好的分类器性能。收集的 cookie 标签很嘈杂,因为不同的网站可以使用相同的第三方 cookie,但它们不一定同意其目的。这意味着不可能在此数据集上达到 100% 的准确度,因为尽管目的不同,某些 cookie 将无法区分。为了估计这种情况下数据集中 cookie 的百分比,收集每个第三方 cookie 名称和域的多数类,并计算具有偏差类的 cookie 的百分比。这提供了 7.2% 的标签下限,即第三方 cookie 中的噪声标签。如果假设第一方和第三方 cookie 的噪声相似,可以得出结论即总体准确度上限约为 92-93%。 总体平均准确率为 87.2%,分类器在该数据集上接近最佳性能。XGBoost应用于使用Cookiepedia标记的cookie数据集时的性能如下:

 

0x05 Browser Extension

在本节中将描述 CookieBlock(https://github.com/dibollinger/CookieBlock )的设计和实现。它是基于 Firefox 和 Chromium 的浏览器的扩展,可以自动将 cookie 分类为目的类别,并允许用户拒绝同意用于选定的目的。

A. 目标和特点

CookieBlock 的目标是让用户控制他们的隐私,这是大多数网站所忽视的做法。在排名前 100 万的网站中,总共只有 3.5% 使用 CMP 提供 cookie 同意选择,其中许多确实通过暗模式欺骗用户,或通过提供错误信息。因此,CookieBlock 为用户提供了一种在他们访问的任何网站上控制他们的 cookie 同意的方法,而不会有被欺骗的风险。 CookieBlock 提供以下功能:

• 用户定义的cookie 策略:CookieBlock 的核心功能是用户指定他们同意或拒绝同意前文中的四个类别中的哪一个。所有属于拒绝同意的目的的 cookie 将从浏览器的存储中删除。

• 域例外:对于用户信任的域,他们可以定义一个例外。该扩展程序不会删除任何源自豁免域的 cookie,无论其用途如何。

• 自定义cookie 类别:用户可以定义自己的 cookie 类别,这些类别可用于纠正分类器所犯的个别错误。

请注意,虽然 CookieBlock 模仿 CMP 的行为,但它并非旨在与网站上显示的 cookie 弹窗进行交互或删除。现有的浏览器扩展已经实现了这个功能,例如 Consent-O-Matic,它可以与 CookieBlock 结合使用。 CookieBlock 也不能作为法律意义上的 cookie 弹窗的替代品,并且它的使用并不是网站跳过收集用户同意的理由。

B. 设计与实现

CookieBlock 是使用 WebExtensions API 构建的,并且支持 Firefox 以及基于 Chromium 的浏览器。下图给出了其设计的概述。

(1) 后台进程

初始化时,CookieBlock 开始监听 cookie 事件。创建或更新 cookie 时,cookie 的当前状态会附加到本地 cookie 历史记录 (1),并检索该 cookie 先前更新的完整列表 (2)。此历史记录允许 CookieBlock 跟踪 cookie 随时间的演变,这是用于特征提取的属性。

之后,CookieBlock 检查其存储以确定最近是否遇到过 cookie 或是否已为其分配了预定义的类别 (3)。在这种情况下,它检索现有的目的标签 (4),并直接跳到策略执行步骤 (5a)。如果 cookie 没有存储现有的标签,那么继续进行特征提取 (5b)。这将 cookie 对象转换为稀疏向量表示 (6)。然后它在这个向量输入上运行预先计算的 XGBoost 模型,预测 cookie 的目的标签。然后,预测的标签会在扩展存储中缓存一小段时间 (7)。最后,预测的标签被传递到策略执行程序 (8),它决定是保留还是删除 cookie。

为了决定是保留还是删除 cookie,CookieBlock 会考虑用户的 cookie 策略和域例外 (9)。如果 cookie 的源域与域例外集中的域匹配,则策略执行将始终保留 cookie。

(2) 用户界面

用户界面分为四个不同的组件:

首次设置:扩展的首次设置页面允许用户定义用户策略,并将请求发送到本地 cookie 历史记录的集合。这是初始化扩展所需的最小设置。

设置页面:设置页面允许用户随时更改其同意偏好并添加个别网站例外。

工具栏弹出:工具栏弹出窗口提供了一种快速方法来暂停 cookie 删除并在地址栏中为域添加例外。

Cookie 配置: cookie 配置页面允许用户为以前遇到的 cookie 定义自定义类别并纠正错误分类。

对于设置页面和首次设置,CookieBlock 允许用户同意功能、分析和广告目的。不能拒绝必要的类别,因为这样做会破坏网站。将界面设计为易于使用且不引人注意。与在不同网站上发现的 cookie 弹窗不同,CookieBlock 只需要一次设置,之后用户的 cookie 偏好将在所有网站上强制执行。这可以防止由于用户疲劳或 cookie 弹窗的烦恼而忽视隐私的问题。

如前所述,CookieBlock 收集 cookie 更新日期历史记录。这允许它跟踪 cookie 如何随时间变化,从而根据这些差异进行预测。它还允许 CookieBlock 通过识别之前遇到过哪些 cookie 来记住过去的目的分配。

由于此 cookie 历史记录可能包含潜在的敏感用户信息,包括有关浏览历史记录和身份验证令牌的信息,因此历史记录始终保存在浏览器扩展的本地。此外,CookieBlock 要求用户在设置时选择加入此历史记录的集合。如果被拒绝,CookieBlock 仍然可以对 cookie 进行分类,但它将无法记住以前的标签或从过去的更新中提取特征,这可能会降低其准确性。

(4) 缓存用途

CookieBlock 在做出预测后会在短时间内缓存标签。这可以最大限度地减少浏览器速度减慢,以防网站在删除 cookie 后不断重新生成它们。宽限期到期后,cookie 将使用新收集的 cookie 更新重新分类。

(5) 实证评价

分类器对必要 cookie 的召回率为 81.7%,这意味着网站运营所需的每五个 cookie 都可能被错误分类。由于 CookieBlock 使用计算模型作为预测器,因此可能会无意中删除许多必要的 cookie,从而导致网站出现故障。然而,由于数据集中的噪声,目前尚不清楚这个问题在实践中有多严重。

为了量化 CookieBlock 对浏览体验的影响,手动访问并检查了 100 个网站的样本是否存在可能的故障。此评估是有限的,因为它不构成完整的可用性研究。但是,由于扩展程序充当后台进程,理想情况下它应该只需要与用户进行很少的交互。因此专注于评估网站是否因错误分类而崩溃,这是在这种情况下可用性的关键方面。使用指数分布从 Tranco 列表中随机抽样网站。这能够检查流行网站和利基网站。此外,此网站选择不限于使用特定 CMP 的网站。

使用全新安装的 CookieBlock,配置为允许必要的功能性 cookie,这是推荐的设置。对于每个网站,都尝试尽可能地利用其主要服务,并记录在此过程中遇到的任何缺陷。还尝试更改网站设置,例如语言或样式,并尝试注册帐户并在可用的情况下执行登录程序。最后还与 cookie 禁令互动并关闭,记录是否在页面重新加载时再次出现。重新出现的 cookie 弹窗可能会让用户非常恼火,但它不会阻止网站的使用,因此这些可能是错误分类的功能性 cookie。如果遇到任何意外行为,会通过禁用 cookie 删除来确定这是否是由 CookieBlock 引起的。

结果表明在检查的 100 个网站中:85 个没有明显的故障,7 个由于 CookieBlock 的原因再次出现 cookie 弹窗,7 个显示身份验证失败,用户立即退出,在一种情况下无法更改网站语言。 因此,严重缺陷的发生率没有预期的那么严重。 此外,通过为当前站点定义一个例外,或通过在扩展界面中更正 cookie 的指定用途,所有问题都得到了解决。

还测量了 CookieBlock 为 cookie 做出策略决策所需的时间。 在 Linux 上的 Firefox 浏览器上运行 CookieBlock,它总共处理了从真实网站观察到的 5561 个 cookie。 每个决策平均耗时 20 毫秒,最长为 4.3 秒。 这个异常值是由浏览器中的异步执行引起的。 Firefox 浏览器还报告了扩展的“低”能量影响。

 

0x06 Observed Violations

GDPR 第 7 条和第 32 条要求同意必须是自由、具体、知情和明确的;因此,任何显示误导或虚假信息的 cookie 弹窗都可能违反法律。在本节中对选定的合适 CMP 显示的数据进行了分析,对来自 29 398 个网站的 cookie 数据集进行了分析。对于这些网站,评估 cookie 的正确性—— cookie 弹窗上显示的类别分配、cookie 声称的到期时间以及 cookie 弹窗的完整性。这些方法包括六种在先前工作中未探索的新分析方法。

此外,分析了网站是否假定隐式 cookie 同意或尊重用户的同意选择。通过观察浏览器中设置了哪些类型的 cookie 来实现这一点。总之,在 29 398 个网站中,94.7% 的网站至少包含一个问题,而 77.3% 的网站至少包含两个问题。

A. 不正确的 cookie 用途

常用cookie 的用途不正确:Google Analytics cookie,例如 _ga、_gat 和 _gid,在整个网络中普遍存在,并且具有众所周知的用途。尽管如此,仍有许多网站不将这些 cookie 声明为分析。就 Google Analytics 而言,在 29 398 个被检查的网站中,有 8.2% 的网站将这些 cookie 的用途不正确。此外,根据 Planet49 案的裁决,所有网站中有 2.7% 声明至少一个 GA cookie 是必要的,而欧盟法院此前裁定这违反了 GDPR。

基于多数意见的使用目的不正确:在收集的数据集中,观察到对于相同的第三方 cookie 标识符,不同的域可能在目的上存在分歧。使用这个事实来估计分类器的性能上限。在这里,使用它来检测异常用途分配,这可能表明声明不正确。发现了30.9% 的网站包含至少一个第三方 cookie,其目的与相应的三分之二多数不同意。这是潜在违规次数的下限。如果多数类别为假,则潜在违规的数量会更大。由于这只是一个下限,使用此方法检测到的每个案例都需要手动分析以确定它是否构成真正的错误分类。

带有多个标签的 Cookie:当同一个网站出于不同甚至相互矛盾的目的多次标记 cookie 时,就会出现歧义。在 2.3% 的被检查网站中观察到了这一点。这种模糊性可能会欺骗用户,因为没有明确定义仅拒绝其中一个目的是否足以阻止 cookie 的创建。在实践中观察到网站创建的 cookie 具有一种接受和一种拒绝的目的。此外,在 0.7% 的网站中,cookie 被声明为必要和其他目的,这意味着这些 cookie 根本不会被拒绝。

B. 未分类和未声明的 cookie

研究中针对的 CMP 提供 cookie 扫描服务,可检测网站上的 cookie 并根据数据库查找建议用途。那些无法以这种方式注释的 cookie 必须由站点管理员手动分配其用途。这个过程有两个问题。首先,当网络管理员忽略指定用途时,cookie 会变得未分类。其次,当 CMP 扫描未能检测到 cookie,或者在扫描后添加了 cookie 时,这些 cookie 未声明并且在 cookie 弹窗中丢失。网站的访问者既不能拒绝未声明的类别,也不能拒绝未分类的类别,这意味着同意既不知情也不自由。

未分类的 cookie:在 25.4% 的检查网站中发现了未分类的 cookie。这些网站平均包含 11 个未分类的 cookie。令人惊讶的是,发现 45 个网站包含 200 多个未分类的 cookie。

未声明的 cookie:通过识别哪些观察到的 cookie 没有匹配的声明来检测未声明的 cookie。在匹配名称和域时,在 82.5% 的被检查网站中发现了未声明的 cookie。在 496,000 个 cookie 中,有 40.2% 未声明。与未分类的 cookie 类似,发现 71 个网站包含超过 100 个未声明的 cookie。

C. 过期时间不正确

GDPR 第 13(2)(a) 条要求网站声明个人信息的到期时间。欧盟法院在 Planet49 案件判决中澄清这也适用于 cookie。因此,将观察到的 cookie 的真实到期时间与相应声明的到期时间进行比较。如果真正的到期时间比声明规定的时间长 50%,并且以 1 天作为阈值的最小差异,那么认为它是潜在的违规行为。此外还会识别所有声明为会话 cookie 的持久性 cookie,反之亦然。总共有 9.1% 的网站显示至少一个过期时间差异,3.8% 将持久 cookie 声明为会话 cookie,3.1% 将会话 cookie 声明为持久。

D. 以前方法的扩展

以下两种方法扩展了以前研究中中定义的方法:
在用户同意之前设置的 Cookie:ePrivacy 指令第 5(3) 条规定,在用户与 CMP 交互之前,只能创建必要的类型 cookie。通过在不与 cookie 弹窗交互的情况下抓取网站,检查网站是否设置了任何未声明为必要目的的 cookie,发现 69.7% 的受审查网站设置了此类 cookie,因此使用了默示同意。

尽管有否定的同意,但仍设置了 Cookie:使用 Consent O-Matic 浏览器扩展,拒绝所有非必要目的。然后验证 CMP 记录的同意状态确实是否定的,并确定这些网站中的哪些仍然设置了不必要的 cookie。本研究只为 Cookiebot 这样做,对于这个 CMP可以验证是否与 cookie 弹窗进行了交互。对于 9446 个 Cookiebot 域,66.4% 的人设置了至少一个拒绝用途的 cookie。这相当于检查的 29 398 个网站中的 21.3%。然而预计其他 CMP 的行为类似,并且总比率更高。

E. 总结

下图总结了上述每种类型的潜在违规数量。在上图中展示了数据集中的网站上有多少种不同的违规类型。直方图显示违规次数的中位数为 2,平均值为 2.5。

上图中的前六个条形图代表在以前的工作中尚未探索过的分析方法。本文方法更加精细和直接,因为根据 cookie 弹窗中声明的目的直接检测用户浏览器中创建的 cookie,网站样本量也比大得多。对于未分类和未声明的 cookie,研究认为问题通常源于疏忽而非恶意。原因可能是缺乏执法和网络管理员,他们对法律要求不够熟悉。这可以通过本文中描述的方法来解决。监管机构可以通过自动确定哪些网站违反法律来加强 GDPR 的执行。此外,CookieBlock 和相应的网络爬虫可以通过检测未声明的 cookie 和预测当前未分类 cookie 的用途来帮助网络管理员检查其网站的合规性。

 

0x07 Limitations

训练数据集可能有偏差:训练数据集可能存在偏差有几个原因。首先,仅从使用 CMP 服务并为个别 cookie 指定用途的网站收集 cookie。此类网站使用的 Cookie 可能与一般网站上的 Cookie 不同。其次,爬虫对功能性 cookie 的代表性不足,这导致该类的精度下降。通过更高级的爬虫或手动 cookie 收集,可能会提高分类器性能并消除潜在的偏差。第三,在自动抓取中收集的特征可能与用户浏览网站产生的特征不同。为了解决这个问题,删除了依赖于浏览模式的功能,例如 cookie 更新。但是,如果网站可以将爬虫检测为机器人,则它们可以向爬虫提供与真实用户不同的数据。最后,模型应该保持最新,否则训练数据的有效性可能会过时。通过简化收集训练数据的过程以及训练本身来解决这个问题。

cookie 删除可能并不总是保护用户:CookieBlock 在创建 cookie 后删除它们,而不是阻止产生它们的请求。这可能不足以阻止 cookie 实现其目的。很少观察到网站创建和删除的 cookie 比 CookieBlock 处理 cookie 所需的20 毫秒更快。一个示例是 cookie GoogleAdServingTest,它用于记录哪些广告已显示给用户。幸运的是,这样的 cookie 很少见。

无法阻止在 WebExtension API 中创建 cookie:只能在 cookie 已经存储在浏览器中之后才能删除它。理想情况下,本研究鼓励网络浏览器开发人员允许扩展以防止设置 cookie,甚至添加“目的”作为新的 cookie 参数。这个参数也将解决机器学习不精确的限制,但分类器对于引导 web 管理员的 cookie 分类仍然有用。

不考虑对抗性网站:本工具没有解决网站可能会专门更改其 cookie 内容以抵消 CookieBlock 执行 cookie 政策的可能性。例如,对抗性网站可以将 cookie 的名称更改为随机生成的值,使用代理域来更改 cookie 的主机字段,或混淆 cookie 的内容。尽管如此,使用其他不涉及 cookie 的跟踪技术更容易,在这项工作中不考虑这些技术。但是,某些网站(例如使用 CookieBot CMP 的网站)也声明了其他跟踪资源,例如 localStorage 或跟踪像素。因此,可以使用这些替代跟踪方法的分类来扩展 CookieBlock。本文没有这样做,因为这些声明很少见并且需要完全不同的特征工程和分类方法。

 

0x08 Discussion & Conclusions

尽管 GDPR 和 ePrivacy 指令要求,许多网站并未让用户选择收集哪些 cookie。即使从提供选择的网站来看,绝大多数(即 94.7%)至少包含一个潜在的违规行为,从而为这一分析做出了贡献。这种情况不能仅通过新法规(例如计划中的电子隐私法规)来解决,因为主要是执法严重滞后。

使用 CookieBlock 解决这种情况,它在客户端强制执行用户的 cookie 策略。它根据使用 XGBoost 库训练的分类器模型指定的目的来删除 cookie,该模型的性能接近人类专家所达到的性能。与以前的、现已弃用的 P3P 和“Do Not Track”等标准不同,CookieBlock 不依赖于网站的合作。除此之外,扩展和违规检测方法可以为监管机构提供违规检测的自动化程序,并帮助他们强制遵守隐私法规。

在理想情况下,不需要 CookieBlock。未来的隐私法规可能会要求浏览器供应商和万维网联盟扩展带有“purpose” 标志的 cookie 标头作为新属性,这将允许将同意 cookie 的行为集成到浏览器中,以及 cookie弹窗可以过时。如果需要使用该标志,则用户可以获得他们应得的法律隐私保护。本文分类器将有助于引导此更改,因为它可以预测任何未指定的 cookie 的用途。这将有助于网络从现状过渡到具有透明 cookie 声明的未来。在主要浏览器供应商采取行动之前,CookieBlock 可以帮助在任何网站上强制执行用户的 cookie 政策,即使对于欧盟以外的用户也是如此。

(完)