通过JARM在互联网上识别恶意服务器

2022-02-10  本文已影响0人  Threathunter

来源:https://engineering.salesforce.com/easily-identify-malicious-servers-on-the-internet-with-jarm-e095edac525a

JARM是一种主动传输层安全(TLS)服务器指纹识别工具。

使用JARM进行扫描可以识别Internet上的恶意服务器并对其进行分组。

JARM可以在这里找到:https://github.com/salesforce/jarm

一、jam指纹可以用于:

(1)快速验证组中的所有服务器都具有相同的TLS配置。

(2)根据配置对internet上不同的服务器进行分组,例如,识别服务器可能属于谷歌、Salesforce和Apple。

(3)确定默认的应用程序或基础设施。

(4)识别因特网上的恶意软件命令和控制基础设施和其他恶意服务器

在这篇博文中,你将学到:

(1)JARM是如何工作的。

(2)如何使用JARM来识别恶意服务器。

(3)从被动到主动的网络安全黑名单。

(4)如何将JARM部署到您的检测和响应管道中。

(5)如何使用JARM进行配置验证和应用程序识别

二、JARM是如何工作的

在学习JARM如何工作之前,重要的是要了解TLS如何工作。TLS和它的前身,SSL,被用来加密通信的常见应用程序,如互联网浏览器,以保持你的数据安全,和恶意软件,所以它可以隐藏在噪音中。当发起TLS会话时,客户端会在TCP 3路握手后发送TLS client Hello消息。此包及其生成方式取决于构建客户机应用程序时使用的包和方法。服务器,如果接受TLS连接,将响应一个TLS server Hello包。

TLS服务器根据接收到的TLS Client Hello报文的详细信息来生成Server Hello报文。根据应用程序或服务器的构建方式,为任何给定的客户端Hello制定服务器Hello的方式可能有所不同,包括:

操作系统

操作系统版本

库的使用

使用的那些库的版本

调用库的顺序

自定义配置

所有这些因素导致每个TLS服务器以独特的方式响应。这些因素的组合使得不同组织部署的服务器不太可能有相同的响应。

下面是Wireshark中TLS Client Hello和Server Hello响应的一个例子。

JARM的工作原理是主动向目标TLS服务器发送10个TLS Client Hello包,并捕获TLS server Hello响应的特定属性。然后以特定的方式对聚合的TLS服务器响应进行散列,以产生jam指纹。

这不是我们第一次使用TLS指纹识别了。2017年,我们开发了JA3/S,这是一种被动的TLS客户端/服务器指纹识别方法,现在大多数网络安全工具都采用了这种方法。但是JA3/S是被动的,通过监听网络流量对客户端和服务器进行指纹识别,而JARM是主动的服务器指纹扫描仪。你可以在这里找到更多关于TLS协商和JA3/S被动指纹的信息。https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967

JARM中的10个TLS客户端Hello包被特别地精心制作,以在TLS服务器中提取独特的响应。JARM以不同的顺序发送不同的TLS版本、密码和扩展,以收集唯一的响应。服务器是否支持TLS 1.3协议?它会用1.2个密码来协商TLS 1.3吗?如果我们将密码从弱到强排序,它会选择哪个密码?这些是JARM本质上要求服务器提取最独特响应的异常问题类型。然后对这10个响应进行哈希处理以产生jam指纹。

JARM指纹哈希是一种混合模糊哈希,它结合使用可逆和不可逆哈希算法生成一个62字符的指纹。前30个字符由服务器为每个发送的10个客户端hello选择的密码和TLS版本组成。“000”表示服务器拒绝与客户端hello进行协商。剩下的32个字符是服务器发送的累积扩展的截断SHA256哈希值,忽略x509证书数据。在比较JARM指纹时,如果前30个字符相同,但最后32个字符不同,这将意味着服务器具有非常相似的配置,接受相同的版本和密码,尽管由于扩展不同而不完全相同。

组成指纹可逆的第一部分的不同部分

被散列以构成指纹的第二部分的扩展

在接收到每个TLS服务器的hello消息后,JARM优雅地关闭连接,使用一个FIN,以不让套接字打开。

JARM例子:

需要注意的是,JARM是一种高性能的指纹功能,不应将其视为或与安全加密功能混淆。我们设计的JARM指纹既能供人使用,也能供机器使用。这意味着它足够小,可以观察、分享和推特,有足够的空间容纳上下文细节。

三、如何使用JARM来识别恶意服务器

恶意软件命令和控制(C2)和恶意服务器由它们的创建者像其他服务器一样配置,然后部署在它们的舰队中。因此,它们往往会产生独特的jam指纹。例如,当从一个由abuse.ch编译的列表中扫描Trickbot恶意软件C2s时,列表上80%的活ip都会产生相同的jam指纹。当将这个JARM指纹与Alexa前100万个网站进行比较时,没有重叠。

继续对常见的恶意软件和攻击性工具进行测试,发现如下:

