网络侧典型指纹识别算法
字数 2098 2025-09-01 11:25:54

TCP/IP 与应用层指纹识别技术详解

一、主动型 TCP/IP 层指纹识别技术

1. Queso (已淘汰)

  • 原理:通过发送一系列格式异常或不常见的 TCP 数据包(如 SYN 包中包含不常见的 TCP 选项组合)
  • 特点
    • 最早期的主动指纹识别工具
    • 利用不同操作系统内核 TCP/IP 协议栈对异常数据包的不同响应进行识别
    • 已被现代操作系统更新淘汰

2. XProbe2 (已淘汰)

  • 探测方式:发送多种探测包,分析返回的 ICMP 错误消息(端口不可达、TTL 超时等)、TCP 响应包及 UDP 端口状态
  • 特点
    • 在某些情况下识别效果优于 Nmap
    • 多协议探测提高准确性

3. SinFP (已淘汰)

  • 原理:仅使用一个精心构造的 SYN 包
  • 分析特征
    • 目标返回的 SYN/ACK 包中的 TCP 选项布局
    • 窗口大小
    • TTL 值
  • 优势
    • 单包探测更加隐蔽和快速
    • 减少网络流量和被发现风险

二、被动型 TCP/IP 层指纹识别技术

1. p0f

  • 工作方式:捕获网络流量,分析数据包特征
  • SYN/ACK 包分析项
    • TTL 值
    • 窗口大小
    • TCP 选项
    • MSS(最大段大小)
  • 应用:操作系统和客户端软件识别

2. Zardaxt

  • 分析参数
    • TTL
    • 窗口大小
    • TCP 标志位
    • TCP 选项
  • 特点
    • 指纹格式或匹配逻辑独特
    • 核心思想与 p0f 基本一致

3. Satori

  • 支持协议
    • TCP
    • DHCP
    • HTTP
    • SMB
  • 特点:多协议指纹识别增强准确性

4. MuonFP

  • 改进点
    • 更好的匹配算法
    • 更全面的指纹库
    • 对现代操作系统识别效果更好
  • 分析特征
    • TCP 窗口大小
    • TCP 选项(有序)
    • TCP 最大段长
    • TCP 窗口缩放字段
  • 实现:使用 Rust 编写,性能优异

三、主动型应用层指纹识别技术

1. JA3 系列指纹

JA3

  • 原理:提取 TLS 客户端 Client Hello 数据包中的五个关键字段:
    1. TLS 版本
    2. 加密套件
    3. TLS 扩展列表
    4. 椭圆曲线
    5. 椭圆曲线点格式
  • 生成方式:拼接字段后计算 MD5 哈希值
  • 局限性:Chrome 已将 TLS 扩展顺序随机化,破坏了 JA3 稳定性

JA3S

  • 原理:提取 TLS 服务端 Server Hello 数据包中的三个关键字段:
    1. TLS 版本
    2. 加密套件
    3. TLS 扩展列表
  • 应用:与 JA3 结合可唯一标识客户端-服务器加密协商过程

JA3n

  • 改进
    • 不再计算 MD5 哈希
    • 直接使用拼接字符串作为指纹
    • 将 TLS 扩展按顺序排列,抵消乱序影响
  • 优缺点
    • 可反解客户端参数
    • 字符串过长不利于检索

JA4

  • 结构:将指纹分解为三部分:
    1. 协议与版本
    2. 客户端能力
    3. 连接特征
  • 优势
    • 支持模糊检索与相似度分析
    • 更好区分恶意软件模仿行为

JA4+

  • 组成:JA4、JA4S、JA4H、JA4X 与 JA4L 组合
  • 特点:构成极难伪造的高精度身份标识

2. JARM

  • 工作流程
    1. 向目标 TLS 服务器发送 10 个精心构造的 Client Hello 包
    2. 每个包使用不同的 TLS 版本、加密套件和选项
    3. 提取服务器响应的特征
    4. 组合特征并进行模糊哈希生成指纹
  • 特点:相同 TLS 配置会产生相同 JARM 指纹

四、被动型应用层指纹识别技术

1. HASSH

  • 原理:提取 SSH 握手过程中 SSH_MSG_KEXINIT 数据包的关键字段:
    • 密钥交换算法
    • 加密算法
    • 消息认证码算法
    • 压缩算法
  • 生成方式:拼接字段后计算 MD5 哈希

2. HASSHS

  • 原理:提取 SSH 服务器 SSH_MSG_KEXINIT 数据包中支持的算法列表
  • 特点:不同版本 OpenSSH 或 SSH 服务器会产生不同指纹

3. Akamai HTTP/2 Fingerprint

  • 分析参数:HTTP/2 SETTINGS 帧中的:
    • 动态表大小(SETTINGS_HEADER_TABLE_SIZE)
    • 最大并发流数量(SETTINGS_MAX_CONCURRENT_STREAMS)
    • 初始窗口大小(SETTINGS_INITIAL_WINDOW_SIZE)

4. QUIC 指纹

  • 提取特征:QUIC Initial 包中的 Client Hello 消息:
    • 传输参数(Transport Parameters)
    • 初始数据包大小
    • Token 使用情况
    • 版本协商细节

5. RDP Cookie Hashing

  • 指纹来源
    • 客户端发送的包含"MSTSHASH="的 Cookie
    • 安全协议协商(标准 RDP 安全、TLS、NLA)
    • 图形渲染能力协商
  • 应用:识别开放主机和检测蜜罐

