工作来源
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,点击查看原文即可跳转仓库地址。