由于Alexa前100万个网站几乎没有重叠,组织内的主机连接到带有这些JARM指纹的服务器应该是极其不可能的。我们想深入研究,所以我们在SecurityTrails的朋友扫描了整个互联网,数十亿个ip,通过端口443和JARM,发现了以下内容:

当我们仔细观察Cobalt Strike时,我们发现大多数结果都是Cobalt Strike,服务器名称包括“redteam.server”、“Cobalt Strike”、“totslegit”等。还有一些使用相同的JARM指纹打开默认的Cobalt Strike管理端口50050。我们相信这个扫描发现了大部分,如果不是全部的话,Cobalt Strike C2在扫描的时候在互联网上的443端口监听。

然而,我们确实在列表中发现了假阳性。这是不可避免的,在数十亿的ip海洋中,一些合法的服务器恰好是按照与Cobalt Strike完全相同的方式配置的。在这个列表中,我们发现JARM还匹配Burp Collaborator(红色团队和威胁参与者同样使用的另一个安全工具),以及各种合法服务器和销售点系统。(销售点系统在互联网上监听是另一篇博客文章的主题…)所以,虽然我们认为JARM识别了大部分,如果不是全部,Cobalt Strike C2s在互联网上监听,但我们也发现了一些合法服务器。这就像用一块大磁铁把所有的针从干草堆中拉出来,但同时得到一些干草。

为了使用它作为一个潜在的黑名单,我们需要过滤掉假阳性。区分可能的合法结果和恶意结果的一种简单方法是查看服务器的历史记录。恶意的C2s通常是短暂的;它们来来去去的非常频繁,而合法的服务器往往长时间保持不变。这正是拥有互联网历史数据的供应商真正能派上用场的地方。如果匹配Cobalt Strike JARM的服务器已经有一年多的属性没有变化,这更有可能是一个合法的假阳性,而匹配Cobalt Strike JARM的服务器2个月前不存在,更有可能是一个恶意的真实阳性。结合其他服务器属性,如名称、托管提供商、证书授权等,我们就有了一个高质量的主动屏蔽列表。

四、活动阻塞列表

从历史上看,网络安全行业一直专注于原子指标(ioc)的响应性阻塞列表。也就是说,该行业会等待,直到在野外观察到恶意软件活动,对其进行分析,然后将观察到的ioc数据发布为屏蔽列表。问题是,在IOC公布的时候,恶意软件已经被分发了,安全工程师会自动采取防御措施,进行损害控制。

JARM Internet扫描,加上其他元数据和历史分析,可以主动识别使用现有恶意软件的新活动。例如,网络安全研究人员或公司可以用JARM扫描互联网,将已知的JARM结果与域名、IP历史、声誉以及证书详细信息相关联,从而建立一个高保真屏蔽列表。这使得网络安全行业有可能在第一个恶意软件被发布之前,通过编程建立高保真屏蔽列表,这是很长一段时间以来,威胁行为者第一次处于防御状态

五、部署到检测和响应

可以利用JARM进行检测和响应,通过自动扫描在其网络上观察到的所有目标主机以获取事件丰富event enrichment,利用汇总表,这样就不会在给定的时间范围内多次扫描相同的主机。然后,他们可以对JARM列表运行已知坏的查询,或者在响应场景中利用该列表进行相关性。

为了简化这个过程,可以使用安全供应商,比如SecurityTrails或Shodan,并查询他们的API来充实目的地的JARM。安全研究人员和供应商可能更适合维护TLS服务器的历史分析,因此可以提供更高级别的元数据,用于测量主机的风险评分。

安全研究人员和供应商也有很大的潜力利用带有相关性和历史分析的JARM来识别和跟踪恶意服务器。这些数据可以用来建立高保真的前瞻性阻塞列表 blocklists,以方便消费。但请注意,在这些屏蔽列表中应该格外小心,以确保最低限度的误报。

六、如何使用JARM进行配置验证和应用程序识别

运行相同TLS配置的应用服务器舰队应该具有相同的JARM指纹。人们可以定期用JARM扫描舰队,以确认它们是相同的。如果机队中的服务器产生的JARM指纹与其他服务器不同,那么它就没有运行相同的配置。一家主要的金融机构已经计划使用这种功能来识别不运行最新TLS标准的服务器。

例如,如果我们使用JARM扫描所有由[username]维护的Tor节点,我们发现如下:

这表明在用户维护的100个Tor节点中,有100个节点具有相同的JARM指纹。我们实际上只是对这个用户的Tor节点部署进行了配置漂移检查,发现他们确实有一个维护良好的舰队。但是,如果一个主机的JARM与其他主机不同,那么这意味着它运行的配置不相同,可能需要调查。为了模拟这一点,我将在列表中添加一个随机IP,并再次运行它:

对于某些服务器和设备,JARM指纹对于默认配置和补丁级别似乎也是唯一的。因此,例如,可以将JARM指纹与特定版本的Apache相关联。这方面还有待深入研究,但以下是一些初步发现:

当然,还有很多关于JARM的研究可能性有待探索,所以我鼓励您深入研究并分享您的发现!

https://github.com/salesforce/jarm

上一篇下一篇

猜你喜欢

热点阅读