目录
最近在windshark 抓包发现一个新的字段 JA4 和 JA4r。
[JA4: t13d1517h2_8daaf6152771_b0da82dd1658]
[JA4_r:t13d1517h2_002f,0035,009c,009d,1301,1302,1303,c013,c014,c02b,c02c,c02f,c030,cca8,cca9_0005,000a,000b,000d,0012,0017,001b,0023,0029,002b,002d,0033,4469,fe0d,ff01_0403,0804,0401,0503,0805,0501,0806,0601]
JA4+
JA4+ 是一个网络指纹的识别方法,包含了系列指纹。其中JA4 是指TLS 客户端指纹,JA4S 指TLS 服务器响应/会话指纹,这2者对应JA3和JA3S。JA4引入了a_b_c的格式用于分割指纹的不同构成部分,这允许仅利用 ab 或 ac 或 c 进行搜索和检测,这种新的局部性保留格式有助于进行更深入、更丰富的分析,同时保持简单、易于使用并允许扩展。
由于chrome系浏览器在约108版本后打乱了TLS拓展顺序,从而导致生成大量不同的JA3,这让原版的JA3不在高效。很好奇这一个格式的指纹表现如何。
JA4 的技术细节
JA3 的结构
TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats
相同与不同
相同
- 关注 TLS version
- 关注 cipher suite
- 关注 TLS extension
不同
JA4不关心的
- EllipticCurves
- EllipticCurvePointFormats
增加的
-
IP Protocol,
用于标记TCP 或 QUIC,用 t 和 q 表示
-
TLS version
不同于JA3,JA4会尝试在拓展中找到可支持的最高TLS version。
指纹中代表字符串映射关系如下:
$ssl_version = [
0x0100 => "s1",
0x0200 => "s2",
0x0300 => "s3",
0x0301 => "10",
0x0302 => "11",
0x0303 => "12",
0x0304 => "13",
0x00 => "00",
];
-
SNI (Server Name Indication)
如果该拓展类型是域名(domain)记为 ‘d’,否则为’i’
-
number of Cipher Suite
-
number of Extensisions
-
ALPN (Application-Layer Protocol Negotiation)
取应用层协议协商拓展的第一个值,如果没有则用 00表示。
具体算法如下
$first_ALPN = current($tls_tls_handshake_extensions_alpn_str);
if (strlen($first_ALPN) > 2) {
$first_ALPN = substr($first_ALPN, 0, 1).substr($first_ALPN, -1, 1);
} else {
if (strlen($first_ALPN) > 127) {
$first_ALPN = '99';
}
}
-
Cipher Suite sroted
相比JA3,JA4会将Cipher Suite进行排序,同样忽略 GREASE_TABEL类型的拓展
-
Extensisions sroted
相比JA3,JA4会将Extensisions进行排序,忽略 GREASE_TABEL类型的拓展,同时会再忽略JA4_a中的SNI,ALPN拓展
-
Signature Algorithms,in the order they appear
签名哈希算法(准确的说:拓展signature_algorithms(13),按出现的顺序。
注意:在firefox中,会有拓展delegated_credential(34),也是一个提供Signature Algorithms的拓展,但计算JA4时应该忽略,具体看JA4 is including signature hash algorithms outside of the signature hash extension
常见的JA4
brower |
JA4 |
mark |
Chrome/121 |
t13d1516h2_8daaf6152771_02713d6af862 |
|
Chrome/121 |
t13d1517h2_8daaf6152771_b1ff8ab2d16f |
no key |
Chrome/121 |
13d1517h2_8daaf6152771_b0da82dd1658 |
with pre_share_key |
Edg/122 |
t13d1516h2_8daaf6152771_02713d6af862 |
|
Edg/122 |
t13d1517h2_8daaf6152771_b0da82dd1658 |
with pre_share_key |
Firefox/123.0 |
13d1715h2_5b57614c22b0_5c2c66f702b0 |
|
Firefox/123.0 |
13d1715h2_5b57614c22b0_7121afd63204 |
with pre_share_key |
OPR/102 |
t13d1516h2_8daaf6152771_e5627efa2ab1 |
|
OPR/102 |
t13d1516h2_8daaf6152771_9b887d9acb53 |
with pre_share_key |
curl/7.68.0(ubuntu) |
t13d3113h2_e8f1e7e78f70_ce5650b735ce |
|
curl/8.4.0(win10) |
t12d2109h1_76e208dd3e22_7af1ed941c26 |
|
iPhone OS 16_4_1 Safari |
13d2014h2_a09f3c656075_14788d8d241b |
|
About chrome
- empty
without pre_share_key(41) and padding(21)
- no key
without pre_share_key(41) but with padding(21)
- with pre_share_key
with pre_share_key(41)
源码
Xxx-Bin/php-ja3 已经支持JA4
参考
FoxIO-LLC/ja4
https://medium.com/foxio/ja4-network-fingerprinting-9376fe9ca637
what-is-ja4