利用JA3和JA3S实现TLS指纹识别
字数 1983 2025-08-27 12:33:54

TLS指纹识别技术:JA3与JA3S详解

一、概述

JA3和JA3S是一种用于提取和识别TLS协商指纹的技术,能够为特定客户端与服务器之间的加密通信提供高识别度。这种技术由Salesforce团队开发并开源,主要用于网络安全监控和恶意软件检测。

二、核心概念

1. JA3 (客户端指纹)

JA3通过对TLS Client Hello数据包中的特定字段进行哈希计算,生成客户端指纹。这些字段包括:

  • TLS版本
  • 可接受的密码套件
  • 扩展列表
  • 椭圆曲线密码
  • 椭圆曲线密码格式

2. JA3S (服务器指纹)

JA3S通过对TLS Server Hello数据包中的特定字段进行哈希计算,生成服务器指纹。这些字段包括:

  • TLS版本
  • 选择的密码套件
  • 扩展列表

三、指纹生成方法

JA3指纹生成步骤:

  1. 从Client Hello数据包提取以下字段的十进制字节值:

    • TLSVersion
    • Ciphers
    • Extensions
    • EllipticCurves
    • EllipticCurvePointFormats
  2. 将这些值用特定符号连接:

    • 字段间用","分隔
    • 字段内的值用"-"分隔
  3. 对连接后的字符串计算MD5哈希值

示例:

769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0
→ MD5 → ada70206e40642a3e4461f35503241d5

JA3S指纹生成步骤:

  1. 从Server Hello数据包提取以下字段的十进制字节值:

    • TLSVersion
    • Cipher
    • Extensions
  2. 将这些值用特定符号连接:

    • 字段间用","分隔
    • 字段内的值用"-"分隔
  3. 对连接后的字符串计算MD5哈希值

示例:

769,47,65281-0-11-35-5-16
→ MD5 → 4835b19f14997673071435cb321f5445

四、技术特点

  1. GREASE处理:JA3会忽略Google的GREASE(Generate Random Extensions And Sustain Extensibility)值,确保使用GREASE的程序仍能用单个JA3哈希值完成指纹识别。

  2. TLS 1.3支持:JA3完全支持TLS 1.3协议。

  3. MD5选择原因

    • 易于集成到现有技术中
    • 大多数现有设备支持MD5计算
    • 有限数据集下无需担心哈希碰撞
    • 生成的指纹简短(32字符),易于共享

五、实际应用案例

1. 已知指纹示例

  • Tor客户端

    • JA3 = e7d705a3286e19ea42f587b344ee6865
    • JA3S = a95ca7eab4d47d051a5cd4fb7b6005dc
  • Trickbot恶意软件

    • JA3 = 6734f37431670b3ab4292b8f60f29984
    • JA3S = 623de93db17d313345d7ea481e7443cf
  • Emotet恶意软件

    • JA3 = 4d7a28d6f2263ed61de88ca66eb011e3
    • JA3S = 80b3a14bccc8598a1f3bbe83e71f735f

2. 渗透测试工具识别

  • Metasploit Meterpreter

    • Windows 10 JA3: 72a589da586844d7f0818ce684948eea(IP)或a0e9f5d64349fb13191bc781f81f42e1(域名)
    • JA3S: 70999de61602be74d4b25185843bd18e
  • Cobalt Strike Beacon

    • Windows 10 JA3: 同上
    • JA3S: b742b407517bac9536a77a7b0fee28e9

六、安全应用价值

  1. 定制恶意软件检测:定制恶意软件通常有独特的JA3指纹。

  2. 常见库识别:使用公共库(如Python或Windows套接字)的应用程序可能有常见JA3,但结合JA3S可提高检测准确性。

  3. C2基础设施识别:即使C2服务器更换IP、域名或证书,JA3+JA3S组合仍能有效识别。

  4. 降低误报:JA3单独使用时可能有较高误报率,但结合JA3S可显著降低。

七、实现工具

开源实现可从以下地址获取:

  • JA3主项目: https://github.com/salesforce/ja3
  • 相关项目:
    • HASSH(SSH指纹): https://github.com/salesforce/hassh
    • Bro-Sysmon: https://github.com/salesforce/bro-sysmon

八、局限性

  1. 非绝对唯一性:如同用户代理字符串,相同指纹可能被多个应用使用。

  2. 需要组合使用:单独使用JA3可能效果有限,建议与JA3S结合。

  3. 依赖明文部分:仅能分析TLS协商的明文部分,加密内容仍需其他技术分析。

