TLS 指纹识别在 Bot 缓解中的实际应用

最后更新于 2024年9月12日
TLS-Fingerprinting-in-Bot-Mitigation

在当今的数字世界中,网络安全已成为个人、组织乃至国家面临的重要问题。在各种威胁中,“机器人流量”或机器人网络流量已成为一个重大问题。

机器人流量主要由自动脚本或程序生成,广泛应用于各种恶意活动,例如 DDoS 攻击、垃圾邮件发送、网络钓鱼和欺诈性广告点击。这些恶意行为不仅威胁个人用户的隐私和财务安全,而且对企业、组织甚至国家网络基础设施的网络安全构成重大风险。因此,对机器人流量的研究和防御已成为网络安全领域的重要课题。本指南旨在解释如何使用 TLS 指纹识别技术来检测和识别机器人流量,从而为网络安全提供更有效的保护。

TLS 指纹识别简介

TLS,即传输层安全性协议,是网络通信中常用的一种协议,用于保证数据的安全传输。TLS 在数据发送和接收过程中采用加密技术,防止数据被拦截或篡改,从而保护信息的完整性和机密性。

TLS 用于加密互联网上绝大多数流量,从网页浏览、注册登录、支付交易、流媒体,到日益流行的物联网 (IoT)。它的安全性也受到恶意攻击者的青睐,他们使用 TLS 来隐藏恶意软件的通信流量。

在 TLS 连接开始时,客户端会发送 TLS 客户端 Hello 数据包。此数据包由客户端应用程序生成,用于通知服务器支持的密码和首选通信方法,并以明文形式传输。TLS 客户端 Hello 数据包对于每个应用程序或其底层 TLS 库都是唯一的,从此数据包计算出的哈希值称为 TLS 指纹。

TLS-Handshake-Process

图 1:TLS 握手过程

目前,TLS 指纹识别的主要应用是 Salesforce 开源的 JA3 和 JA4,其中 JA4 是 JA3 的升级版,检测维度和场景更加丰富。因此本文主要关注基于 JA4 的 TLS 指纹识别在 Bot 防御中的应用和实践。

1. JA3 和 JA3S

JA3 方法从客户端的 Client Hello 数据包中的字段收集字节的十进制值,包括 TLS 版本、密码套件、扩展列表、椭圆曲线和椭圆曲线格式。按照出现顺序连接这些值,用逗号和连字符分隔字段和值。

例子:

771,4865-4866-4867-49195-49196-52393-49199-49200-52392-49171-49172-156-157-47-53,0-23-65281-10-11-35-16-5-13-51-45-43-21,29-23-24,0

JA3 指纹通过对连接字符串应用 32 位 MD5 哈希获得:

JA3:f79b6bad2ad0641e1921aef10262856b

在计算 JA3 指纹时,需要忽略 TLS 扩展中的 GREASE 字段值。这种机制由 Google 使用以防止扩展性故障。

Client-Hello-Message

图 2:客户端 Hello 消息

生成 JA3 指纹后,我们使用类似的方法在服务器端(即 TLS Server Hello 消息)识别指纹。JA3S 方法从 Server Hello 数据包中收集字段值并连接。

例子:

771,49200,65281-0-11-35-16-23

JA3S 指纹通过对连接字符串应用 32 位 MD5 哈希获得:

JA3S: d154fcfa5bb4f0748e1dd1992c681104
Server-Hello-Message

图 3:服务器 Hello 消息

2. JA4+

JA4+ 提供易于使用且可共享的模块化网络指纹识别系统,取代了 JA3 TLS 指纹识别标准。JA4 检测方法增强了可读性,有助于更有效地搜寻和分析威胁。所有 JA4+ 指纹格式为 a_b_c,这种局部性的格式促进了深入分析。

JA4+指纹包括以下维度:

  1. JA4 — TLS 客户端
  2. JA4S — TLS 服务器响应
  3. JA4H — HTTP 客户端
  4. JA4L — 灯光距离/位置
  5. JA4X — X509 TLS 证书
  6. JA4SSH — SSH 流量

本文主要介绍JA4的应用,其他维度详情可参考JA4开源仓库.

JA4-Schematic-Diagram

图4:JA4原理图

JA4由JA4_a、JA4_b、JA4_c组成:

JA4_r = JA4_a(t13d1516h2)_JA4_b(排序后的密码套件)_JA4_c(排序后的扩展_原始加密算法)

JA4_a:包含 TLS 版本、SNI、密码套件数、扩展数和 ALPN。注意,ALPN“h2”的存在并不一定表示浏览器,因为许多物联网设备通过 HTTP/2 进行通信。

JA4_b:对排序后的密码套件进行SHA256运算,取前12个字符。例如:

002f,0035,009c,009d,1301,1302,1303,c013,c014,c02b,c02c,c02f,c030,cca8,cca9 = 8daaf6152771

JA4_c:对排序后的扩展名和原始加密算法进行SHA256运算,取前12个字符。

0005,000a,000b,000d,0012,0015,0017,001b,0023,002b,002d,0033,4469,ff01_0403,0804,0401,0503,0805,0501,0806,0601 = e5627efa2ab1

JA4 指纹识别在 Bot 缓解中的应用

检测原理

