search.png
关于我
menu.png
TLS 指纹

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/

版权声明

知识共享许可协议 本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
发布时间:2025年01月05日 20:06:56

评论区#

还没有评论哦,期待您的评论!

关闭特效