翻译:https://medium.com/foxio/ja4t-tcp-fingerprinting-12fb7ce9cb5a
长话短说
- JA4T/S/Scan 是 JA4+ 网络指纹识别工具系列的最新成员。
- 如何使用它阻止超过 60% 的互联网扫描流量
这些工具增加了对客户端和服务器操作系统、设备、特定应用程序、托管特征进行指纹识别的能力,甚至可以识别连接是否通过隧道、VPN 或代理。如果内置到 WAF、防火墙或负载均衡器中,就可以阻止恶意流量。
这其中解释了如何使用基于GreyNoise(网络流量分析工具)数据的已知扫描器的JA4T指纹阻止60%的所有互联网扫描流量,以及如何使用F5 Big-IPs进行阻止。有关详细信息,请参见下面的“阻止互联网扫描器”。
JA4+:https://github.com/FoxIO-LLC/ja4
JA4TScan:https://github.com/FoxIO-LLC/ja4tscan
JA4+ 上的原始博客:https://blog.foxio.io/ja4%2B-network-fingerprinting
这个项目受到了p0f(Michał Zalewski)、Hershel+(Zain Shamsi & Dmitri Loguinov)和gait(Charles Smutz & Brandon Thomas)的启发。你们太棒了!
TCP 复习
尝试使用儿童读物“Go Dog. Go”中的一页来解释TCP。
TCP 连接以 TCP 3 次握手开始。首先,客户端将带有 SYN 标志的 TCP 数据包发送到具有其首选 TCP 通信设置的服务器。如果侦听,服务器将使用 SYN-ACK 数据包及其首选 TCP 通信设置进行响应。然后,客户端将发送 ACK,紧接着发送应用程序请求,该请求可以是 HTTPS、SSH 等。如果服务器正在使用该应用程序协议进行侦听,它将开始应用程序通信。连接以 FIN ACK 关闭,另一方同意 ACK。(译注:这里只描述了tcp单向链接的关闭)
如果一侧未响应 ACK,另一侧将在放弃之前以不同的间隔多次重传数据包。重传的次数和间隔时间取决于操作系统的网络配置。
TCP SYN 数据包和我们正在查看的部分。
初始 SYN 和 SYN-ACK 数据包中的通信设置由操作系统中使用的网络配置确定。窗口大小,即需要 ACK 之前要传输的最大数据量,仅限于两个字节,并且是必需字段。 TCP 选项不是必需的,但每个现代操作系统都使用它。
有许多其他 TCP 选项,一直到类型 254,尽管它们主要在专业环境中使用(例如 SCADA 和大型机)。TCP 选项列表的总长度必须能被 4 整除。这就是 NOP 选项存在的原因,用于填充选项列表的长度以使其成为可被字节数整除的计数。
窗口比例充当窗口大小的乘数,允许实际窗口大小远大于 65535。例如,如果窗口大小为 64240,窗口比例设置为 8,则实际窗口大小为 64240* 2⁸,或 16445440。
最大段大小 (MSS) 是源将接受的每个数据包的最大数据有效负载大小,并且取决于网络连接的开销。例如,最常见的最大分段大小 (MSS) 初始设置为 1460,基于 1500 的以太网 MTU。观察到 1380 的 MSS 表明网络路径(例如隧道或 VPN)上存在开销,需要减少 MSS 以解决开销。不同的网络条件会产生不同的开销:
手动将 MSS 选项设置为高于实际可用大小将导致网络性能不佳、延迟和碎片。
以前的 TCP 指纹识别工具
之前的TCP指纹识别工具,如Nmap(2006年)和p0f(2013年),旨在与已知操作系统进行模糊匹配,因此产生的指纹不是用来记录或用作分析中的支点,而是用于映射回操作系统或设备列表。它们的原始指纹包括像跳数这样的可变值,这些值会随着连接而变化,这使得在行业中共享原始指纹字符串变得困难,因为每个观察者根据他们观察的位置会看到略有不同的变化。这些工具对于它们的用例来说非常棒,在它们发布多年后的今天仍然非常有价值。
p0f
hershel+
Nmap
JA4T:TCP 指纹识别
JA4T 是专门设计用来记录每个会话,突出显示不寻常的网络条件,并作为分析、故障排除、威胁狩猎和流量整形中的支点。它是人类和机器可读的,可共享,并可以增强威胁情报数据。仍能识别操作系统/设备,JA4T 还有助于识别中间代理、VPN、负载均衡器、隧道等。JA4T 可以部署在任何网络设备上,包括 NetFlow 传感器、防火墙、WAF(Web 应用防火墙)、负载均衡器和代理服务器。
每个操作系统都有不同的窗口大小、选项和窗口比例的组合。例如,Microsoft Windows 不使用 TCP 选项 8(时间戳),而所有基于 Unix 的操作系统都使用。 iOS 以 TCP 选项 0(列表结束)结束,而其他操作系统则不然。有趣的是,iOS 添加了另一个选项 0,使其选项列表可以被 4 整除,而不是删除 NOP(选项 1)。这可以追溯到程序员在构建网络代码时做出的决定。
MSS(c部分)的变化,可以帮助识别设备的网络条件。例如,每个移动运营商都为其蜂窝网络的开销设置不同的MSS:
这意味着我们可以识别设备所在的运营商:
当设备通过 VPN 连接时,MSS 以及偶尔的窗口大小会根据 VPN 的开销和所使用的加密密码进行更改。当设备通过代理连接时,代理的 TCP 指纹显示在服务器端,而不是客户端。例如,当 iPhone 通过 iCloud Relay 连接时指纹的完全变化:
JA4TS:TCP 服务器响应指纹
JA4T 基于客户端的 TCP SYN 数据包,而 JA4TS 基于 SYN-ACK 响应。
TCP 服务器对不同客户端 TCP SYN 选项的响应可能不同。这意味着任何给定的服务器都可能根据连接到它的客户端产生多个 JA4TS 指纹。例如,如果客户端不包含 TCP 选项 4 (SACK),则服务器不可能在其 SYN-ACK 响应中包含选项 4。从而使 JA4TS 成为 TCP 服务器响应指纹。要获得服务器本身的准确指纹,请参阅下面部分中的 JA4TScan。
JA4TScan:主动 TCP 服务器指纹识别
JA4TScan 旨在生成任何服务器的可靠 TCP 指纹。它通过使用包含所有常见 TCP 选项的单个 SYN 数据包主动扫描服务器来实现此目的,以从服务器生成最可靠的 TCP SYN-ACK 响应。它不响应来自服务器的 SYN-ACK,而是侦听重传,计算每次重传之间的延迟,并将这些延迟添加到指纹的末尾,如第 e 部分所示。如果观察到 RST 数据包,它也会添加到指纹中并以“R”为前缀。
Wireshark 中看到的 JA4TScan
TCP 重传、重传次数以及它们之间的延迟对于每个操作系统都是唯一的,因为它们基于操作系统网络代码和编写它的工程师的决定。例如,某些物联网设备会在不到一秒的时间内发送多次重传,以尝试尽快重新连接,而其他设备将等待一秒,重传,然后等待两秒,重传,然后等待四秒,重传,等等。
通过合并 TCP 重传响应之间的延迟,我们可以仅使用单个 SYN 数据包构建非常强大的 TCP 指纹。 JA4TScan 将在今年晚些时候添加到 Censys 和其他工具中。
JA4TScan 可作为独立工具使用:https://github.com/FoxIO-LLC/ja4tscan
使用 JA4T 和 GreyNoise 阻止互联网扫器
GreyNoise 是一项将互联网噪音转化为情报的服务。因此,他们可以跨互联网扫描仪关联数据,例如指纹。将 JA4T 与 GreyNoise 关联起来可以对威胁行为者和工具进行分组。
根据 GreyNoise 的数据,过去几周在互联网上扫描的顶级 JA4T 指纹列表如下:
前 5 个 JA4T 指纹占所有互联网扫描流量的 60%,对于这些扫描应用程序来说似乎是唯一的,可以在各自的 WAF、防火墙或负载平衡器上使用 JA4T 进行阻止。这允许基于指纹而不是不断变化的 IP 列表来启发式阻止恶意流量。 F5 在此处提供了一个 iRule(https://github.com/f5devcentral/f5-ja4) 示例,用于在 F5 BIG-IP 上阻止这些 JA4T 指纹。
当基于 JA4T 进行阻塞时,阻塞发生在 SYN 数据包处,从而阻止 SYN-ACK 响应。这意味着在扫描器甚至可以判断端口是否已启动之前,流量就被阻止了。与往常一样,在实施阻止规则之前应仔细考虑,因为这些规则最终也可能会阻止您的攻击面管理 (ASM) 工具。
让我们深入研究一下最后一个JA4T,29200_2–4–8–1–3。一个选项列表2-4-8-1-3表明这是一个基于Unix的操作系统,而MSS为1424表示这些连接有36字节的额外网络开销。这可能是一个未加密的隧道或代理,因为36字节不足以进行像VPN中看到的那样的额外加密。GreyNoise观察到数百个源IP具有这个JA4T指纹,但所有IP都在腾讯IP范围内,并在端口22上监听,有些在端口31401上监听,这是Pi节点加密货币矿机。考虑到MSS的差异性,这些源IP可能实际上并不是流量的真实来源,而是流量正在通过它们反弹。
通过 GreyNoise 数据分析 JA4T,我们发现JA4T攻击者的扫描行为主要集中在SSH及其替代端口上:
他们的第二要务是网络服务器识别。将顶级 JA4H(HTTP 指纹)与此 JA4T 进行比较表明它们使用了一些不同的机器人。有些很简单,而另一些则试图看起来像浏览器,其主要接受语言设置为“zhcn”,即中文。以 ge10nn04zhcn 为例,他们使用 HTTP 1.0 尝试连接到旧设备:
将顶部 JA4(TLS 指纹)与此 JA4T 进行比较可以发现,攻击者在扫描时使用了一些客户端问候语的变体。他们的主要扫描仪是一个定制的全能扫描仪,支持 TLS 1.3,但也支持 69 个密码 - 很好。他们的其他扫描仪支持 TLS 1.2 和 1.1,这表明他们希望通过各种 TLS 客户端问候连接到新旧系统。 t11d6911h9 的 JA4 特别奇怪,因为它是带有 ALPN 扩展的 TLS 1.1,但 ALPN 在 TLS 1.1 时代并不存在:
将该攻击者不寻常的 JA4T 与这些不寻常的 JA4H 或 JA4 指纹相结合将产生出色的阻止或检测规则,因为 JA4+ 指纹的组合可以促进创建检测和阻止规则,而不会出现误报。
我要感谢 GreyNoise、F5 和 Arkime 在这些调查中对 JA4+ 的支持!
结论
JA4T、JA4TS 和 JA4TScan 是 JA4+ 网络指纹套件的最新成员。这些工具增加了对客户端和服务器操作系统、设备、特定应用程序、托管/提供商特征进行指纹识别的能力,检测连接是否通过隧道、VPN 或代理,并帮助解决网络问题。如果内置到 WAF、防火墙或负载平衡器中,则可以根据指纹而不是不断变化的 IP 地址列表来阻止 60% 的互联网扫描流量。
您可以在我们的 GitHub (https://github.com/FoxIO-LLC/ja4) 和许多网络安全产品中找到 JA4+。
JA4TScan 可作为独立工具使用:https://github.com/FoxIO-LLC/ja4tscan
适用于 JA4+ 的 F5 iRules 以及使用 JA4T 阻止流量的示例可在此处获取:https://github.com/f5devcentral/f5-ja4
JA4+ 许可详细信息请参见此处。https://github.com/FoxIO-LLC/ja4/tree/main#licensing
JA4T/S/Scan 是由 John Althouse(https://www.linkedin.com/in/johnalthouse/)在 FoxIO(https://foxio.io/) 创建的。