前言
分析
https://github.com/FoxIO-LLC/ja4
https://blog.foxio.io/ja4-network-fingerprinting-9376fe9ca637
ja4+简介
JA4+提供了一套易于使用和共享的模块化网络指纹,取代了3年的JA2017 TLS指纹标准。这些方法既是人类可读的,也是机器可读的,以促进更有效的威胁搜寻和分析。这些指纹的用例包括扫描威胁参与者、恶意软件检测、会话劫持预防、合规性自动化、位置跟踪、DDoS 检测、威胁参与者分组、反向外壳检测等等
JA4+ 是一组简单而强大的网络指纹,适用于人类和机器可读的多种协议,有助于改进威胁搜寻和安全分析。如果您不熟悉网络指纹识别,我鼓励您阅读我的博客,在这里发布JA3,在这里发布JARM,以及Fastly关于TLS指纹识别状态的优秀博客,其中概述了上述历史及其问题。JA4+ 提供专门的支持,使方法随着行业的变化而保持最新状态。此外,根据大众的需求,正在建立一个包含指纹、相关应用程序和推荐检测逻辑的官方JA4+数据库。
所有JA4+指纹都具有a_b_c格式,分隔构成指纹的不同部分。这允许仅使用 ab 或 ac 或 c 进行搜寻和检测。如果一个人只想对传入到他们应用程序中的 cookie 进行分析,他们只会查看JA4H_c。这种新的局部性保留格式有助于进行更深入、更丰富的分析,同时保持简单、易于使用并允许可扩展性。
初始指纹:
JA4 — TLS 客户端 JA4S — TLS 服务器响应
JA4H — HTTP 客户端
JA4L — 光距离/位置
JA4X — X509 TLS 证书
JA4SSH — SSH 流量
ja4简介
JA4 对客户端进行指纹识别,无论流量是通过 TCP 还是 QUIC 进行的。QUIC是新的HTTP / 3标准使用的协议,它将TLS 1.3封装到UDP数据包中。由于QUIC是由Google开发的,如果一个组织大量使用Google产品,QUIC可以占其网络流量的一半,因此捕获这一点很重要
JA4还清楚地显示了ALPN(应用层协议协商)。这表示应用程序在 TLS 协商完成后要在其中进行通信的协议。“h2” = HTTP/2, “h1” = HTTP/1.1, “dt” = DNS-over-TLS等可以在此处找到可能的 ALPN 的完整列表。这里的“00”表示缺少 ALPN。请注意,ALPN“h2”的存在并不表示浏览器,因为许多物联网设备通过HTTP / 2进行通信。但是,缺少 ALPN 可能表明客户端不是 Web 浏览器。
JA4在应用基本上是静态的生产网络中非常有价值。如果您运行的是全Linux基础架构,那么Windows JA4指纹将值得研究。如果您只运行Exchange服务器,那么突然的python JA4指纹将值得研究。在尝试了解网络流量时,JA4 是分析中一个很好的枢轴点,a_b_c格式允许进行更深入的分析
ja4s简介
客户端发送其 TLS 客户端 Hello 数据包后,服务器将使用其 TLS 服务器 Hello 数据包进行响应。此数据包也以明文形式发送,是根据服务器在客户端 Hello 中选择的可用选项制定的。这包括从可用选项列表中选择的一个密码,以及服务器希望设置的任何扩展名。
因此,服务器 Hello 对于服务器应用程序和发送给它的客户端 Hello 都是唯一的。不同的客户端 Hello 可能会导致来自同一服务器的不同服务器 Hello,从而产生不同的 JA4S。但是,相同的客户端问候将始终从该服务器应用程序生成相同的服务器问候。例如,如果客户端发送 JA4=a_b_c 并且服务器响应 JA4S=d_b_e,则该服务器将始终使用 d_b_e 响应a_b_c。但是,如果另一个应用程序向同一服务器发送不同的客户端问候,例如 JA4=x_y_z,服务器将使用不同的服务器问候 JA4S=t_y_v 进行响应。因此,这是对不同应用程序的不同响应,但对同一应用程序始终是相同的响应
JA4S与JA4结合使用时,可显著提高检测保真度。从仅识别客户端的底层库到识别客户端或恶意软件系列。除了应用程序识别之外,人们还可以查看JA4S_b以了解任何给定网络上正在使用哪些密码,以确保其满足合规性要求。所有这些都可以在不破坏加密的情况下实现
ja4H简介
JA4H 根据每个 HTTP 请求对 HTTP 客户端进行指纹识别。由于大多数流量都是加密的,因此 JA4H 最适合在服务器、代理、WAF、TLS 终止负载均衡器以及解密 TLS 的环境中使用。然而,即使在TLS未解密的环境中,JA4H仍然很有价值,因为许多设备和程序(包括恶意软件)仍然通过HTTP进行通信。例如,IcedID恶意软件投放器不使用TLS。这些恶意软件程序很容易指纹识别
在服务器端,可以使用JA4H_c作为搜寻方法。由于服务器指定客户端应使用哪些 cookie 字段,因此所有客户端都应具有相同的JA4H_c。这里的差异值得研究。还可以使用JA4H_d跟踪用户,并使用JA4H_ab跟踪其客户端应用程序,或者仅使用JA4H_ab识别机器人。
在客户端(代理、NDR、零信任),JA4H 与 JA4 和 JA4S 相结合,可实现极高的保真度应用程序和恶意软件检测。
JA4H有很多用例,特别是当与JA4+的其余部分结合使用时。我将在以后的博客文章中更详细地介绍所有这些
JA4H_ab是所用给定 HTTP 方法的应用程序的指纹。缺少接受语言清楚地表明该应用程序不是人类交互的,因此是机器人。
JA4H_c 是 Cookie 的指纹,对于访问的每个网站会有所不同,但对于该网站或应用程序将是相同的。例如,每个 Plex 服务器或 Okta 服务器将产生相同的JA4H_c。
JA4H_d是用户的指纹,每个用户都不同。这允许在不记录 SPII 的情况下通过网站跟踪用户,从而保持日志记录系统 GDPR 合规性
ja4L简介
JA4L 通过查看连接中前几个数据包之间的延迟来测量客户端和服务器之间的距离。我们使用前几个数据包,因为这些数据包是低级机器生成的,因此在创建和发送这些数据包时处理延迟几乎为零。时间以微秒 (μs) 为单位,1ms = 1000μs,因为微秒是数据包捕获中的标准时间测量单位。
在服务器端将 JA4 与 JA4H 和 JA4L 结合使用,使服务器应用程序能够识别会话劫持或 MiTM 攻击。如果会话 Cookie (JA4H_d) 突然更改位置、操作系统 (JA4L) 和应用程序(JA4 和 JA4H_ab),则撤销会话令牌,要求用户使用 MFA 重新登录是有意义的。对于这种类型的逻辑,应特别注意不要将特定指纹列入允许列表,因为应用程序会随着时间的推移而变化,而是要寻找显着的变化。使用 JA4+ 进行会话劫持检测是 darksail.ai 目前正在研究的事情
如果 JA4L 正在运行服务器端,这将测量客户端与服务器的距离,如果这是运行的客户端,这将测量服务器与客户端的距离。如果这是在网络分流器上运行的,它将测量每个分流器与网络分流器位置的距离
ja4X简介
JA4X 根据 TLS 证书的生成方式进行指纹识别,而不是对证书中的值进行指纹识别。这可以识别用于创建证书的应用程序和设置,这在威胁搜寻中非常有用,因为威胁参与者将创建不同的证书,但倾向于使用相同的方法来创建所述证书,从而具有相同的 JA4X 指纹。
ja4SSH简介
JA4SSH 通过查看 SSH 数据包并在可配置的滚动基础上提供一个小、简单、易于读取的会话指纹来识别 SSH 会话,默认情况下每 200 个数据包。有了这个,我们能够确定SSH连接中发生了什么,即使流量是加密的,并为分析师提供一组简单的指纹进行分析。
请注意,JA4SSH 指纹是 SSH 会话,而不是 SSH 应用程序
简而言之,SSH 数据包根据所使用的密码算法和 HMAC 填充到特定长度。使用 chacha20-poly1305,最终为 36 字节。当客户端在 ssh 终端中键入字符时,该字符将使用填充为 36 字节的数据包进行加密,然后发送到服务器。服务器将在 36 字节数据包中使用相同的字符进行响应,这就是该字符显示在终端窗口中的时间。然后,客户端将发送一个 TCP ACK 数据包,告诉服务器他们已完成上一个事务
JA4SSH可以轻松检测某些类型的SSH活动,并以易于理解的格式提供指纹。将JA4SSH与JA4L相结合可以通知客户端/服务器的距离以及每个客户端/服务器的操作系统
ja4与ja3的区别
https://github.com/salesforce/ja3/blob/master/python/ja3.py
https://github.com/FoxIO-LLC/ja4/blob/main/python/ja4.py
结语
原文始发于微信公众号(编角料):tls指纹之ja4发布!!!