论文阅读:Domain Name Encryption Is Not Enough: Privacy Leakage via IP-based Website Fingerprinting

Domain Name Encryption Is Not Enough: Privacy Leakage via IP-based Website Fingerprinting

1 背景&目的

  域名加密技术,例如DoT、DoH、ESNI等技术,可以提高安全和隐私,但是在保护用户隐私上,仍然存在问题,那就是用户访问的网站可以在网络层的观察者那里通过ip-域名映射表得到。不过CDN、DNS负载均衡、同一台服务器上托管多个不同网站这些技术都使得ip-域名映射表变得不稳定。

  本文说明,这种不稳定性并不能成为可靠浏览跟踪的阻碍(假设部署的是通用DoT/DoH、ESNI)。本文提出了一个基于IP的网站指纹技术,这种技术可以帮助网络层的观察者高准确率地识别出用户访问的网站。并讨论总结了一些网站所有者和托管提供商可用的策略,用来对抗这种基于IP的网站指纹技术,最大限度地提高域名加密技术提供的隐私利益。

2 域名加密(Domain Name Encryption)

  在当下的web浏览环境下,有两种渠道可以获取到域名信息:

  • 明文DNS请求和响应
  • TLS握手过程中的SNI

明文DNS不仅仅暴露用户隐私,还允许网络层的实体干扰用户连接。DoT、DoH、ESNI就是保护域名信息的几种解决方案。

  DoH和DoT将DNS请求和响应加密,几家服务提供商已经开始提供公开DoT/DoH解析器,包括Google和Cloudflare。在客户端,几家流行的浏览器也开始支持DoH/DoT。不过这些供应商将所有DNS解析集中到一个受信任的解析器的设计选择还引起了另外的一些隐私问题。

  TLS握手中的SNI字段表示客户端想要访问的网站的域名,为了获得其域名的整数。TLS1.2之前,SNI字段都是明文传输的,也存在安全和隐私风险。TLS1.3提供了加密SNI字段的选项。但是为了是ESNI工作,从服务器公钥派生的对称加密密钥必须通过ESNIKeys DNS查找提前获得。所以,如果ESNI不适用DoT/DoH,那它就无法带来任何隐私收益。

3 网站指纹(Website Fingerprinting)

  网站指纹是一种利用加密流量分析技术,根据浏览网站时观察到的流量模式,为一组网站构建指纹的攻击方式。指纹将被用来确定受监控的用户是否访问过任何受监控的网站。

  前人关于网站指纹的工作主要关注于识别网站,这些网站是通过匿名化或混淆渠道浏览的,它们的真实目的IP被隐藏起来,例如使用Tor、VPN或代理服务器。

  针对标准加密网络流量的网站指纹攻击尚未得到全面调查,大概是因为在明文时代,只通过DNS和SNI 中的域名信息就能大致推断出访问的应用或web服务。

4 威胁模型

  考虑一个真实场景,一个攻击者(例如一个ISP)被动地监视用户流量,并试图确定一个特定的网站是否被给定的用户访问,仅仅基于从IP地址获得的信息。

  假设攻击者执行以下步骤来创建网站指纹:

  • 攻击者访问一组网站,并记录所有与其联系获得资源的域名。每个网站的基于域名的指纹可以通过这组相联系的域名构建
  • 这些域名被定期解析到它们的主机IP地址,这些地址用于构建基于IP的指纹。根据域名和它主机IP(es)地址之间的关系,连接到唯一的IP地址可以很容易地显示哪个网站正在被访问。
  • 攻击者将被监控用户的网络踪迹中发现的IP地址序列与前一步构建的基于IP的指纹相匹配,以推断哪个网站被访问。

攻击的有效性取决于指纹的唯一性稳定性

5 指纹构造

5.1 基于IP的指纹

  假设理想的环境就是域名信息无法从网络流量中提取出来,攻击者唯一可以看到的元数据就是远程连接服务器的IP地址。在这种情况下,攻击者只能通过观察到的IP地址来识别目标网站。

  当浏览网站时,浏览器首先会与web服务器连接获取到HTML文档,然后解析HTML文档获取其中引用的其他web资源。基于这个逻辑,攻击者首先构造基于域名的指纹。

  对于一个给定的网站,它的基于域名的指纹由两部分组成:

  • 主域名(primary domain),用 d p d_p dp来表示。它是浏览器地址栏里面URL中的域名,对应的是首次连接获取初始HTML文档的服务器
  • 从域名(secondary domain),用 d s d_s ds来标示。它可能与主域名不一样,它是HTML文档里面引用的托管其他web资源的域名。