五、技术演进趋势

  1. 从单一协议到多协议组合:如 JA4+ 组合多个指纹提高准确性
  2. 从精确匹配到模糊检索:如 JA4 支持相似度分析
  3. 对抗指纹随机化:如 JA3n 处理 TLS 扩展乱序问题
  4. 性能优化:如 MuonFP 使用 Rust 实现高性能
  5. 被动识别发展:减少主动探测带来的被发现风险
TCP/IP 与应用层指纹识别技术详解 一、主动型 TCP/IP 层指纹识别技术 1. Queso (已淘汰) 原理 :通过发送一系列格式异常或不常见的 TCP 数据包(如 SYN 包中包含不常见的 TCP 选项组合) 特点 : 最早期的主动指纹识别工具 利用不同操作系统内核 TCP/IP 协议栈对异常数据包的不同响应进行识别 已被现代操作系统更新淘汰 2. XProbe2 (已淘汰) 探测方式 :发送多种探测包,分析返回的 ICMP 错误消息(端口不可达、TTL 超时等)、TCP 响应包及 UDP 端口状态 特点 : 在某些情况下识别效果优于 Nmap 多协议探测提高准确性 3. SinFP (已淘汰) 原理 :仅使用一个精心构造的 SYN 包 分析特征 : 目标返回的 SYN/ACK 包中的 TCP 选项布局 窗口大小 TTL 值 优势 : 单包探测更加隐蔽和快速 减少网络流量和被发现风险 二、被动型 TCP/IP 层指纹识别技术 1. p0f 工作方式 :捕获网络流量,分析数据包特征 SYN/ACK 包分析项 : TTL 值 窗口大小 TCP 选项 MSS(最大段大小) 应用 :操作系统和客户端软件识别 2. Zardaxt 分析参数 : TTL 窗口大小 TCP 标志位 TCP 选项 特点 : 指纹格式或匹配逻辑独特 核心思想与 p0f 基本一致 3. Satori 支持协议 : TCP DHCP HTTP SMB 特点 :多协议指纹识别增强准确性 4. MuonFP 改进点 : 更好的匹配算法 更全面的指纹库 对现代操作系统识别效果更好 分析特征 : TCP 窗口大小 TCP 选项(有序) TCP 最大段长 TCP 窗口缩放字段 实现 :使用 Rust 编写,性能优异 三、主动型应用层指纹识别技术 1. JA3 系列指纹 JA3 原理 :提取 TLS 客户端 Client Hello 数据包中的五个关键字段: TLS 版本 加密套件 TLS 扩展列表 椭圆曲线 椭圆曲线点格式 生成方式 :拼接字段后计算 MD5 哈希值 局限性 :Chrome 已将 TLS 扩展顺序随机化,破坏了 JA3 稳定性 JA3S 原理 :提取 TLS 服务端 Server Hello 数据包中的三个关键字段: TLS 版本 加密套件 TLS 扩展列表 应用 :与 JA3 结合可唯一标识客户端-服务器加密协商过程 JA3n 改进 : 不再计算 MD5 哈希 直接使用拼接字符串作为指纹 将 TLS 扩展按顺序排列,抵消乱序影响 优缺点 : 可反解客户端参数 字符串过长不利于检索 JA4 结构 :将指纹分解为三部分: 协议与版本 客户端能力 连接特征 优势 : 支持模糊检索与相似度分析 更好区分恶意软件模仿行为 JA4+ 组成 :JA4、JA4S、JA4H、JA4X 与 JA4L 组合 特点 :构成极难伪造的高精度身份标识 2. JARM 工作流程 : 向目标 TLS 服务器发送 10 个精心构造的 Client Hello 包 每个包使用不同的 TLS 版本、加密套件和选项 提取服务器响应的特征 组合特征并进行模糊哈希生成指纹 特点 :相同 TLS 配置会产生相同 JARM 指纹 四、被动型应用层指纹识别技术 1. HASSH 原理 :提取 SSH 握手过程中 SSH_ MSG_ KEXINIT 数据包的关键字段: 密钥交换算法 加密算法 消息认证码算法 压缩算法 生成方式 :拼接字段后计算 MD5 哈希 2. HASSHS 原理 :提取 SSH 服务器 SSH_ MSG_ KEXINIT 数据包中支持的算法列表 特点 :不同版本 OpenSSH 或 SSH 服务器会产生不同指纹 3. Akamai HTTP/2 Fingerprint 分析参数 :HTTP/2 SETTINGS 帧中的: 动态表大小(SETTINGS_ HEADER_ TABLE_ SIZE) 最大并发流数量(SETTINGS_ MAX_ CONCURRENT_ STREAMS) 初始窗口大小(SETTINGS_ INITIAL_ WINDOW_ SIZE) 4. QUIC 指纹 提取特征 :QUIC Initial 包中的 Client Hello 消息: 传输参数(Transport Parameters) 初始数据包大小 Token 使用情况 版本协商细节 5. RDP Cookie Hashing 指纹来源 : 客户端发送的包含"MSTSHASH="的 Cookie 安全协议协商(标准 RDP 安全、TLS、NLA) 图形渲染能力协商 应用 :识别开放主机和检测蜜罐 五、技术演进趋势 从单一协议到多协议组合 :如 JA4+ 组合多个指纹提高准确性 从精确匹配到模糊检索 :如 JA4 支持相似度分析 对抗指纹随机化 :如 JA3n 处理 TLS 扩展乱序问题 性能优化 :如 MuonFP 使用 Rust 实现高性能 被动识别发展 :减少主动探测带来的被发现风险