主动扫描中的 TLS 指纹
2023-9-17 22:25:40 Author: mp.weixin.qq.com(查看原文) 阅读量:4 收藏

工作来源

TMA 2022

工作背景

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

工作设计

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

TLS 握手中提取特征

从一个给定的 ClientHello 提取特征,包括版本、密码套件、接收到的告警与扩展数据。扩展数据是 ServerHelloEncrypted ExtensionsCertificate RequestHello 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 服务器部署

以 CloudFlareFastlyAkamai 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://mp.weixin.qq.com/s?__biz=MzkyMzE5ODExNQ==&mid=2247486599&idx=1&sn=fcc0ffa5266ea9c21cbc87f9adf21e50&chksm=c1e9fb4bf69e725d0cbfcf808eeb6ed70aba6216cc434ad55370ac40dc7c9e65e910050577c4&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh