背景
2024年11月18日,Palo Alto Networks宣布在其防火墙设备运行的操作系统中发现了两个关键漏洞,CVE-2024-0012
和CVE-2024-9474
。第二天,watchTowr发布了一份报告,详细说明了这些漏洞如何被串联起来实现RCE
。(https://labs.watchtowr.com/pots-and-pans-aka-an-sslvpn-palo-alto-pan-os-cve-2024-0012-and-cve-2024-9474/?ref=blog.webscout.io)
在watchTowr报告公开后不久,Arctic Wolf Labs检测到一系列针对Palo Alto Networks设备的入侵行为。他们的发现在11月22日的一篇名为“Arctic Wolf Observes Threat Campaign Targeting Palo Alto Networks Firewall Devices”的博客文章中被报道。
昨天,FoxIO的John Althouse报告称,Arctic Wolf报告的几个IoCs可以被以下JA4H指纹替换:po11cn050000_bb52516416a2_eb49a3237520_*
。基于这个指纹,我们能够确认Arctic Wolf报告的活动的几个受害者,支持其有效性和JA4+套件的强大。
本博客文章剖析了John Althouse提出的指纹,并展示了在Arctic Wolf描述的活动群中观察到的另外两个JA4H指纹。同时给出一个更一般的指纹po11cn050000_bb52516416a2_*
,可以以可接受的误报率的情况下揭露相同的活动。
什么是加密流量指纹
JA3和JA4是网络流量分析中使用的两种指纹技术,它们用于识别和区分不同的客户端和服务器。这些技术特别适用于识别SSL/TLS加密流量中的通信模式,因为加密流量通常隐藏了传统的签名和特征,使得传统的基于内容的检测方法变得无效。
JA3指纹
JA3是一个客户端TLS指纹,它基于客户端在SSL/TLS握手过程中使用的特定参数。JA3指纹包括以下元素:
• 客户端支持的TLS版本
• 客户端支持的密码套件列表
• 扩展(例如,支持的椭圆曲线、EC点格式、应用层协议协商等)
JA3指纹通过将这些参数编码为一个字符串来创建,这个字符串可以用于在不同的网络会话中识别和追踪同一个客户端。
JA4指纹
JA4是JA3的扩展,它不仅包括了JA3的所有信息,还增加了对服务器响应的分析。JA4分为两个部分:
• JA4S(Server):分析服务器在SSL/TLS握手中的响应,包括服务器选择的密码套件和扩展。
• JA4C(Client after Server):分析服务器响应后客户端的行为,包括客户端是否接受服务器的选择,以及任何额外的客户端扩展。
JA4+
JA4+是JA4的进一步扩展,它包括了JA4的所有功能,并且增加了对HTTP请求的分析。JA4+套件包括:
• JA3/S:客户端TLS指纹。
• JA4S/C:服务器TLS指纹和服务器响应后客户端的行为。
• JA2:基于HTTP头部的指纹。
• JA4H:基于HTTP请求方法、头部、Cookie等的指纹。
JA4H
JA4H是JA4+套件中负责指纹识别HTTP客户端请求的部分。它检查HTTP请求的方法、头部名称、Cookie、Cookie值以及其他变量,以创建一个既适合人类阅读也适合机器阅读的指纹。JA4H由四部分组成:
•
JA4H_a
:关注HTTP方法、版本、Cookie和引荐头部等高层次内容。•
JA4H_b
:关注请求中的头部,不包括Cookie和引荐,是一个截断的SHA256值。•
JA4H_c
:Cookie字段的指纹,对于每个网站访问会有所不同,但对于同一网站或应用是相同的。•
JA4H_d
:包括Cookie字段及其值,是最详细的部分。
JA4H指纹的设计使其在检测和威胁狩猎方面具有高度的动态性,可以根据网络流量中的变化灵活调整和识别。以下是一个JA4H指纹的示例及其各部分的具体含义:
po11cn050000_bb52516416a2_eb49a3237520_913d7ea84b88
JA4H_a: po11cn050000
•
po
:表示HTTP方法,po
代表POST
请求。•
11
:表示HTTP版本,11
代表HTTP/1.1。•
cn
:表示是否包含Cookie,cn
表示包含Cookie。•
05
:表示请求中包含的头部数量,05
表示有5个头部。•
0000
:表示请求中包含的特定扩展数量,这里为0。
JA4H_b: bb52516416a2
• 这部分是请求中头部的SHA-256哈希值的前12个字符,不包括Cookie和Referer头部。这个哈希值是根据头部名称和值的特定顺序计算的。例如,如果请求中有
Host
、User-Agent
、Content-Length
、Upgrade-Insecure-Requests
和Accept-Encoding
这些头部,那么这部分就是这些头部的哈希值。
JA4H_c: eb49a3237520
• 这部分是请求中Cookie字段的SHA-256哈希值的前12个字符。如果请求中只有一个名为
SSID
的Cookie,那么这部分就是SSID
的哈希值。
JA4H_d: 913d7ea84b88
• 这部分是请求中Cookie字段及其值的SHA-256哈希值的前12个字符。如果Cookie的名称是
SSID
,并且它的值是some_value
,那么这部分就是SSID=some_value
的哈希值。
通过这个JA4H指纹,我们可以了解到以下信息:
• 这是一个HTTP POST请求。
• 使用的是HTTP/1.1版本。
• 请求中包含了Cookie。
• 请求中有5个头部。
• 头部的特定组合(不包括Cookie和Referer)的哈希值是
bb52516416a2
。• Cookie字段的哈希值是
eb49a3237520
。• Cookie字段及其值的哈希值是
913d7ea84b88
。
这种指纹技术使得即使在加密流量中,也能够通过分析HTTP请求的特征来识别和追踪客户端。
分析JA4H
2024年11月26日,John Althouse在推特上分享了一个JA4H指纹,其值为po11cn050000_bb52516416a2_eb49a3237520_*
:
图1,参考链接:https://twitter.com/4A4133/status/1861482744334725435
为了复现Althouse分享的指纹的JA4H_b和JA4H_c部分,bb52516416a2
和eb49a3237520
,我们必须知道恶意软件设置了哪些头部。在我们这种情况下,恶意软件通过HTTP与其C2通信,所以我们不需要在逆向工程方面做太多工作来揭开头部:
图3:由Arctic Wolf报告的植入物捕获的请求A3092BFA4199DEF7FC525465895EE3784C6FCF55F0A7E9C8436C027E0F41CB4B
上图显示了恶意软件(红色)发送的请求和它从C2服务器(蓝色)收到的响应。从这个我们可以确认恶意软件确实设置了5个头部(不包括Cookie和Referer):Host
、User-Agent
、Content-Length
、Upgrade-Insecure-Requests
和Accept-Encoding
,正如JA4H哈希的第一部分所示,po11cn050000
。有了这个CyberChef食谱,我们现在可以复现JA4H_b:
图3:使用CyberChef复现JA4H_b(https://gchq.github.io/CyberChef/)[1]
Find_/_Replace({'option':'Regex','string':'(Cookie\\:.+|Referer\\:.+)\\r\\n'},'',true,false,true,true)
Find_/_Replace({'option':'Regex','string':'(POST|PUT|GET|HEAD).+\\r\\n'},'',true,false,true,false)
Find_/_Replace({'option':'Regex','string':'\\:.+'},'',true,false,true,false)
Find_/_Replace({'option':'Regex','string':'\\r?\\n'},',',true,false,true,false)
SHA2('256',64,160)
Regular_expression('User defined','^.{0,12}',true,true,false,false,false,false,'List matches')
用于预生产指纹的CyberChef食谱
我们也可以复现JA4H_c,它简单地是恶意软件设置的唯一Cookie “SSID”
的截断SHA256:
import hashlib
hashlib.sha256("SSID".encode()).hexdigest()[:12]
# eb49a3237520
我们还可以使用图3下的食谱来“模糊”其他恶意软件的签名,如果我们怀疑它可能使用不同的头部或头部顺序。我们对恶意软件及其在网络中的行为了解得越多,我们就越能调整JA4H指纹,以实现更强大、更细粒度的检测。
在这种情况下,行动者使用了流行的开源C2框架Sliver。像这样的开源框架提供了独特的检测机会——我们不需要样本,也不需要成为经验丰富的逆向工程师。尽管许多这样的框架提供了检测混淆的“开箱即用”功能,但不良行为者通常不会更改默认配置。例如,Sliver的HTTP C2服务器默认情况下如果没有任何修改,会使用以下响应头部:
serverHeaders := []*clientpb.HTTPC2Header{
{
Method: "GET",
Name: "Cache-Control",
Value: "no-store, no-cache, must-revalidate",
Probability: 100,
},
}
与之前的图3中的代码片段相比,有没有发现熟悉的内容?这些是我们从Arctic Fox分析的样本中观察到的确切Cache-Control
头部值。这本身就是一个检测机会。
转向hunting额外的C2
Webscout利用一套全面的资源来收集我们用于丰富和上下文化IP地址的元数据,其中之一就是JA4+指纹套件(https://blog.webscout.io/introducing-ja4-support-in-webscout-elevating-threat-detection-with-advanced-network-fingerprinting/)。[2]
我们决定在我们的新实施收集中尝试不同的JA4H指纹变体,最终揭露了几个受害者和其他C2,它们与Arctic Wolf报告的同一活动群有关。
通过扩展通配符以丢弃最初报告的指纹的JA4H_c部分,我们揭露了两个在WatchTowr展示如何将两个Palo Alto CVE串联起来实现RCE的同时活跃的额外C2:
172.232.195[.]234
194.182.164[.]149
这两个都是明显的Sliver C2:
• 它们暴露TCP端口31337
• SSL证书发行者值为
CN=operators
• SSL证书主题值为
CN=multiplayer
我们在连接到这些C2时观察到以下两个JA4H哈希:
po11cn050000_bb52516416a2_e1eae9e373ba_913d7ea84b88
po11cn050000_bb52516416a2_a9f2370d1a00_3e59a4bec10d
假设植入物默认只设置一个Cookie,如图3中的样本所观察到的,我们能够迅速暴力破解出导致两个新的JA4H_c指纹的Cookie名称,这些指纹以前未被观察或报告:
cookies = [] # 一个长长的常见Cookie名称列表
for cookie in cookies:
hash = hashlib.sha256(cookie.encode()).hexdigest()[:12] # JA4H_c
if hash == "e1eae9e373ba" or hash == "a9f2370d1a00":
print(f"{hash}:{cookie}")
> e1eae9e373ba:refreshToken
> a9f2370d1a00:csrf-state
这两个都在Sliver默认HTTP C2配置使用的Cookie名称池中,如源代码中所示。
从单个JA4H出发,识别几个其他恶意服务器的能力,即使对底层恶意软件知之甚少,也突显了JA4+套件的一个关键优势:它能够通过微妙的变化、Cookie、头部和其他HTTP请求工件检测恶意的“指纹邻居”。
反思
行为者仍然使用默认的C2配置,使自己容易受到检测。恶意软件开发者竭尽全力掩盖他们的框架,然而粗心的行为者通过不自定义这些设置提供了检测机会。例如,本博客文章研究的恶意软件Sliver,可以通过随机化TLS密码套件积极操纵其JARM指纹:
// 随机化密码套件
allCipherSuites := []uint16{
tls.TLS_RSA_WITH_RC4_128_SHA, //uint16 = 0x0005 1
tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA, //uint16 = 0x000a 2
tls.TLS_RSA_WITH_AES_128_CBC_SHA, //uint16 = 0x002f 3
tls.TLS_RSA_WITH_AES_256_CBC_SHA, //uint16 = 0x0035 4
tls.TLS_RSA_WITH_AES_128_CBC_SHA256, //uint16 = 0x003c 5
tls.TLS_RSA_WITH_AES_128_GCM_SHA256, //uint16 = 0x009c 6
tls.TLS_RSA_WITH_AES_256_GCM_SHA384, //uint16 = 0x009d 7
tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, //uint16 = 0xc007 8
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, //uint16 = 0xc009 9
tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, //uint16 = 0xc00a 10
tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA, //uint16 = 0xc011 11
tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, //uint16 = 0xc012 12
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, //uint16 = 0xc013 13
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, //uint16 = 0xc014 14
tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, //uint16 = 0xc023 15
tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, //uint16 = 0xc027 16
tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, //uint16 = 0xc02f 17
tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, //uint16 = 0xc02b 18
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, //uint16 = 0xc030 19
tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, //uint16 = 0xc02c 20
tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, //uint16 = 0xcca8 21
tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, //uint16 = 0xcca9 22
}
// CipherSuites忽略了密码的顺序,这个随机洗牌
// 是截断的结果,导致从所有密码中随机选择
insecureRand.Shuffle(len(allCipherSuites), func(i, j int) {
allCipherSuites[i], allCipherSuites[j] = allCipherSuites[j], allCipherSuites[i]
})
nCiphers := insecureRand.Intn(len(allCipherSuites)-8) + 8
tlsConfig.CipherSuites = allCipherSuites[:nCiphers]
然而,如果操作者不使用这些反检测功能,这些功能就毫无价值。在可检测性和隐蔽性方面,链条的强度只取决于其最弱的环节——在这种情况下,是对手。
检测工程是一场猫捉老鼠的游戏。一直都是,永远都是。像JA4+套件这样的方法通过直观易懂和操作,赋予了蓝队力量,提供了高度的灵活性来制定强大的签名。对手和他们的工具越先进,将单独弱小的支点链在一起形成强大的组合指纹就越重要。这正是JA4+套件的强项。
另一个要注意的点是恶意软件框架中未加密流量的持续使用。威胁行为者如何能够这样做?因为大多数组织只记录NetFlow数据。NetFlow数据包含有关IP地址、端口、会话长度和字节大小的高级信息,但很少包含第7层流量的详细信息。这使得像JA4+套件这样的检测技术变得无用。只要组织不检查数据包的实际内容,未加密的恶意流量就会继续被忽视。这种对数据包级别的可见性缺乏,允许对手利用明文通信渠道,最小化被检测的风险,给他们一个他们不应该有的优势。
结论
使用JA4H指纹已被证明是一种有效的方法,用于检测和分析恶意活动,特别是在最近Palo Alto Networks防火墙漏洞被利用的背景下。通过对John Althouse分享的指纹po11cn050000_bb52516416a2_eb49a3237520_*
的剖析和理解,我们能够揭露额外的命令和控制服务器,并验证Arctic Wolf报告的威胁活动。
JA4+套件使研究人员和分析师能够从已知指标出发,发现相关的恶意活动。本文展示了如何通过根据已知恶意软件行为对现有指纹进行微妙的更改,找到恶意JA4H“指纹邻居”。
IoCs
Sliver C2 IP:
172.232.195[.]234
194.182.164[.]149
JA4H指纹
po11cn050000_bb52516416a2_e1eae9e373ba_913d7ea84b88
po11cn050000_bb52516416a2_a9f2370d1a00_3e59a4bec10d
参考资料
https://labs.watchtowr.com/pots-and-pans-aka-an-sslvpn-palo-alto-pan-os-cve-2024-0012-and-cve-2024-9474/
https://arcticwolf.com/resources/blog/arctic-wolf-observes-threat-campaign-targeting-palo-alto-networks-firewall-devices/
https://x.com/4A4133/status/1861482744334725435
引用链接
[1]
https://gchq.github.io/CyberChef/): https://gchq.github.io/CyberChef/%EF%BC%89[2]
https://blog.webscout.io/introducing-ja4-support-in-webscout-elevating-threat-detection-with-advanced-network-fingerprinting/)。: https://blog.webscout.io/introducing-ja4-support-in-webscout-elevating-threat-detection-with-advanced-network-fingerprinting/%EF%BC%89%E3%80%82
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...