九、总结

JA3和JA3S提供了一种有效的TLS指纹识别方法,能够:

  • 识别特定客户端应用程序
  • 检测恶意软件通信
  • 追踪C2基础设施变化
  • 增强现有安全监控能力

这种技术将攻击者推向"痛苦金字塔"顶端,增加了攻击成本,是网络安全防御体系中有价值的补充。

TLS指纹识别技术:JA3与JA3S详解 一、概述 JA3和JA3S是一种用于提取和识别TLS协商指纹的技术,能够为特定客户端与服务器之间的加密通信提供高识别度。这种技术由Salesforce团队开发并开源,主要用于网络安全监控和恶意软件检测。 二、核心概念 1. JA3 (客户端指纹) JA3通过对TLS Client Hello数据包中的特定字段进行哈希计算,生成客户端指纹。这些字段包括: TLS版本 可接受的密码套件 扩展列表 椭圆曲线密码 椭圆曲线密码格式 2. JA3S (服务器指纹) JA3S通过对TLS Server Hello数据包中的特定字段进行哈希计算,生成服务器指纹。这些字段包括: TLS版本 选择的密码套件 扩展列表 三、指纹生成方法 JA3指纹生成步骤: 从Client Hello数据包提取以下字段的十进制字节值: TLSVersion Ciphers Extensions EllipticCurves EllipticCurvePointFormats 将这些值用特定符号连接: 字段间用","分隔 字段内的值用"-"分隔 对连接后的字符串计算MD5哈希值 示例: JA3S指纹生成步骤: 从Server Hello数据包提取以下字段的十进制字节值: TLSVersion Cipher Extensions 将这些值用特定符号连接: 字段间用","分隔 字段内的值用"-"分隔 对连接后的字符串计算MD5哈希值 示例: 四、技术特点 GREASE处理 :JA3会忽略Google的GREASE(Generate Random Extensions And Sustain Extensibility)值,确保使用GREASE的程序仍能用单个JA3哈希值完成指纹识别。 TLS 1.3支持 :JA3完全支持TLS 1.3协议。 MD5选择原因 : 易于集成到现有技术中 大多数现有设备支持MD5计算 有限数据集下无需担心哈希碰撞 生成的指纹简短(32字符),易于共享 五、实际应用案例 1. 已知指纹示例 Tor客户端 : JA3 = e7d705a3286e19ea42f587b344ee6865 JA3S = a95ca7eab4d47d051a5cd4fb7b6005dc Trickbot恶意软件 : JA3 = 6734f37431670b3ab4292b8f60f29984 JA3S = 623de93db17d313345d7ea481e7443cf Emotet恶意软件 : JA3 = 4d7a28d6f2263ed61de88ca66eb011e3 JA3S = 80b3a14bccc8598a1f3bbe83e71f735f 2. 渗透测试工具识别 Metasploit Meterpreter : Windows 10 JA3: 72a589da586844d7f0818ce684948eea(IP)或a0e9f5d64349fb13191bc781f81f42e1(域名) JA3S: 70999de61602be74d4b25185843bd18e Cobalt Strike Beacon : Windows 10 JA3: 同上 JA3S: b742b407517bac9536a77a7b0fee28e9 六、安全应用价值 定制恶意软件检测 :定制恶意软件通常有独特的JA3指纹。 常见库识别 :使用公共库(如Python或Windows套接字)的应用程序可能有常见JA3,但结合JA3S可提高检测准确性。 C2基础设施识别 :即使C2服务器更换IP、域名或证书,JA3+JA3S组合仍能有效识别。 降低误报 :JA3单独使用时可能有较高误报率,但结合JA3S可显著降低。 七、实现工具 开源实现可从以下地址获取: JA3主项目: https://github.com/salesforce/ja3 相关项目: HASSH(SSH指纹): https://github.com/salesforce/hassh Bro-Sysmon: https://github.com/salesforce/bro-sysmon 八、局限性 非绝对唯一性 :如同用户代理字符串,相同指纹可能被多个应用使用。 需要组合使用 :单独使用JA3可能效果有限,建议与JA3S结合。 依赖明文部分 :仅能分析TLS协商的明文部分,加密内容仍需其他技术分析。 九、总结 JA3和JA3S提供了一种有效的TLS指纹识别方法,能够: 识别特定客户端应用程序 检测恶意软件通信 追踪C2基础设施变化 增强现有安全监控能力 这种技术将攻击者推向"痛苦金字塔"顶端,增加了攻击成本,是网络安全防御体系中有价值的补充。