指纹可以表示为:
d p + { d s 1 , d s 2 , ⋯   , d s n } d_p + \{d_{s_1}, d_{s_2}, \cdots, d_{s_n}\} dp+{ds1,ds2,,dsn}

  攻击者可以从上述基于域名的指纹获取他们对应的基于IP的指纹,通过重复解析域名到IP地址。假设一个域名可能被解析为多个IP地址,那么基于域名的指纹中的每个域名将被转换为一组至少包含一个IP地址的IP地址。

  基于IP地址的指纹也由两部分组成:

  • 主域名的IP地址
  • 解析从域名得到的一组IP地址

指纹可以表示为:

{ d p i p 1 , d p i p 2 , ⋯   , d p i p n } + { { d s 1 i p 1 , d s 1 i p 2 , ⋯   , d s 1 i p n } , { d s 2 i p 1 , d s 2 i p 2 , ⋯   , d s 2 i p n } , ⋯   , { d s n i p 1 , d s n i p 2 , ⋯   , d s n i p n } } \{d_pip_1, d_pip_2, \cdots, d_pip_n\} + \{ \{d_{s_1}ip_1, d_{s_1}ip_2, \cdots, d_{s_1}ip_n\},\\ \{d_{s_2}ip_1, d_{s_2}ip_2, \cdots, d_{s_2}ip_n\}, \cdots, \{d_{s_n}ip_1, d_{s_n}ip_2, \cdots, d_{s_n}ip_n\} \} {dpip1,dpip2,,dpipn}+{{ds1ip1,ds1ip2,,ds1ipn},{ds2ip1,ds2ip2,,ds2ipn},,{dsnip1,dsnip2,,dsnipn}}

为了简化指纹的构造和匹配,考虑所有次域名的IP地址的并集来减少上述指纹。简化表示为:

{ d p i p 1 , d p i p 2 , ⋯   , d p i p n } + { d s 1 i p 1 , d s 1 i p 2 , ⋯   , d s 1 i p n , d s 2 i p 1 , d s 2 i p 2 , ⋯   , d s 2 i p n , ⋯   , d s n i p 1 , d s n i p 2 , ⋯   , d s n i p n } \{d_pip_1, d_pip_2, \cdots, d_pip_n\} + \{ d_{s_1}ip_1, d_{s_1}ip_2, \cdots, d_{s_1}ip_n,\\ d_{s_2}ip_1, d_{s_2}ip_2, \cdots, d_{s_2}ip_n, \cdots, d_{s_n}ip_1, d_{s_n}ip_2, \cdots, d_{s_n}ip_n \} {dpip1,dpip2,,dpipn}+{ds1ip1,ds1ip2,,ds1ipn,ds2ip1,ds2ip2,,ds2ipn,,dsnip1,dsnip2,,dsnipn}

5.2 通过Connection Bucketing加强基于IP的指纹

  当页面被访问时,为了获取web资源还会发起多个请求,一旦获取了资源,这些资源可能也会触发额外的对子资源的请求(例如js代码)。这些请求的绝对顺序可能会改变,由于一些不确定因素例如网络供应商的性能和底层操作系统。所以在构建基于域名的指纹时不考虑这种顺序。不过当将所有这些请求当做一个整体来 看时,仍然存在一种高级别的排序关系,当考虑关键渲染路径时,可以可靠地捕获这种关系。具体来说就是,有一些渲染阻塞和关键对象总是要在其他对象之前加载。

  从获取初始HTML文档到屏幕上呈现出网站中间的时间链称为关键渲染路径(critical rendering path)

  1. 首先浏览器从主域名那获取到初始HTML文档(例如index.html)
  2. 然后HTML文档被解析为DOM树
  3. 然后浏览器从远程目的地获取几个web资源(HTML、JS、CSS、图像、第三方资源)来呈现网页。

考虑关键渲染路径,可以使用3个重要的事件来将连接聚集到3个“bucket”中:

  • domLoading:在浏览器接到初始HTML文档并开始解析它以构造DOM树时候触发。触发事件后,立即启动多个用于获取DOM树引用的关键资源的并行连接。
  • domContentLoaded:DOM和CSSOM准备好时触发,通知浏览器创建渲染树。该事件通常在不等待样式表、图像、subframe的加载时触发。触发事件后,会观察到一组用于获取非阻塞样式表、JS文件、图像、subframe等的连接。
  • domComplete:当网站和子资源被加载完时触发。触发事件后,非必要对象仍然可以在后台下载,而关键渲染路径不受影响。例如外部js文件被认为是渲染阻塞的,建议将其移动到网页的末尾,因此在触发此事件后,通常可以观察到一小群连接。

  基于这些关键渲染路径,本文增强了指纹的结构,以构成主域名和3个事件对应的3组域名,加强的基于域名的指纹可以表示为:

