标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-3372]   作者: 闲云野鸡 发表于: [2023-11-27]  [2023-11-27]被用户:ecawen 修改过

本文共 [140] 位读者顶过

在这篇博客中,我将介绍新的JA4+网络指纹识别方法和它们可以检测的示例。

JA4+提供了一套易于使用和共享的模块化网络指纹,取代了2017年推出的JA3 TLS指纹标准。这些方法都是人类和机器可读的,以促进更有效的威胁搜索和分析。这些指纹的用例包括扫描威胁参与者、恶意软件检测、会话劫持预防、遵从性自动化、位置跟踪、DDoS检测、威胁参与者分组、反向shell检测等等。

初始指纹:

JA4 — TLS Client

JA4S — TLS Server Response

JA4H — HTTP Client

JA4L — Light Distance/Location

JA4X — X509 TLS Certificate

JA4SSH — SSH Traffic

更多的指纹正在开发中,并将在发布后添加到JA4+系列中。

例子:

JA4+可在这里获得:github.com/FoxIO-LLC/ja

什么是JA4+

JA4+是一组简单但功能强大的网络指纹,适用于人类和机器可读的多种协议,有助于改进威胁搜索和安全分析。如果您不熟悉网络指纹识别,我鼓励您阅读我的博客,在这里发布JA3,在这里发布JARM,以及Fastly关于TLS指纹识别状态的优秀博客,其中概述了上述技术的历史及其问题。JA4+带来了专门的支持,使这些方法在行业变化时保持最新。此外,根据大众的需求,一个官方的JA4+指纹数据库、相关应用程序和推荐的检测逻辑正在构建中。

所有JA4+指纹都具有a_b_c格式,用于分隔组成指纹的不同部分。这允许狩猎和检测仅使用ab或ac或c。如果有人只想对进入应用程序的cookie进行分析,他们只会查看JA4H_c。这种新的位置保留格式有助于更深入、更丰富的分析,同时保持简单、易于使用和支持可扩展性。

在这个博客中,我们发布了JA4/S/H/L/X/SSH,简称JA4+。更多的指纹正在开发中,并将在发布后添加到JA4+系列中。

JA4: TLS客户端指纹

TLS用于加密互联网上的绝大多数流量,从网页浏览到流媒体,再到物联网使用分析。甚至恶意软件也使用TLS来隐藏其恶意通信。在TLS连接开始时,客户端发送一个TLS客户端Hello包,该包在加密通信之前以透明方式发送。这个由客户机应用程序生成的数据包通知服务器它支持的密码以及首选的通信方法。因此,TLS Client Hello包在每个应用程序或其底层TLS库中都是唯一的。

JA4查看这个TLS客户机Hello包,并构建一个易于理解和共享的指纹。格式如下:

无论流量是通过TCP还是QUIC, JA4都会对客户机进行指纹识别。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浏览器。

有关实现的更多技术细节以及原始(未散列)指纹的外观可以在github页面上找到。

即使流量是通过TLS 1.3加密的,我们仍然能够获得关于客户端应用程序的大量有价值的信息。请记住,大多数自定义应用程序将具有其底层TLS库的指纹。因此,用Go编写的程序可能具有与其他Go程序匹配的JA4。Python、Java等也是如此,而自定义程序(如VPN客户端、Steam、Slack和Windows函数)将是独一无二的。

JA4生产网络中应用具有极其重要的价值在很大程度上是静态的。如果您运行的是全Linux基础结构,那么Windows JA4指纹将值得研究。如果您只运行Exchange服务器,那么突然出现的python JA4指纹就值得关注了。在试图理解网络流量时,JA4为分析提供了一个很好的支点,而a_b_c格式允许进行更深入的分析。

例如;GreyNoise是一个互联网监听器,可以识别互联网扫描器,并在其产品中实现了JA4+。他们有一个角色,用不断变化的单个TLS密码扫描互联网。这产生了大量完全不同的JA3指纹,但是对于JA4,只有JA4指纹的b部分发生了变化,a和c部分保持不变。因此,GreyNoise可以通过查看JA4_ac指纹(连接a+c,删除b)来跟踪参与者。

JA4S: TLS服务器/会话指纹

客户端发送TLS client Hello报文后,服务器将以其TLS server Hello报文进行响应。这个包也是以明文形式发送的,它是基于服务器对客户机Hello中可用选项的选择而制定的。这包括从可用选项列表中选择的一个密码,以及服务器希望设置的任何扩展。

