JA 指纹识全系讲解(上)
字数 1553 2025-08-06 08:35:32
JA 指纹识别全系详解
前言
JA 指纹是一种对传输层(SSL/TLS)进行指纹识别的方法,由John Althouse、Jeff Atkinson 和Josh Atkins 三位安全研究员在2017年6月首次发布。JA系列指纹可以被看作是一种IOC(入侵指标),广泛应用于安全检测领域。
JA 指纹概述
基本概念
JA 指纹系列包括四个主要分支:
- JA3:对TLS客户端进行被动识别
- JA3s:对TLS服务端进行被动识别(JA3的服务端版)
- JAM:对TLS服务端进行主动识别(JA3和JA3s的融合)
- JA4+:一个指纹合集,包括JA4、JA4S、JA4H、JA4L、JA4X、JA4SSH
应用场景
- 识别特殊流量(C2、V2ray等)
- 安全产品检测(WAF、威胁情报平台等)
- 资产拓线和威胁狩猎
- Burp Suite等工具的反制检测
JA3 详解
计算原理
JA3指纹基于SSL/TLS握手过程中的Client Hello报文计算,使用以下五项参数:
- TLS Version
- Cipher Suite
- Extension
- EllipticCurves(Supported_Groups)
- Elliptic Curve Point Formats(ec_point_formats)
计算方法
- 将各项参数的数值转为十进制
- 相同项的参数使用"-"串联
- 不同项使用","分隔
- 对拼接后的字符串计算MD5哈希
示例:
771,4866-4865-4867-49196-49195-52393-49200-52392-49199-159-52394-163-158-162-49188-49192-49187-49191-107-106-103-64-49198-49202-49197-49201-49190-49194-49189-49193-49162-49172-49161-49171-57-56-51-50-49157-49167-49156-49166-157-156-61-60-53-47-49160-49170-22-19-49155-49165-10-255,0-5-10-11-17-23-13-43-45-50-51,29-23-24-25-30-256-257-258-259-260,0
MD5: dc86f13deee08e265833d3d9c6ae5694
GREASE机制的影响与优化
Google在Chrome中引入了GREASE(Generate Random Extensions And Sustain Extensibility)机制,导致JA3指纹随机变化。解决方案是去掉Extension项的检测(留空),仅使用剩余四项作为算子。
JA3s 详解
计算原理
JA3s基于Server Hello报文计算,使用以下三项参数:
- TLS Version
- Cipher Suite
- Extension
计算方法与JA3相同。
示例:
771,49199,0-11-65281-35-23
MD5: 2ab44dd8c27bdce434a961463587356a
JARM 详解
特点
- 主动探测:主动向服务端发送Client Hello报文
- 双向计算:同时结合Client Hello和Server Hello报文
获取方法
使用官方提供的Python脚本:
python jarm.py -i targets.txt -v
计算原理
JARM指纹是62位的模糊哈希:
- 前30位:基于Server Hello选择的Cipher Suites和TLS Version
- 后32位:基于Extensions的SHA256哈希
计算过程
- 定义10种不同的TLS握手配置(数组)
- 构建并发送特征不同的数据包
- 接收并处理Server Hello响应
- 计算模糊哈希:
- cipher_bytes函数处理Cipher Suites
- version_byte函数处理TLS Version
- SHA256处理Extensions
应用与局限
应用场景:
- C2服务器的主动探测和识别
- 资产拓线和威胁狩猎
局限性:
- 不与特定C2唯一对应
- 会随版本或基础库变化而变化
- 需结合其他指标进行研判
实践建议
- 指纹收集:使用Wireshark抓包分析JA3/JA3s
- 主动探测:使用JARM脚本扫描目标
- 威胁狩猎:结合FOFA等平台进行资产拓线
- 检测优化:针对GREASE机制调整检测策略
总结
JA指纹系列提供了从不同维度识别TLS流量的方法,丰富了安全检测的IOC指标。虽然每种方法都有其局限性,但合理组合使用可以显著提升对恶意流量的检测能力,特别是在传统IP/域名检测失效的场景下。