TLS指纹分析研究(上)

一、概述

TLS协议已经成为互联网上最流行的协议,以确保网络通信免受干扰和窃听。TLS被用于加载Firefox浏览器中超过70%的网页,随着越来越多的网站、服务和应用程序切换到TLS,其应用将继续增长。

由于网络管理人员可以识别和阻止自定义协议,很多恶意工具已经转向使用现有协议,TLS的流行为这些恶意工具提供了一个很好的选择,使用TLS协议的恶意工具可以将其流量隐藏在大量web浏览器和其他TLS的合法覆盖流量中以逃避检测。

本文分享一篇指纹数据分析的论文,通过收集和分析9个月内超过110亿个真实的TLS连接流量,从白流量的角度给出一些结论,希望给研究人员带来一些思考。

二、指纹构建与分析

2.1 数据集构建

图1 采集和分析系统结构概述

如图1所示,流量数据来源于一个全双工的10Gbps校园网,丢弃率低于0.03%。过滤掉TCP端口不是443或校验失败的数据包,并将连接中第一个携带数据的TCP数据包解析为TLS Client Hello消息,成功率为96.7%。

为了将指纹连接到它们的实现,使用BrowserStack(一个基于云的测试平台)来自动招募超过200个独特的浏览器和平台的组合来访问一个设置的网站,结合网络爬虫机器人和手动工具测试,网站收集了超过270个独特的指纹,超过535个独特的用户。

从网络中收集了3种信息,包括唯一的Client Hello消息、特定连接信息和Server Hello响应。

(1)Client Hello消息:对于成功解析的Client Hello消息,首先提取了TLS记录版本、握手版本、密码套件列表、压缩方法列表、扩展列表、椭圆曲线列表、EC点格式列表、签名算法列表和ALPN列表,然后生成极低碰撞率的SHA1哈希值,最后截断为64位形成一个指纹ID,并记录了每个指纹每小时出现的连接数。

(2)特定连接信息:为了提供更多的上下文,也记录了目标服务器IP、SNI(如果存在)和匿名客户端IP/16网络,以及相应的Client Hello指纹。

(3)Server Hello:除了Client Hello消息之外,还收集了每个连接中对应的Server Hello,让我们可以看到哪些密码套件和扩展被协商成功。对于每个Server Hello消息,都解析了TLS记录版本、握手版本、密码套件、压缩方法和扩展列表。

2.2 指纹分析

从2017年10月底到2018年8月初,总共收集了大约9个月的TLS Client Hello指纹。从2017年12月28日起,从一个流量样本中额外收集了SNI、目的IP和匿名源IP,从2018年1月24日开始收集Server Hello信息。总之,成功收集和解析了超过110亿条TLS Client Hello消息。由于采集数据期间的几次网络故障,随着时间推移解析的Client Hello消息的数量如图2所示。

图2 Client Hello消息的数量

  • 长尾指纹分布

110亿条TLS Client Hello消息包含超过23万个独特的指纹。图3显示了一段时间内唯一指纹的总数,在几个月的时间内从最初的2145个上升到23万个。

图3 唯一指纹的总数

我们发现,这些事件对应于一个互联网扫描仪,它产生的连接很少,但似乎发送了大量随机的独特指纹。其中,超过206,000个指纹只被看到一次,通常来自同一个/16网络子网。虽然这个扫描器对唯一指纹的数量有很大的影响,但它对连接的影响可以忽略不计。在本文的其余部分中,我们将阐述指纹或指纹所包含的连接的百分比,从而有效地让我们在不受单个扫描仪影响的情况下分析常见的指纹。

如图4所示,对于Client Hello和Server Hello消息最流行的5000个指纹,99.96%的连接使用的是排名前5000的Client Hello指纹和排名前1310的Server Hello指纹。此外,观察152000个以上的Client Hello指纹,发现大多数连接由少量指纹组成,超过一半的连接是前12个指纹之一。对于服务端,只观察4700个指纹,发现一半连接都在使用排名前19的服务端指纹之一。

图4 指纹数量和排名情况统计

如表1所示,展示了在2018年8月和12月的一个星期内,数据集中最常见的指纹和生成相应指纹的实现。尽管只相差4个月,但前10名的指纹却发生了变化。究其原因,一方面新浏览器的发布迅速取代旧版本,另一方面,前十个指纹中的许多是由相同的TLS实现生成的变体,例如,谷歌Chrome 65生成两个指纹(带填充扩展和不带填充扩展),在数据集中排名第1和第4。

表1 TOP10的TLS实现和连接占比

  • 指纹簇

如前所述,有些实现会生成多个TLS指纹,那么一个典型的实现会产生多少指纹?可以通过对Client Hello中提取的字段执行基本的Levenshtein距离来比较指纹。例如,两个仅因填充扩展的存在而不同的指纹的Levenshtein距离为1,而一对十几个密码套件不同的指纹的距离为12。

为了确定多个指纹变体的流行程度,将数据集中出现超过1000次的6629个指纹(占所有连接的99.97%)进行分组,分组原则是指纹间的Levenshtein距离小于5。这种聚类产生了1625个指纹簇,其中最大的簇有338个指纹,对应于Microsoft Exchange跨多个版本的变体。不出所料,这些指纹是长尾的,指纹簇中排名前10的指纹负责簇中96%的连接。

为了测量指纹变化的速度以及它对检测器的影响,使用简单的启发式方法,首先列出所有在第一周内出现至少10次的指纹,然后在后续几周,对那些大量出现(10,000次)的指纹进行比较。这不仅模拟了新指纹出现的速度,而且对于使用白名单方法的检测器,如果没有持续更新初始白名单,也模拟了检测器将覆盖的部分和在无意中阻塞连接的比例。

图5显示了随着时间的推移,与第一周的初始指纹库相比,观察到的新指纹和阻塞连接的增加。在3月之前的稳定状态下,每周阻塞连接的平均增加约为0.03%(指纹增加0.33%),这表明新指纹的比例稳定也很小。然而,在3月份,谷歌Chrome和iOS都部署了更新,使用新指纹造成了连接的大幅增加。因此,仅仅在6个月之后一个非自适应白名单检测器最终会阻塞超过一半的连接。

图5 第一周没有看到的连接/指纹的比例。

这可能会给基于白名单的检测器带来困难,因为新版本将被屏蔽,直到添加新规则。因此将检测器的TLS实现列入白名单可能是可行的,但可能需要高昂的维护成本,以避免大量的附带损害。

  • SNI

Client Hello消息中发送的SNI允许客户端指定他们正在访问的主机名,这可能是用来检测的另一个特征。许多工具都有不同的策略来设置SNI,有的使用域前置并将SNI设置为云厂商内部的流行服务(例如maps.google.com),而有的则选择忽略SNI,以方便实现或兼容。

截至2018年8月,数据集中只有1.41%的连接没有发送SNI扩展,这表明想要通过省略SNI来逃避检测的做法反而可能容易被发现,例如对于许多不产生SNI扩展的恶意工具,它们的连接可能很容易被检测出来。

三、小结

本文主要从白流量的角度出发,介绍了9个月内真实TLS连接的指纹生成和分析结论。虽然已经捕获了数十亿的TLS连接,但数据集仍然是有限的。同时,随着时间的推移,这些结论可能已经发生了变化,但是指纹采集和分析的思路仍然值得我们借鉴。

参考文献

[1] Frolov S , Wustrow E . The use of TLS in Censorship Circumvention[C]// Network and Distributed System Security Symposium. 2019.

版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author