因此,服务器Hello对于服务器应用程序和发送给它的客户机Hello都是唯一的。不同的客户机Hello可能会导致来自同一服务器的不同的服务器Hello,从而产生不同的JA4S。但是,相同的Client Hello将始终从该服务器应用程序生成相同的Server Hello。例如,如果客户机发送JA4=a_b_c,而服务器响应JA4S=d_b_e,那么服务器将始终用d_b_e响应a_b_c。但是,如果另一个应用程序向同一服务器发送不同的客户机hello(例如JA4=x_y_z),则服务器将响应不同的服务器hello (JA4S=t_y_v)。所以对不同的应用有不同的响应但是对相同的应用总是相同的响应。我将在我的JA3S博客文章中对此进行更详细的介绍。

当JA4S与JA4结合使用时,可以显著提高检测保真度。从仅仅识别客户机的底层库到识别客户机或恶意软件家族。除了应用程序标识之外,您还可以查看JA4S_b,以了解在任何给定网络上使用的密码,以确保它满足合规性需求。所有这些都可以在不破坏加密的情况下实现。

JA4H: HTTP客户端指纹

JA4H基于每个HTTP请求对HTTP客户端进行指纹识别。由于大多数通信都是加密的,因此JA4H最适合用于服务器、代理、waf、TLS终止负载平衡器和解密TLS的环境。然而,即使在不解密TLS的环境中,JA4H仍然很有价值,因为许多设备和程序(包括恶意软件)仍然通过HTTP进行通信。例如,IcedID恶意软件滴管不使用TLS。这些恶意软件程序很容易识别。

JA4H_ab是所使用的给定HTTP方法的应用程序的指纹。缺少Accept-Language清楚地表明应用程序不是人机交互的,因此是一个bot。

JA4H_c是cookie的指纹,对于访问的每个网站都是不同的,但对于该网站或应用程序是相同的。例如,每个Plex服务器或Okta服务器将生成相同的JA4H_c。

JA4H_d是用户的指纹,每个用户不同。这允许在不记录SPII的情况下通过网站跟踪用户,从而使记录系统符合GDPR。

关于技术实现的更多细节可以在我们的github上找到。

在服务器端,可以使用JA4H_c作为搜索方法。当服务器指定客户机应该使用哪些cookie字段时,所有客户机都应该具有相同的JA4H_c。这里的差异值得调查。还可以使用JA4H_d和JA4H_ab跟踪用户及其客户端应用程序,或者仅使用JA4H_ab识别机器人。

在客户端(代理、NDR、零信任),JA4H与JA4和JA4S的结合允许极高保真度的应用程序和恶意软件检测。

JA4H有很多用例,特别是与其他JA4+结合使用时。我将在以后的博客文章中更详细地介绍它们。

JA4L:光位置的距离

JA4L通过查看连接中前几个数据包之间的延迟来测量客户机和服务器之间的距离。我们使用前几个数据包,因为它们是低级机器生成的,因此在创建和发送这些数据包时几乎没有处理延迟。时间的测量单位是微秒(µs), 1ms = 1000µs,因为微秒是数据包捕获中测量时间的标准单位。

如果JA4L在服务器端运行,它将测量客户机到服务器的距离;如果JA4L在客户端运行,它将测量服务器到客户机的距离。如果它在network tap上运行,它将测量每个network tap到network tap位置的距离。

JA4L分为2个度量,客户机和服务器。对于TCP,这些是通过查看TCP的3次握手来确定的。UDP,我们在看QUIC握手。

JA4L-C = {(C-B)/2}_Client TTL

JA4L-S = {(B-A)/2}_Server TTL

在上面的例子中:

JA4L-C = 11_128

JA4L-S = 1759_42

JA4L-C = {(D-C)/2}_Client TTL

JA4L-S = {(B-A)/2}_Server TTL

在上面的例子中:

JA4L-C = 37_128

JA4L-S = 2449_42

距离测量:

使用JA4L,我们可以使用以下公式确定客户端和服务器之间的距离:

D = jc/p

D = Distance

j = JA4L_a

c = Speed of light per µs in fiber (0.128 miles/µs or 0.206km/µs)

p = Propagation delay factor

典型的传播延迟取决于地形和涉及多少网络。

恶劣地形因子Poor terrain factor = 2(周围有山、有水)[出自:jiwo.org]
良好地形系数Good terrain factor = 1.5(公路沿线、海底电缆下)
SpaceX的因素需要测试

我们可以使用TTL来计算跳数,这可以帮助告知传播延迟因子。(下表是一个很好的起点,但还需要进行更多的测试。)

思科,F5,大多数网络设备使用255的TTL

Windows使用的TTL为128

Mac、Linux、手机和IoT设备的TTL为64

Internet上大多数路由的跳数少于64。因此,如果观察到的TTL JA4L_b <64,则估计的初始TTL为64。在65 ~ 128范围内,估计初始TTL为128。如果TTL >128,则估计初始TTL为255。

