CyberChef HASSH 指纹

分类:安全 Operations:HASSH Client & Server Fingerprint
HASSH SSH 指纹 网络安全 检测

什么是 HASSH?

HASSH 是由 Salesforce 安全研究人员提出的一种网络指纹方法,依据 SSH 在算法协商阶段的行为识别客户端与服务器。名称由 “hash” 与 “SSH” 联想而来,核心做法是对 SSH 握手中的特定参数拼接后计算 MD5

建立 SSH 连接时,客户端与服务器会交换各自支持的密码算法列表。HASSH 从 Key Exchange Init(KEXINIT)等消息中提取这些列表,生成相对稳定的指纹,用于区分不同的 SSH 软件、版本与实现——即便后续信道已加密,握手阶段的信息对旁路观察者仍是可见的。

要点:HASSH 并不“破解”SSH 加密,而是分析握手阶段的公开元数据。这对威胁检测、异常发现和网络监控很有价值。

HASSH 如何计算

HASSH 从 SSH Key Exchange Init(KEXINIT)中取出若干字段,按约定顺序拼接后做 MD5:

  1. 从 SSH 握手中取得客户端或服务器的 KEXINIT
  2. 将四类算法列表按顺序用分号拼接
  3. 对拼接字符串计算 MD5
  4. 得到的哈希即为 HASSH 指纹

四类算法列表

HASSH 组成部分
组成部分 说明 示例取值
Key Exchange(密钥交换) 密钥交换算法 diffie-hellman-group14-sha256, ecdh-sha2-nistp256
Encryption(加密) 对称加密算法 aes128-ctr, aes256-gcm@openssh.com
MAC 消息认证码算法 hmac-sha2-256, hmac-sha1
Compression(压缩) 压缩算法 none, zlib@openssh.com

HASSH 字符串格式

格式: kex_algs;enc_algs;mac_algs;comp_algs 示例 HASSH 字符串: diffie-hellman-group14-sha256,ecdh-sha2-nistp256;aes128-ctr,aes256-ctr;hmac-sha2-256,hmac-sha1;none,zlib@openssh.com MD5(HASSH 指纹): 92674389fa1e47a27ddd8d9b63ecd42b

HASSH 客户端指纹

HASSH Client Fingerprint 标识 SSH 客户端软件。不同客户端(OpenSSH、PuTTY、WinSCP 等)宣告的算法集合与顺序不同,因而指纹不同。

常见客户端与指纹(示意)

SSH 客户端 版本 HASSH 指纹
OpenSSH 7.4 92674389fa1e47a27ddd8d9b63ecd42b
PuTTY 0.70 9f7b9f7b5e3d9b2e0e3e9b7f5e3d9b2e
WinSCP 5.15 a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6
Paramiko 2.7.2 9f71a5d8c5d9b6e9f0e0b3c7a8d6e5f4
说明:上表指纹仅为示例;真实环境随版本与配置变化。识别时应维护并及时更新指纹库。

客户端指纹的典型用途

HASSH 服务器指纹

HASSH Server Fingerprint 标识 SSH 服务端实现,可用于发现未授权 SSH 服务、辅助识别蜜罐,或在组织内清点 SSH 软件版本。

常见服务器与指纹(示意)

SSH 服务器 版本 HASSH 指纹
OpenSSH 7.4 b12d2871a1189eff20364cf5333619ee
Dropbear 2019.78 c3e5f3e5b7d9a6f8e1c4b5a7d9e6f8a1
libssh 0.9.4 d4f8e6a1c9b7e5f3a2d8c6e9b1f4a7d5
AsyncSSH 2.7.0 e9f3b1d6c8a5e7f4b2d9c1e8a6f5b3d7

服务器指纹的典型用途

在 CyberChef 中使用 HASSH

CyberChef 提供两个相关 Operation:

HASSH Client Fingerprint

根据 SSH 客户端的 Key Exchange Init 数据生成 HASSH 指纹。

输入:

来自客户端的 SSH_MSG_KEXINIT 数据包

输出:

标识客户端的 MD5 哈希

HASSH Server Fingerprint

根据 SSH 服务端的 Key Exchange Init 数据生成 HASSH 指纹。

输入:

来自服务端的 SSH_MSG_KEXINIT 数据包

输出:

标识服务端的 MD5 哈希

生成指纹的步骤:

  1. 使用 Wireshark、tcpdump 等抓取 SSH 流量
  2. 提取 SSH Key Exchange Init(KEXINIT)报文
  3. 复制客户端或服务端 KEXINIT 的 hex(或按 Operation 要求输入)
  4. 粘贴到 CyberChef Input
  5. 添加 HASSH Client FingerprintHASSH Server Fingerprint
  6. 查看输出的指纹哈希
  7. 与已知指纹库比对
HASSH 生成示例
输入:SSH 客户端 KEXINIT(Hex,节选)
140000016b...(仅为展示,已截断)
HASSH 算法字符串:
curve25519-sha256,ecdh-sha2-nistp256;aes128-ctr,aes192-ctr,aes256-ctr;hmac-sha2-256,hmac-sha2-512;none
HASSH 指纹(MD5):
92674389fa1e47a27ddd8d9b63ecd42b

该示例指纹对应 OpenSSH 7.4 客户端(示意)。

实际应用

安全运营中心(SOC)

将 HASSH 接入 SIEM 等系统,可例如:

威胁情报

可建立 HASSH 与下列对象的关联库:

事件响应

调查过程中可:

网络监控

持续监控例如:

流量分析与抓包

捕获 KEXINIT

以 Wireshark 为例:

# 捕获过滤器:SSH tcp port 22 # 显示过滤器:SSH KEXINIT ssh.message_code == 20 # 步骤: 1. 在网卡上开始抓包 2. 发起 SSH 连接 3. 过滤 SSH KEXINIT(消息类型 20) 4. 右键数据包 → Copy → …as Hex Dump 5. 粘贴到 CyberChef 按流程处理

自动化指纹

不少安全产品已支持 HASSH,例如:

局限与注意点

指纹稳定性

以下情况可能导致 HASSH 变化:

哈希碰撞

MD5 碰撞在理论上存在,但对 HASSH 实际场景而言概率极低;不同软件版本通常有明显不同的算法组合。

加密流量

HASSH 利用的是握手阶段未加密(或明文可见)的部分,故适用于 SSH;但必须在连接建立过程中抓到相应报文。

对抗与定制实现

了解 HASSH 的攻击者可能:

纵深防御:HASSH 只是整体安全策略中的一环,宜与行为分析、认证监控、异常检测等结合使用。

数据库与资源

公开资源

自建指纹库

可按下述思路维护:

  1. 清点所有授权 SSH 客户端与服务端
  2. 为各环境生成 HASSH
  3. 记录版本与配置
  4. 随升级更新指纹
  5. 视情况与安全社区共享发现(注意脱敏)

CyberChef Recipe 思路

与 HASSH 相关的组合示例:

实践建议

安全监控

事件响应

防护

← 返回操作指南