在 https://tls.peet.ws/ 可以获取到TLS指纹,API 方式 https://tls.peet.ws/api/all
JA3
ja3 在TLS握手中,客户端的ClientHello包中会包含客户端的特征,如支持的TLS版本、扩展组件、加密套件,这些不会经常变化,通过对这些特征进行归纳,可以明显的甄别出试图伪造客户端调用的黑灰产。TLS ClientHello-> JA3 特征 -> 和 UserAgent 对比,判断是否伪造。以及通过指纹库,可以判断出常用的HTTP客户端指纹,如Go的、Python的、甚至某些特定的渗透工具。
字段顺序如下(其中若没有的留空)TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats
得到一个字符串771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,13-10-65037-11-17513-45-18-51-5-0-27-16-43-65281-23-35,4588-29-23-24,0
然后再Md5取得32位哈希值:ea26b507ae33263327bc2e8e3447698f
在Chrome中,Extensions不一定每次都是相同的,但总的指纹是一个有限集。
同理,还有针对服务端 ServerHello 的 Ja3S指纹,取 TLSVersion,Cipher,Extensions
字段。
Ja3可以被伪造,通过定制TLS的加密套件去调整,但有一定门槛。目前主流使用 go 对 TLS 握手代码进行调整,来伪造 TLS 指纹。req HTTP 指纹伪造
JA4+
ja4如图,是标准的 JA4 的组成结构,SNI ServerNameIndication 表示访问服务器名称, ALPN 表示应用层协商协议 h1=HTTP/1.1,h2=HTTP/2、dt=DNS-over-TLS,相比 JA3 还对加密套件和扩展进行了排序,不同客户端的指纹是基本唯一的示例,扩展可能会变化,但是 JA4_a 和 JA4_b 基本不会变化。
JA4+还有很多子集,用于不同场景:
- JA4S 和 JA3S相似
- JA4H 适用 HTTP 客户端的指纹
- JA4L 光距离位置(Light Distance Locality)
JA4L 是利用信号传输中的时延,近似计算客户端和服务端的距离。计算使用了 TCP握手的时延。
D= jc/p , 公式 S = vt ,V 为光速,t 也即是ja4L_a 为时延, p则是引入了地形、复杂网络对传播的额外时延。计算得到 D 距离,是理论上的距离最大值。利用多个服务器,可以依据三角测量得到相对准确的城市区域。JA4L_b 是 TCP TTL,通过这个可以近似到源操作系统。
JA4X X509 TLS 证书指纹
对生成证书的方式进行指纹识别,可以判断出用于创建证书的应用程序和设置。通过这个可以分析判断恶意服务器。JA4SSH
通过对SSH的指纹特征判断,来检测是否有异常的访问。
此外还有 TCP指纹
- JA4TCP JA4T TCP Client Fingerprinting
- JA4TCPServer JA4TS TCP Server Response Fingerprinting
- JA4TCPScan JA4TScan Active TCP Fingerprint Scanner
官方实现
https://github.com/FoxIO-LLC/ja4
开源产品也在接入:
如 Nginx JA4+ 开发中 ja4-nginx-module
JA4+ 数据库
通过官方提供的这一数据库可以查询到JA4指纹
https://ja4db.com/
版权声明
本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途
评论区#
还没有评论哦,期待您的评论!
引用发言