不同的客户端(浏览器、软件、程序)支持不同的协议版本、密码套件、扩展和加密算法。在 TLS 握手过程中,Client Hello 以明文传输,使我们能计算 JA4 指纹识别客户端的真实属性。

  • Firefox(JA4 客户端 Hello)≠ Chrome(JA4 客户端 Hello)
  • Chrome 120(JA4 客户端 Hello)≠ Chrome 80(JA4 客户端 Hello)
  • Chrome iOS(JA4 客户端 Hello)≠ Chrome Android(JA4 客户端 Hello)
  • Heritrix(JA4 客户端 Hello)≠ Chrome(JA4 客户端 Hello)

当客户端没有被篡改时,JA4指纹保持稳定。

申请方式

机器人缓解 场景中,应用JA4指纹进行客户端识别需要结合其他信息:客户端IP、操作系统、设备名称、版本号等。JA4指纹在这些场景下主要有两种应用方式:指纹唯一性检测和指纹一致性检测。

  1. 唯一性检测:
    有些客户端程序具有唯一的JA4指纹,并且变化很少,通过唯一性检测可有效识别异常客户端。
应用 JA4+ 指纹
铬合金 JA4=t13d1517h2_8daaf6152771_b1ff8ab2d16f (初始)
JA4=t13d1517h2_8daaf6152771_b0da82dd1658(重新连接)
火狐浏览器 JA4=t13d1715h2_5b57614c22b0_7121afd63204(初始)
JA4=t13d1715h2_5b57614c22b0_7121afd63204(重新连接)
苹果浏览器 JA4=t13d2014h2_a09f3c656075_14788d8d241b
银蚁 JA4=t13d491100_bd868743f55c_fa269c3d986d
未检测到的 chrome 驱动程序 JA4=t13d1516h2_8daaf6152771_02713d6af862
IcedID 恶意软件 JA4=t13d201100_2b729b4bf6f3_9e7b989ebec8
sqlmap JA4=t13i311000_e8f1e7e78f70_d41ae481755e
扫描器 JA4=t12i3006h2_a0f71150605f_1da50ec048a3

表 1:常见客户端 JA4 指纹

  1. 一致性检测:
    指纹一致性检测将客户端声明的设备信息与其JA4指纹进行比对,看是否匹配。
客户端声明的设备信息 客户端 JA4 指纹 一致性
“浏览器”:“Chrome”, “浏览器版本”:“89.8.7866”, “操作系统”:“Windows”, “操作系统版本”:“7”, t12d290400_11b08e233c4b_017f05e53f6d 异常
“浏览器”:“Chrome”, “浏览器版本”:“93.0.4622”, “操作系统”:“Windows”, “操作系统版本”:“10” t13d431000_c7886603b240_5ac7197df9d2 异常
“浏览器”:“Python 请求”, “浏览器版本”:“2.31” t13d1516h2_8daaf6152771_02713d6af862 异常
“浏览器”:“Chrome”, “浏览器版本”:“93.0.4577”, “操作系统”:“Windows”, “操作系统版本”:“10”, t13d1516h2_8daaf6152771_e5627efa2ab1 正常
“浏览器”:“Firefox”, “浏览器版本”:“116.0”, “操作系统”:“Ubuntu”, t13d321200_1b30506679d3_58ed7828516f 异常
“浏览器”:“边缘”, “浏览器版本”:“14.14393”, “操作系统”:“Windows”, “操作系统版本”:“10” t12d040400_a6a9ac001284_255c81f47ac1 异常
“浏览器”:“Safari”, “浏览器版本”:“15.6”, “操作系统”:“Mac OS X”, “操作系统版本”:“10.15.7” t13d2014h2_a09f3c656075_f62623592221 正常

表 2:JA4 一致性检测

  1. JA4指纹数据库

在机器人防御场景中,无论通过JA4唯一性或一致性特性,都依赖于庞大JA4指纹库的数据支持,类似于JA3指纹。因此,建立完善的指纹库是决定JA4能否成功识别机器人流量的关键因素之一。

由于官方的JA4+指纹库、相关应用及推荐检测逻辑尚在建设中,目前尚无可用指纹库。因此,CDNetworks安全实验室针对特定的Bot缓解场景,收集了常见的客户端指纹,并实现了相应的检测算法。

结论

此次分析表明,TLS 指纹识别是一种非常有效的工具。通过深入分析 TLS 客户端的 Client Hello 数据包中的不同字段,我们可以生成独特的 JA4 指纹并识别特定恶意机器人流量。

尽管 TLS 指纹识别能有效检测机器人流量,但也存在局限性。随着攻击者不断升级和改变策略,TLS 指纹可能被篡改或伪造。因此,需不断更新和改进检测机制,以在持续的攻防战中保持优势。

在机器人缓解场景中,TLS 指纹识别提供了强大的识别机制,但不能替代其他安全措施。应作为全面机器人安全策略的一部分,与威胁情报、浏览器指纹识别等结合使用,以提供全面保护。

免费试用
CDNetworks

我们的多数产品都有14天的免费试用。无需信用卡。

探索更多

其他

CDNetworks Edge Application (边缘应用):解锁无服务器边缘计算的强大功能

Edge Application (边缘应用)是 CDNetworks 领先的无服务器边缘计算解决方案。阅读了解了解其原理、核心优势及典型应用场景。

了解更多 »
云安全

CDNetworks 帮助浏览器游戏平台抵御大规模 1.24 Tbps DDoS 攻击

2024年10月24日,CDNetworks成功抵御了东南亚某大型用户群页游平台遭受的超大规模DDoS攻击,攻击在网络层达到1.24Tbps,在应用层超过百万QPS。

了解更多 »