d p + { d s 1 , d s 2 , ⋯   } + { d s 2 , d s 3 , ⋯   } + { ⋯   , d s n − 1 , d s n } d_p + \{d_{s_1}, d_{s_2}, \cdots\}+ \{d_{s_2}, d_{s_3}, \cdots\}+ \{ \cdots, d_{s_{n-1}}, d_{s_n}\} dp+{ds1,ds2,}+{ds2,ds3,}+{,dsn1,dsn}
  如果在不同时间从一个域名获取多个对象,那么该域名可以出现在多个桶中。因此增强的基于IP的指纹遵循同样的结构,由4组IP地址组成,即主域名的IP地址集合+3个桶对应的3组IP地址集合。

6 实验

6.1 测试域名的选择

  选取Tranco的top网站排名列表,该列表与Chrome用户体验报告中的web流量有很好的重叠。

  通常情况下大家都会选择Alexa、Majestic、Umbrella、Quantcast这四个top网站列表之一来做研究,但是有的人研究说这些列表可能会对实验结果带来负面影响。Tranco列表已经汇总了这4个列表,从而形成超过700万个域名的列表。

  本文选取该列表的top 100K进行研究。同时对敏感网站的访问也是一个重要问题,如果在很专制的地区,浏览特定内容会违反当地法规。因此本文又手动选择Alexa上的敏感类别网站。

  最后,数据集包含220743个域名,包括来自Tranco的100K以及Alexa敏感类别中的126597个域名

6.2 测量时间和地点

  前人的许多工作忽略了时间,从而忽略了指纹的时间特征。domain-IP映射的变化是个主要问题,以前构造的指纹在特定时间段后可能无效。

  本文在60天内对220K个网站进行重复爬取,对每个网站都提取所有域名来构造指纹。在网络层,捕获IP地址序列,用来评估指纹准确性。

  由于DNS负载均衡,许多域名可能会映射到不同的IP地址上,因此一旦提取出每个网站的一组域名,就一直对其进行解析,直到下次抓取。

  测量地点位于美国东海岸的一组机器

  60天内总共收集了24批数据。

7 实验结果

7.1 指纹准确率

7.1.1 指纹信息熵

  基于IP的指纹来自于每个网站中提取的域名,因此这些域名的唯一性是影响IP指纹的重要因素。这很直观,如果一个域名每个网站都用,那么这个域名就做不了指纹,反之如果一个域名越独特,就越容易区分,信息熵就越大。

P ( d ) P(d) P(d)是在目标网站中访问一个网站时联系某一个特定域名的概率,那么信息熵可以计算如下:
I n f o r m a t i o n e n t r o p y = − l o g 2 P ( d ) Information entropy = -log_2P(d) Informationentropy=log2P(d)

对于IP来说有两种可能:

  • IP地址只与一个域名关联,则容易根据域名的信息熵推导出来
  • IP地址可以托管多个域名,则IP地址的信息熵是对其托管的所有域名信息熵的平均值来计算

下图展示了从每个域名/IP得到的信息熵的累积分布函数。几乎90%的域名对于网站来说是独有的,从而产生很高的信息熵。
在这里插入图片描述

7.1.2 主域名到IP的匹配

  很多情况下网站的域名和IP地址都存在一对一的关系,本文调查发现52%的网站只需要通过他们的IP地址就可以推断出主域名,而剩余48%的网站服务器上都至少还托管了其他网站。也就是说52%的网站都可以在与主域名的第一次连接时通过IP进行识别。

  下表展示了使用不同方法识别的成功率,第3列是仅仅通过主域名进行判断。

在这里插入图片描述

7.1.3 基本指纹(Basic Fingerprinting)

  基本指纹如上所述包含主域名IP和从域名 IP两部分,给定一个IP序列 [ i p 0 , i p 1 , i p 2 , ⋯   , i p n ] [ip_0, ip_1, ip_2, \cdots, ip_n] [ip0,ip1,ip2,,ipn],首先从所有基于IP的指纹的主部分扫描 i p 0 ip_0 ip0,如果匹配到,则这条指纹加入候选中。然后对比 { i p 1 , i p 2 , ⋯   , i p n } \{ip_1, ip_2, \cdots, ip_n\} {ip1,ip2,,ipn}和候选集中的从域名部分。对于每个匹配的IP地址,将该IP地址提供的熵加到该特定候选指纹获得的熵总量中。最后选择最高熵值的指纹来预测网站。

  上表第4列是通过基本的IP指纹进行匹配的准确率。

