JA 指纹识全系讲解-JA4+篇
字数 3058 2025-08-18 17:33:38
JA4+ 指纹识别全系详解
一、JA4+ 概述
JA4+ 是 JA3/3s 的升级替代方案,于 2023 年 9 月发布。它从早期针对 TLS 流量的指纹识别升级为支持多种协议的指纹识别方法,形成了指纹集(因此名称带有 "+" 后缀)。
JA4+ 分支及其应用场景
| 分支 | 支持协议 | 描述 |
|---|---|---|
| JA4 | TLS Client | 客户端 TLS 指纹 |
| JA4S | TLS Server Response | 服务端 TLS 响应指纹 |
| JA4H | HTTP Client | HTTP 客户端指纹 |
| JA4L | Light Distance/Location | 物理距离/位置测量 |
| JA4X | X509 TLS Certificate | TLS 证书指纹 |
| JA4SSH | SSH Traffic | SSH 流量指纹 |
| JA4T | TCP Client/Server | TCP 客户端/服务端指纹 |
| JA4TS | TCP Server Response | TCP 服务端响应指纹 |
| JA4TScan | Active TCP Server Fingerprint Scanner | 主动 TCP 服务端指纹扫描 |
二、JA4+ 与 JA3/3s 的区别
JA4+ 相比 JA3/3s 有三大主要改进:
- 拓展化:从仅支持 TLS 扩展到支持 TCP、HTTP、SSH 等多种协议,还能分析 TLS 证书和物理位置
- 模块化:采用 a_b_c 结构,各部分代表指纹的不同部分,提高灵活性和抗干扰能力
- 可读化:指纹中包含人类可读的信息,便于人工分析
三、各分支详细解析
1. JA4 (TLS Client)
JA4 对标 JA3,主要对 Client Hello 报文进行指纹化,支持 QUIC 和 TCP 协议。
指纹结构:JA4=t13d1516h2_8daaf6152771_02713d6af862(分为 JA4_a、JA4_b、JA4_c 三部分)
JA4_a 计算
- 格式:
t13d1516h2 - 组成:
- 第1字符:协议类型(t=TCP,q=QUIC)
- 第2-3字符:TLS 版本(13=1.3,12=1.2等)
- 第4字符:访问类型(d=域名,i=IP)
- 第5-6字符:Cipher Suites 数量(忽略 GREASE 值)
- 第7-8字符:ALPN 值(h2=HTTP/2,h1=HTTP/1.1,00=无)
JA4_b 计算
- 基于 Cipher Suite 值,忽略 GREASE 值
- 按从小到大排序后用 SHA256 加密,取前12位
JA4_c 计算
- 基于 Extensions-Type 值,忽略 GREASE、SNI(0000)、ALPN(0010)
- 排序后与 signature_algorithms 合并,SHA256 加密取前12位
2. JA4S (TLS Server)
对标 JA3s,对 Server Hello 报文进行指纹化。
指纹结构:同样分为 JA4_a、JA4_b、JA4_c 三部分
JA4s_a
- 类似 JA4_a,但去掉 SNI 和 Cipher Suite 数量
JA4s_b
- 服务端选择的 Cipher Suite(去掉 0x)
JA4s_c
- 基于 Extensions-Type 值,忽略 ALPN(0010)
- SHA256 加密取前12位
3. JA4H (HTTP Client)
指纹结构:ge20cr13enus_974ebe531c03_b66fa821d02c_e97928733c74(四部分)
JA4H_a
- 格式:
ge20cr13enus- ge:请求方法前2字母(GET=ge,POST=po等)
- 20:HTTP 版本(20=2.0,11=1.1)
- c:是否有 Cookie(c=有,n=无)
- r:是否有 Referer
- 13:请求头数量(忽略 Cookie 和 Referer)
- enus:Accept-Language 前4字符(无则为0000)
JA4H_b
- 基于响应标头(按顺序)SHA256 加密取前12位
JA4H_c
- 基于 Cookie 字段 SHA256 加密取前12位(无则为0000)
JA4H_d
- 基于 Cookie 字段和用户唯一 Cookie 值 SHA256 加密取前12位
4. JA4L (Light Distance/Location)
通过 TCP/UDP 流量测量物理距离。
测量模式:
- JA4L-C:客户端测量
- JA4L-S:服务端测量
指纹结构:JA4L_a_JA4L_b
- JA4L_a:单向延迟(微秒)
- JA4L_b:TTL 值
距离计算公式:
D = (JA4L_a × c) / p
- D:距离
- c:光速常量(0.206公里/μs)
- p:延迟传播系数(恶劣地形=2,良好地形=1.5)
5. JA4X (X.509 TLS Certificate)
对证书生成方式进行归类。
指纹结构:三部分
JA4X_a
- 基于 Issuer RDNs 字段名 SHA256 加密取前12位
JA4X_b
- 基于 Subject RDNs 字段名 SHA256 加密取前12位
JA4X_c
- 基于 X.509 V3 Extensions SHA256 加密取前12位
6. JA4SSH (SSH Traffic)
从 SSH 会话流量中提取指纹(默认每200个包计算一次)。
指纹结构:三部分
JA4SSH_a
- 客户端和服务端 TCP Payload 长度的众数
JA4SSH_b
- 客户端和服务端发送的 SSH 数据包数量
JA4SSH_c
- 客户端和服务端发送的 ACK 消息数量
四、Wireshark 配置
- 确保 Wireshark 版本 ≥ 4.2.0
- 下载 ja4.dll 放入
\Wireshark\plugins\版本\epan目录 - 启动 Wireshark 后:
- 编辑 → 首选项 → 外观 → 列
- 添加新列,类型选择 Custom
- 参考官方配置表设置
注意:最新版 Wireshark 已原生支持 JA4,若只需 JA4 可不进行额外配置。
五、技术优势
-
抗干扰能力:
- 排序处理应对 Cipher Stunting 和 Extension 随机化
- 模块化设计使指纹部分失效不影响整体
-
应用场景广泛:
- 可检测会话劫持和中间人攻击(JA4H+JA4L)
- 支持加密流量分析(如 SSH)
-
精准测量:
- JA4L 可实现物理距离的精确测算
- JA4X 通过证书生成方式而非内容进行识别
六、实际应用示例
TLS 指纹识别示例
JA4=t13d1516h2_8daaf6152771_02713d6af862
- t13:使用 TLS 1.3 的 TCP 连接
- d:访问域名
- 15:15个 Cipher Suites
- h2:使用 HTTP/2
- 后两部分为加密特征值
距离测量示例
JA4-S = 2449_104
- 延迟:2449 微秒
- TTL:104
- 计算距离:2449×0.206/1.8 ≈ 257.385 公里
七、总结
JA4+ 指纹集通过模块化、可读化和多协议支持,提供了更强大、更灵活的流量指纹识别能力。各分支针对不同协议和应用场景设计,可单独或组合使用,为网络安全分析、流量监测和异常检测提供了有力工具。