JARM 指纹比对

JARM 对 TLS 服务端做主动探测生成短指纹:用于比对可疑服务端与其他已知样本是否同源。

取证与溯源速查安全更新于 2026-10-13

JARM 指纹比对

JARM 是一种主动 TLS 指纹技术:工具向目标地址发起若干组特制握手,把服务端的响应特征组合成一个 62 字符的指纹串。它与基于客户端握手(如 JA3)的方法方向相反——JARM 描述服务端,因此适合对可疑的对外服务做批量比对,判断它们是否来自同一套服务端实现或同一批基础设施。指纹只能说明实现相近,不能单独证明同一团伙;且经过 CDN 或反向代理的地址,反映的是边缘节点而非源站。

基本信息

适用平台Linux / Windows 命令行环境(Python 实现),需能主动访问目标端口
使用方式python3 jarm.py -p 443 <目标地址>,输出指纹串
结果解释相同指纹说明服务端 TLS 实现特征一致,可能同源
辅助手段部分网络空间测绘与情报平台支持按 JARM 指纹检索相同特征的服务
限制CDN、反向代理与自定义握手逻辑会让指纹指向中间设备

典型使用场景

  • 批量比对待查服务与已知恶意服务,发现同源基础设施
  • 从一批可疑域名中按指纹聚类,减少逐个手工分析的工作量
  • 验证某个新发现的服务是否与此前样本使用同一套服务端框架
  • 跟踪同一框架的多个实例,扩展受影响资产清单
  • 为报告中的同源判断提供可复核的技术依据

计算与比对

计算与比对
# 对单个目标计算 JARM 指纹
python3 jarm.py -p 443 203.0.113.10
# 批量计算多个目标,便于按指纹归组
python3 jarm.py -p 443 203.0.113.10 203.0.113.11 203.0.113.12 > jarm-all.txt
# 按指纹列排序,相同指纹会排列在一起
sort -k2 jarm-all.txt | head -30
# 与已知样本指纹清单比对(两侧均需先做格式规范化)
grep -F -f known-jarm.txt jarm-all.txt

结果读法

输出项含义判读要点
目标与端口被探测的地址同一地址不同端口可能给出不同指纹
指纹串服务端 TLS 响应特征组合相同即实现特征一致,不代表同一组织
空值或异常串目标不可达或非 TLS 服务先确认端口与实际服务类型
批量结果分布同类指纹的出现次数聚集出现的未知指纹值得进一步调查
部分服务端会返回默认或固定指纹,扫描器与蜜罐也可能产生相同结果;命中与不命中都要结合证书、域名、时间与流量证据一起判断。
JARM 是主动探测:对第三方系统执行探测可能涉及授权与合规问题,必须确认你在授权范围内操作,并记录探测时间与目标清单。

易错点

  • 把指纹相同当成同一团伙:指纹只反映服务端实现特征,需要叠加证书、域名、时间与行为证据
  • 忽略 CDN 与反向代理:指纹会指向边缘节点,误判为源站特征会得出错误的同源结论
  • 未记录探测时间:服务端配置会变化,缺时间标注的结果无法复核
  • 对未授权目标批量探测:可能触及合规边界,探测范围必须来自授权清单
  • 只看指纹不看服务内容:结合证书主题、页面特征与响应头能显著提高判断可靠性

数据来源与参考

  • Salesforce JARM 项目文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