免费试用
CDNetworks
我们的多数产品都有14天的免费试用。无需信用卡。
机器人流量主要由自动脚本或程序生成,广泛应用于各种恶意活动,例如 DDoS 攻击、垃圾邮件发送、网络钓鱼和欺诈性广告点击。这些恶意行为不仅威胁个人用户的隐私和财务安全,而且对企业、组织甚至国家网络基础设施的网络安全构成重大风险。因此,对机器人流量的研究和防御已成为网络安全领域的重要课题。本指南旨在解释如何使用 TLS 指纹识别技术来检测和识别机器人流量,从而为网络安全提供更有效的保护。
TLS,即传输层安全性协议,是网络通信中常用的一种协议,用于保证数据的安全传输。TLS 在数据发送和接收过程中采用加密技术,防止数据被拦截或篡改,从而保护信息的完整性和机密性。
TLS 用于加密互联网上绝大多数流量,从网页浏览、注册登录、支付交易、流媒体,到日益流行的物联网 (IoT)。它的安全性也受到恶意攻击者的青睐,他们使用 TLS 来隐藏恶意软件的通信流量。
在 TLS 连接开始时,客户端会发送 TLS 客户端 Hello 数据包。此数据包由客户端应用程序生成,用于通知服务器支持的密码和首选通信方法,并以明文形式传输。TLS 客户端 Hello 数据包对于每个应用程序或其底层 TLS 库都是唯一的,从此数据包计算出的哈希值称为 TLS 指纹。
图 1:TLS 握手过程
目前,TLS 指纹识别的主要应用是 Salesforce 开源的 JA3 和 JA4,其中 JA4 是 JA3 的升级版,检测维度和场景更加丰富。因此本文主要关注基于 JA4 的 TLS 指纹识别在 Bot 防御中的应用和实践。
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 使用以防止扩展性故障。
图 2:客户端 Hello 消息
生成 JA3 指纹后,我们使用类似的方法在服务器端(即 TLS Server Hello 消息)识别指纹。JA3S 方法从 Server Hello 数据包中收集字段值并连接。
例子:
771,49200,65281-0-11-35-16-23
JA3S 指纹通过对连接字符串应用 32 位 MD5 哈希获得:
JA3S: d154fcfa5bb4f0748e1dd1992c681104
图 3:服务器 Hello 消息
JA4+ 提供易于使用且可共享的模块化网络指纹识别系统,取代了 JA3 TLS 指纹识别标准。JA4 检测方法增强了可读性,有助于更有效地搜寻和分析威胁。所有 JA4+ 指纹格式为 a_b_c,这种局部性的格式促进了深入分析。
JA4+指纹包括以下维度:
本文主要介绍JA4的应用,其他维度详情可参考JA4开源仓库.
图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
不同的客户端(浏览器、软件、程序)支持不同的协议版本、密码套件、扩展和加密算法。在 TLS 握手过程中,Client Hello 以明文传输,使我们能计算 JA4 指纹识别客户端的真实属性。
当客户端没有被篡改时,JA4指纹保持稳定。
在 机器人缓解 场景中,应用JA4指纹进行客户端识别需要结合其他信息:客户端IP、操作系统、设备名称、版本号等。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 指纹
客户端声明的设备信息 | 客户端 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 一致性检测
在机器人防御场景中,无论通过JA4唯一性或一致性特性,都依赖于庞大JA4指纹库的数据支持,类似于JA3指纹。因此,建立完善的指纹库是决定JA4能否成功识别机器人流量的关键因素之一。
由于官方的JA4+指纹库、相关应用及推荐检测逻辑尚在建设中,目前尚无可用指纹库。因此,CDNetworks安全实验室针对特定的Bot缓解场景,收集了常见的客户端指纹,并实现了相应的检测算法。
此次分析表明,TLS 指纹识别是一种非常有效的工具。通过深入分析 TLS 客户端的 Client Hello 数据包中的不同字段,我们可以生成独特的 JA4 指纹并识别特定恶意机器人流量。
尽管 TLS 指纹识别能有效检测机器人流量,但也存在局限性。随着攻击者不断升级和改变策略,TLS 指纹可能被篡改或伪造。因此,需不断更新和改进检测机制,以在持续的攻防战中保持优势。
在机器人缓解场景中,TLS 指纹识别提供了强大的识别机制,但不能替代其他安全措施。应作为全面机器人安全策略的一部分,与威胁情报、浏览器指纹识别等结合使用,以提供全面保护。
Edge Application (边缘应用)是 CDNetworks 领先的无服务器边缘计算解决方案。阅读了解了解其原理、核心优势及典型应用场景。
2024年10月24日,CDNetworks成功抵御了东南亚某大型用户群页游平台遭受的超大规模DDoS攻击,攻击在网络层达到1.24Tbps,在应用层超过百万QPS。