如果JA4L-S为2449_42,则观察到的TTL为42意味着初始TTL可能为64,即Linux服务器。64-42的跳数是22。

2449 x0.128/1.6 = 195

我们可以得出结论,该服务器距离客户端不到195英里。服务器可能比这更近,但在物理上不可能比这更远,因为光速是恒定的。如果同一主机有多个ja4l,则应以最低的值为最准确的值。

在这个例子中,实际距离是194英里。

利用多个位置,可以被动地将任何客户端或服务器的物理位置三角定位到城市区域。在以后的博客中会有更多的介绍。

此外,JA4L_b (TTL)被动地促进了源操作系统的识别,这是执行取证分析时一个很好的数据点。此外,由于JA4L查看的是第3层数据,因此它适用于加密和未加密的流量。

在服务器端将JA4与JA4H和JA4L结合使用,使服务器应用程序能够识别会话劫持或MiTM攻击。如果会话cookie (JA4H_d)突然改变了位置、操作系统(JA4L)和应用程序(JA4和JA4H_ab),那么撤销会话令牌,要求用户使用MFA重新登录是有意义的。对于这种类型的逻辑,应该特别注意不允许列出特定的指纹,因为应用程序会随着时间的推移而变化,而是寻找剧烈的变化。用JA4+探测会话劫持是一件很隐秘的事情。我现在正在研究。

JA4X: X509 TLS证书指纹

JA4X标识TLS证书生成的方式,而不是证书中的值。这可以识别用于创建证书的应用程序和设置,这在威胁搜索中非常有用,因为威胁参与者将创建不同的证书,但倾向于使用相同的方法来创建所述证书,从而具有相同的JA4X指纹。

SoftEther VPN被某国APT演员亚麻台风(Flax Typhoon)大量使用,以破坏台湾基础设施,并在黑客攻击美国政府电子邮件账户时使用Storm-0558。根据微软的说法,很难将这些连接与合法的HTTPS流量区分开来。但是,由于SoftEther生成其证书的编程方式,因此JA4X是SoftEther独有的。如果将JA4X实现到防火墙中,那么阻止到SoftEther vpn的流量将是微不足道的。通过使用JA4X馈送,阻止来自SoftEther vpn的入站流量也将是微不足道的。

大多数证书颁发组织将使用相同的底层程序来生成和签署所有证书。使用我们在Hunt.io的朋友提供的带有JA4X的Internet扫描数据,我们可以以发行者组织=“Microsoft Corporation”为例。

您可以看到,99.8%的观察到的证书具有相同的JA4X。下一个很相似,但第三个看起来完全不同。让我们以这个异常为中心。

哦,看,都是Cobalt Strike!嗯,这很简单。

使用JA4X在Internet扫描数据上搜索是非常强大的,因为JA4X不是查看证书中的值(在恶意软件的情况下,这些值通常是随机生成的),而是查看证书是如何生成的。

最后一个例子是silver C2,它是一个更新的渗透测试框架,正在取代Cobalt Strike。像大多数优秀的渗透测试框架一样,silver也被威胁参与者大量使用,因为它被设计得很难被检测到。

silver有超过400行专门用于随机生成TLS证书的代码。因此,每个证书都是唯一的,对证书散列进行旋转不会产生任何结果。

但是,每个证书也是由相同的应用程序生成的,因此具有相同的JA4X。Havoc C2使用了大部分Sliver代码,因此它也具有相同的JA4X,但可以通过查看Org名称和邮政编码长度来区分。在任何一种情况下,两者都是恶意软件,JA4X在互联网上是独一无二的。我们在driftneti.o的朋友提供了一个JA4X feed,有了它,我们能够快速识别所有在互联网上监听的默认Sliver C2s。

这些例子展示了如何使用JA4X来检测和阻止对SoftEther, Tor, Metasploit, silver, Havoc, RAT C2s等的流量。请注意,TLS证书在TLS 1.2中是明文发送的,但在TLS 1.3中是加密的,因此JA4X最好用于具有该级别检查的代理服务器、防火墙、MDR、NDR和零信任应用程序。当与JA4、JA4S、JA4H和JA4L结合使用时,JA4X提供了无与伦比的可见性和检测能力。在internet扫描中使用JA4X时,它是pivot分析和查找恶意服务器的优秀工具,特别是与JARM数据结合使用时。

JA4SSH: SSH流量指纹

JA4SSH对SSH会话进行指纹识别,方法是查看SSH数据包,并在可配置的滚动基础上提供一个小的、简单的、易于阅读的会话指纹,默认情况下每200个数据包一次。这样,我们就能够确定SSH连接中发生了什么,即使流量是加密的,并为分析人员提供一组简单的指纹以供分析。