7.1.4 通过Connectiong Bucketing加强过的指纹

  给定一个IP地址序列 [ i p 0 , i p 1 , i p 2 , ⋯   , i p n ] [ip_0, ip_1, ip_2, \cdots, ip_n] [ip0,ip1,ip2,,ipn],首先将 i p 0 ip_0 ip0和所有指纹进行匹配,获得候选集。对于 [ i p 1 , i p 2 , ⋯   , i p n ] [ip_1, ip_2, \cdots, ip_n] [ip1,ip2,,ipn],需要将其划分到3个桶里,基于在网络层每个连接的发起时间,使用k-means来将这些IP聚成3类,然后对于每个候选指纹,将指纹中的每个IP地址桶与聚类好的3个IP地址桶取交集。对于每个IP地址,把它的熵与候选指纹的总熵加载一起,最后选取熵最大的那个来预测网站。

  上表最后一列是通过这种方法进行匹配的准确率。

  对于剩余的9%的网站,20%的网站只有两个候选指纹,50%有10个 候选指纹。如下图所示

在这里插入图片描述

  通过手动检查这些指纹,发现许多情况下匹配到的候选域名通常指向同一个网站。这些大多数被那些相同名称在不同TLD下注册的组织拥有,例如bayer.de或bayer.com,或者域名的变种,例如christianrock.net和christianhardrock.net。

  这意味着,91%的准确率可视为准确度下限。字符串相似度可以用来对相似的域名进行聚类,而图像相似度可以用来对具有相似的起始页截图进行分组。

7.1.5 Co-location和流行度对攻击准确率的影响

  下图显示了指纹攻击成功的流行网站和敏感网站的散点图。和预期一样,没有和其他网站一起托管的网站使用指纹攻击是很敏感的。尽管co-location程度高,那使用加强过的指纹一样可以很好地识别。

在这里插入图片描述

  下图展示了成功指纹识别的网站的流行度的累积分布函数。可以看到识别成功的网站数量略微倾向于更受欢迎的网站。
在这里插入图片描述

7.2 指纹稳定性

  网站指纹失效的原因主要由两个:

  • 网站可能会改变现存元素,移除或新增
  • 域名和IP地址的映射会改变

由于基于ip的指纹是根据浏览目标网站与其引用的域名组成,因此首先评估后者的稳定程度。本文使用一种不同的方法对域名随时间变化进行度量。

  令 D t 0 D_{t_0} Dt0 D t 1 D_{t_1} Dt1表示在 t 0 , t 1 t_0, t_1 t0,t1时刻浏览网站时发现的与其相关联的域名。网站的不同程度可以计算为:
D i f f e r e n c e   d e g r e e = ( D t 0 ∪ D t 1 ) − ( D t 0 ∩ D t 1 ) D t 0 ∪ D t 1 Difference\ degree = \cfrac{(D_{t_0}\cup D_{t_1}) - (D_{t_0}\cap D_{t_1})}{D_{t_0}\cup D_{t_1}} Difference degree=Dt0Dt1(Dt0Dt1)(Dt0Dt1)

值为0时则代表没变化,即稳定。而1代表不稳定,意味着所有域名都发生了改变。

  下图展示了这些网站的稳定性。2个月期间,30%的网站引用了额外的域名下载资源。5天内,80%的网站仍然完全稳定,而2个月后这个值就下降到了50%。而2个月后,几乎80%的网站也还比较稳定,大概小于0.3,意味着70%的域名还在被用于下载web资源。
在这里插入图片描述

对于IP地址来说,使用同样的方法来量化IP指纹的稳定性,如下图所示,其实效更快
在这里插入图片描述

为了看一看这些老的指纹在新时间的识别准确率,用加强过的指纹来验证2个月后的准确率。5到10天内,准确率大概在80%,2个月后下降到了70%。如下图所示。

在这里插入图片描述

7.3 指纹健壮性

7.3.1 HTTP缓存对指纹准确率的影响

  通过对测试网站爬取过程中观察到的21.3万个响应头进行分析,发现86.1%是可缓存的。通过响应头计算缓存更新时间,下图为这些对象的更新时间分布。
在这里插入图片描述

通过移除缓存资源的IP地址来验证指纹准确率。准确率仍旧很高。
在这里插入图片描述

7.3.2 AdBlocking下的网站指纹

  使用Brave浏览器来研究广告拦截对指纹识别的影响。使用Brave浏览器浏览时观察到的IP地址序列与机遇IP的指纹进行匹配,使用了增强指纹后,正确率从91%下降到了76%。

8 对策

  对网站所有者来说,屏蔽广告、跟踪等对象会阻碍指纹识别的准确率,想要隐私最大化的网站可以最小化第三方资源的引用。

  隐私保护意识强的用户可以用广告、跟踪拦截器来保护浏览活动。

  对于托管提供商来说可以增加co-location的程度和域名-IP映射的动态性。

9 结论

  域名加密很重要,但是还是不足以完全保护用户的隐私。多管闲事的网络层攻击者还是会根据IP信息推测用户看到的网站。本文的IP指纹能够达到91%的网站识别准确率。网站所有者和托管服务商在隐私保护上仍需努力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值