之前写过文件侧的《狩猎样本的哈希游戏》,可能是也没人爱看细节,网络侧的这个就只简单介绍一下,感兴趣的自行查阅相关内容吧。

狩猎样本的哈希游戏

Avenger,公众号:威胁棱镜狩猎样本的哈希游戏

主动型 TCP/IP 层指纹识别

queso(已被淘汰)

queso是最早的主动指纹识别工具之一,通过发送一系列格式异常或不常见的 TCP 数据包(例如,SYN 包中包含一些不常见的 TCP 选项组合),然后观察目标主机的响应。不同操作系统内核的 TCP/IP 协议栈在处理这些“奇怪”的数据包时会产生不同的响应,据此推断目标的操作系统。

XProbe2(已被淘汰)

XProbe2发送多种探测包,并分析返回的 ICMP 错误消息(如端口不可达、TTL 超时等)、TCP 响应包以及 UDP 端口的状态。在某些情况下,其识别效果比Nmap要好。

SinFP(已被淘汰)

SinFP仅使用一个精心构造的SYN包,通过观察目标返回的 SYN/ACK 包中的 TCP 选项布局、窗口大小、TTL等信息,判断目标操作系统。由于只使用单包,更加的隐蔽和快速。

被动型TCP/IP层指纹识别

p0f

p0f捕获网络流量,通过分析数据包对操作系统、客户端软件等进行识别。例如SYN/ACK包会检查TTL、窗口大小、TCP选项、MSS等。

Zardaxt

Zardaxt分析TCP/IP 协议头中的参数,如 TTL、窗口大小、TCP 标志位和选项等来创建指纹。它的独特之处在于其指纹格式或匹配逻辑,但其核心思想与 p0f 基本一致。

Satori

Satori是操作系统指纹识别工具,支持对 TCP、DHCP、HTTP和SMB数据包进行指纹识别。

MuonFP

MuonFP的原理与p0f基本类似,但由于采用了更好的匹配算法和更全面的指纹库,可以对现代操作系统提供更好的识别效果。基于TCP窗口大小、TCP选项(有序)、TCP最大段长、TCP窗口缩放字段,使用Rust编写也保证了极好的性能。

主动型应用层指纹识别

JA3

JA3通过提取 TLS 客户端在握手时 Client Hello 数据包中的五个关键字段(TLS版本、加密套件、TLS扩展列表、椭圆曲线与椭圆曲线点格式),并将它们拼接成一个字符串,最后计算其 MD5 哈希值作为指纹。

同样的客户端程序(如某个版本的 Chrome、某个恶意软件样本)在发起 TLS 连接时,其 Client Hello 的这些参数通常是固定的,因此它们的 JA3 指纹也是唯一的。注:Google几年前已经将Chrome的Client Hello中TLS扩展顺序随机化,直接摧毁了JA3的稳定性。

JA3S

JA3S通过提取TLS服务端在握手时Server Hello数据包中的三个关键字段(TLS版本、加密套件、TLS扩展列表),并将它们拼接成一个字符串,最后计算其 MD5 哈希值作为指纹。

将JA3与JA3S结合起来,可以唯一地标识一对客户端和服务器之间的加密协商过程。

JA3n

JA3n不再进行MD5哈希计算,而是直接将拼接的字符串作为指纹。这样可以直接从指纹字符串反解出客户端的各项参数,但字符串太长不利于检索和分析。并且将TLS扩展按照顺序进行排列,抵消了乱序操作带来的影响。

JA4

JA4为了克服JA3的局限,将指纹分解成三个部分(协议与版本、客户端能力、连接特征)。JA4更适合进行模糊检索与相似度分析,可以更好地区分可以模仿合法应用软件的恶意软件。

JA4+

JA4+是包含JA4、JA4S、JA4H、JA4X与JA4L在内的一系列指纹,将这些指纹组合起来构成了极难伪造的高精度身份标识。

JARM

JARM向目标 TLS 服务器发送 10 个精心构造的Client Hello 包,每个包使用不同的 TLS 版本、加密套件和选项。然后,它接收服务器的 Server Hello 响应,并从响应中提取特定信息,再将这 10 个响应的特征组合并进行模糊哈希,最终生成 JARM 指纹。只要TLS配置完全相同,其JARM指纹就会相同。

被动型应用层指纹识别

HASSH

HASSH通过提取 SSH握手过程中 SSH_MSG_KEXINIT 数据包中的关键字段(密钥交换算法、加密算法、消息认证码算法、压缩算法),并将它们拼接起来计算 MD5 哈希。

HASSHS

HASSH通过提取 SSH握手过程中 SSH_MSG_KEXINIT 数据包中服务器支持的算法列表,计算其MD5哈希值。不同版本的 OpenSSH 或其他 SSH 服务器会有不同的默认算法配置,从而产生不同的 HASSHS 指纹。

Akamai HTTP/2 Fingerprint

HTTP/2协议在连接建立时,客户端和服务器会交换 SETTINGS 帧,其中动态表大小(SETTINGS_HEADER_TABLE_SIZE)、最大并发流数量(SETTINGS_MAX_CONCURRENT_STREAMS)与初始窗口大小(SETTINGS_INITIAL_WINDOW_SIZE)等参数均可用于指纹计算。

QUIC指纹

QUIC指纹可以从其 Initial 包中的 Client Hello 消息中提取特征,例如传输参数(Transport Parameters)、初始数据包大小、Token 使用情况、版本协商细节等。

RDP Cookie Hashing

在 RDP 连接的初始阶段,客户端会发送一个包含"MSTSHASH=" 的 Cookie。这个 Cookie 的内容与用户名和客户端版本有关,可以作为一种指纹。在握手过程中,客户端和服务器会协商安全协议(标准 RDP 安全、TLS、NLA)、图形渲染能力等,这些协商的细节也可以形成指纹。RDP指纹不仅可以用于识别开放主机,也可以用于检测蜜罐。

相关链接

    https://github.com/skord/p0fhttps://github.com/NikolaiT/zardaxthttps://github.com/xnih/satorihttps://github.com/sundruid/muonfphttps://github.com/salesforce/ja3https://github.com/salesforce/jarmhttps://github.com/FoxIO-LLC/ja4https://github.com/salesforce/hassh

    声明:本文来自威胁棱镜,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。