注意,JA4SSH对SSH会话进行指纹识别,而不是SSH应用程序。对于SSH应用程序指纹识别,我建议您看看我的好朋友Ben Reardon编写的hash。

要了解SSH流量是如何工作的,以及如何使用流量分析来识别隧道,我建议您阅读Trisul.org上关于这个主题的优秀博客。

简而言之,SSH数据包根据所使用的密码算法和HMAC填充到特定的长度。对于chacha20-poly1305,最终是36字节。当客户端在ssh终端中输入一个字符时,该字符将被加密,数据包填充为36字节,然后发送给服务器。服务器将在一个36字节的数据包中响应相同的字符,这时字符将显示在终端窗口中。然后,客户机将发送一个TCP ACK包,告诉服务器它们已经完成了前面的事务。正因为如此,一个客户端在终端中输入将是这样的:

注意,TCP ack来自执行SSH请求的一方(客户端),服务器在底部返回命令的输出。用于此操作的JA4SSH如下所示:c36s36_c51s80_c6950。所以你看到36/36和所有的ack都来自客户端,服务器没有发送任何ack,所以从这些我们可以很容易地看出这是一个交互式的转发SSH会话。

在反向SSH shell中,它是SSH over SSH,所以数据包是双重填充+ HMAC。它看起来是这样的:

用于此操作的JA4SSH看起来像:c76s76_c7159_c0s70。我们可以清楚地看到76/76的通用数据包长度,双填充,所有的ack都来自服务器,这意味着是服务器端在进行输入。需要注意的是,SSH提供的是加密消息,而不是加密隧道,因此第4层数据包(TCP ACK数据包)是明文发送的。正是有了这些,我们才能确定哪一方发起了请求。通过使用JA4SSH,现在检测反向SSH shell很简单。

在SCP文件传输中,TCP长度达到最大值,看起来像:

此操作的JA4SH如下所示:c112s1460_c0s179_c2150。注意s1460的最大输出窗口,所有SSH数据包都来自服务器,所有TCP ACK数据包都来自客户端。这很容易表明客户机请求了一个文件,而服务器正在发送它。

在静态环境中,比如银行,每天在相同的系统之间通过SFTP传输文件,这些连接的JA4SH指纹应该保持相似,任何重大偏差,比如看起来像交互式shell,都值得警惕。

JA4SSH可以很容易地检测某些类型的SSH活动,并以易于理解的格式提供指纹。将JA4SSH与JA4L结合可以告知客户机/服务器的距离以及每个客户机/服务器的操作系统。

许可

JA4: TLS客户端指纹是开源的,BSD 3-Clause,与JA3相同。这使得目前使用JA3的任何公司或工具都可以立即升级到JA4,而不会延迟。

JA4+,包括JA4S、JA4L、JA4H、JA4X、JA4SSH,以及所有未来的添加,都是在FoxIO许可证1.1下许可的。该许可对大多数用例是允许的,包括学术和内部业务目的,但不允许货币化。例如,如果一家公司希望在内部使用JA4+来帮助保护他们自己的公司,那么这是允许的。例如,如果一个供应商想要在他们的产品中实现JA4+,他们就需要从我们这里购买OEM许可证。

开源项目可以实现JA4+,只要它们引用了与JA4+相关的FoxIO许可证。项目可以通过不同的方式实现这一点,例如简单地将许可证添加到许可证文件中引用的NOTICE文件中,以Arkime为例。或者通过调用JA4+作为驻留在单独存储库中的插件。

该许可使我们能够以一种开放且易于大多数人使用的方式向世界提供JA4+,同时也为我们提供了一种资助持续支持、新方法研究和即将到来的JA4数据库开发的方式。我们希望每个人都有能力使用JA4+,并且很高兴与供应商和开源项目合作来帮助实现这一目标。

结论

JA4+提供了一套易于使用和共享的模块化网络指纹。这些指纹的用例包括扫描威胁参与者、恶意软件检测、会话劫持预防、遵从性自动化、位置跟踪、DDoS检测、威胁参与者分组、反向shell检测等等。JA4 (TLS客户端指纹识别)是在BSD 3-Clause下授权的,允许运行JA3的工具立即升级,而JA4+ (JA4S/L/H/X/SSH)是在FoxIO许可下授权的,除了货币化之外,大多数用例都是允许的,因为供应商需要购买OEM许可,这将为JA4数据库的进一步研究和开发提供资金(即将到来)。我们计划每季度发布一次新的JA4方法,敬请期待。

JA4+可在这里获得:github.com/FoxIO-LLC/ja


参考文献:

https://medium.com/foxio/ja4-network-fingerprinting-9376fe9ca637

评论

暂无
发表评论
 返回顶部 
热度(140)
 关注微信