工作来源

TMA 2022

工作背景

TLS 正在被更多的犯罪分子所采用,研究人员也开始采用 JARM 进行指纹识别。

工作设计

每个 TLS 服务器都有其特定的行为,取决于 TLS 库、硬件、应用程序实现、功能与配置,这些行为可以被当作指纹进行识别。客户端发起 TLS 握手,服务器对握手请求作出响应。作为指纹的服务器行为不是恒定不变的,需要观察服务器对不同请求的响应。使用多个ClientHello 请求可以增加对服务器行为的了解与覆盖范围。

从TLS 握手中提取特征

从一个给定的 ClientHello 提取特征,包括版本、密码套件、接收到的告警与扩展数据。扩展数据是 ServerHello、Encrypted Extensions、Certificate Request、Hello Retry Request 与 Certificate TLS Message 对应键值对的有序列表,如下所示:

Key Share 仅保留用于 DiffieHellman 密钥交换的部分。组成的指纹示例为:

以一个为例如下所示,完整请见https://github.com/active-tls-fingerprinting/client-hellos。

多个请求的指纹识别

单个响应的精确度不够,多个响应组合起来构建服务器行为的TLS指纹效果更好。请求的数量与不同 ClientHello 的设计是关键,即可最大程度提高收集信息量,又能降低测量成本并兼顾道德与隐私考量。

兼顾道德考量的主动测量

使用 MassDNS2 与 Unbound3 处理域名解析,得到 IP 地址与域名的目标元组。再将目标与ClientHello 的排列组合,交给 Amann 实现的 TLS 扫描器。作者基于Golang 标准库设计了自定义TLS 库,支持定义任意ClientHello 作为每个TLS 连接的输入并提取所需的TLS 握手元数据(https://github.com/tumi8/goscanner)。

MassDNS2

https://github.com/blechschmidt/massdns

Unbound3

https://www.nlnetlabs.nl/projects/unbound

ClintHello的设计

从 TLS 扫描器支持的特征空间与IANA 完整特征空间中,随机生成 5000 个ClientHello。在Alexa 与Majestic 流行的网站中进行测试,每个服务器最多发送 13 个ClientHello。选择性能最好的ClientHello,并对相同目标进行二次测量,通过50 个ClientHello 对目标进行指纹识别。

发送的 ClientHello 越多,可以区分出的也就越细。但当ClientHello 超过10 个时,信息的增益相对降低了。

工作准备

从 2021 年7 月19 日开始,进行了 30 周的扫描:

工作评估

每次测量大概能够看到上周 48% 的服务器,随时间推移如下所示:

CDN 服务器部署

以 CloudFlare、Fastly、Akamai 与Alibaba为例,基于扫描AS 内IP 地址收集CDN 指纹。结果如下所示,TLS 指纹与CDN 有较强的相关性:

CloudFlare 与Fastly 的准确率超过99%,Akamai 与Alibaba 的准确率超过85%。

C&C 服务器部署

根据跟踪,新加入黑名单中的 C&C 服务器95% 与旧的C&C 服务器具有相同的指纹。

不只是使用 TLS 指纹,辅助以HTTP 头数据效果更好。

与JARM 的比较

效果总是要比 JARM 好的,对C&C 服务器来说增益则更大。

工作思考

作者已将该工具开源到 GitHub,https://active-tls-fingerprinting.github.io/

声明:本文来自威胁棱镜,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。