使用 JARM 轻松识别 Internet 上的恶意服务器

admin 2023年2月3日01:58:09评论86 views字数 4155阅读13分51秒阅读模式

--------------

放在前面:根据这篇文章上周一个国外的安全人员Umair扫描了全网,侦听 443端口的所有主机生成了JARM指纹,需要的自取用。

https://mega.nz/file/EhclELRR#DJKSyU22ZPD-ShYkuUuUdwqUqJJjK2wxQWBxFpNw-No

--------------

正文:

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

使用 JARM 进行扫描提供了识别和分组 Internet 上的恶意服务器的能力。

JARM :  https ://github.com/salesforce/jarm

JARM 指纹可用于:

  • 快速验证组中的所有服务器是否具有相同的 TLS 配置。

  • 通过配置对 Internet 上的不同服务器进行分组,例如,识别服务器可能属于 Google、Salesforce 和 Apple。

  • 识别默认应用程序或基础架构。

  • 识别 Internet 上的恶意软件命令和控制基础设施以及其他恶意服务器。

在这篇博文中,您将了解到:

  • JARM 是如何工作的。

  • 如何使用 JARM 来识别恶意服务器。

  • 从被动网络安全黑名单转变为主动网络安全黑名单。

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

  • JARM 如何用于配置验证和应用程序识别。

JARM 的工作原理

使用 JARM 轻松识别 Internet 上的恶意服务器


    在学习 JARM 的工作原理之前,了解 TLS 的工作原理很重要。TLS 及其前身 SSL 用于加密 Internet 浏览器等常见应用程序的通信,以确保您的数据安全,以及恶意软件,因此它可以隐藏在噪音中。为了启动 TLS 会话,客户端将在 TCP 3 次握手之后发送 TLS Client Hello 消息。此数据包及其生成方式取决于构建客户端应用程序时使用的包和方法。服务器如果接受 TLS 连接,将使用 TLS Server Hello 数据包进行响应。

使用 JARM 轻松识别 Internet 上的恶意服务器

精美的工作原理图

TLS 服务器根据在 TLS 客户端 Hello 数据包中接收到的详细信息制定其服务器 Hello 数据包。为任何给定的客户端问候制定服务器问候的方式可能因应用程序或服务器的构建方式而异,包括:

  • 操作系统

  • 操作系统版本

  • 使用的库

  • 使用的这些库的版本

  • 调用库的顺序

  • 自定义配置


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

下面是在 Wireshark中查看的 TLS 客户端问候和服务器问候响应的示例。


使用 JARM 轻松识别 Internet 上的恶意服务器示例 TLS 客户端 Hello 数据包(左)和服务器 Hello 响应(右)


JARM 通过主动向目标 TLS 服务器发送 10 个 TLS 客户端 Hello 数据包并捕获 TLS 服务器 Hello 响应的特定属性来工作。然后以特定方式对聚合的 TLS 服务器响应进行哈希处理以生成 JARM 指纹。

这不是我们第一次使用 TLS 指纹识别。2017 年,我们开发了 JA3/S,这是一种被动 TLS 客户端/服务器指纹识别方法,现在可以在大多数网络安全工具中找到。但是 JA3/S 是 被动的,通过侦听网络流量对客户端和服务器进行指纹识别,而 JARM 是 主动 服务器指纹扫描仪。您可以在此处找到有关 TLS 协商和 JA3/S 被动指纹识别的更多 信息。

JARM 中的 10 个 TLS 客户端 Hello 数据包经过特殊设计,可在 TLS 服务器中提取唯一响应。JARM 以不同的顺序发送不同的 TLS 版本、密码和扩展,以收集唯一的响应。服务器是否支持 TLS 1.3?它会与 1.2 密码协商 TLS 1.3 吗?如果我们将密码从最弱到最强排序,它会选择哪个密码?这些是 JARM 本质上要求服务器提取最独特的响应的不寻常问题的类型。然后对 10 个响应进行哈希处理以生成 JARM 指纹。

使用 JARM 轻松识别 Internet 上的恶意服务器

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

使用 JARM 轻松识别 Internet 上的恶意服务器


在收到每个 TLS 服务器问候消息后,JARM 会使用 FIN 优雅地关闭连接,以免套接字打开。

JARM 示例:

使用 JARM 轻松识别 Internet 上的恶意服务器


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

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

使用 JARM 轻松识别 Internet 上的恶意服务器


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

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

使用 JARM 轻松识别 Internet 上的恶意服务器

由于 Alexa Top 1M 网站几乎没有重叠,组织内的主机极不可能使用这些 JARM 指纹连接到服务器。我们想进一步深入,所以我们在 SecurityTrails的朋友 使用 JARM 通过端口 443 扫描了整个互联网,数十亿个 IP,并发现了以下内容:

使用 JARM 轻松识别 Internet 上的恶意服务器


在仔细研究 Cobalt Strike时,红队和威胁参与者使用的一种常见的攻击性安全工具,我们发现明显的迹象表明大多数结果确实是 Cobalt Strike,服务器名称包括诸如“redteam.server”“cobaltstrike”之类的东西” “totslegit”,以及其中一些使用相同的 JARM 指纹打开默认 Cobalt Strike 管理端口 50050。 我们认为,这次扫描发现了大部分(如果不是全部)Cobalt Strike C2 在扫描时在端口 443 上监听 Internet

然而,我们确实在列表中发现了误报。不可避免的是,在数十亿 IP 的海洋中,某处的某些合法服务器恰好以与 Cobalt Strike 完全相同的方式进行配置。在列表中,我们发现 JARM 还匹配 Burp Collaborator,这是红队和威胁参与者使用的另一种安全工具,以及各种合法服务器和销售点系统。 (在 Internet 上侦听的销售点系统是另一篇博文的主题……) 因此,虽然我们认为 JARM 确定了大多数(如果不是全部)Cobalt Strike C2 在 Internet 上侦听,但我们也有一些合法的服务器被捕获在网络中。这就像使用一块大磁铁将所有针头从干草堆中拉出,但同时得到了一些干草。

为了将其用作潜在的阻止列表,我们需要过滤掉误报。区分可能的合法结果和恶意结果的一种简单方法是查看服务器的历史记录。恶意 C2 通常是短暂的;它们来来往往很频繁,而合法服务器往往会长时间保持不变。这就是拥有互联网历史数据的供应商真正派上用场的地方。如果与 Cobalt Strike JARM 匹配的服务器的属性在一年多内没有变化,则更有可能是合法的误报,而与 2 个月前不存在的 Cobalt Strike JARM 匹配的服务器则更有可能是恶意的真正的积极。将其与名称、托管服务提供商、证书颁发机构等其他服务器属性相结合。

使用 JARM 轻松识别 Internet 上的恶意服务器

主动阻止列表

使用 JARM 轻松识别 Internet 上的恶意服务器


从历史上看,网络安全行业一直专注于原子妥协指标 (IOC) 的反应性黑名单。也就是说,该行业等到在野外观察到恶意软件活动,对其进行分析,然后获取观察到的 IOC 并将其发布到阻止列表中。问题是,在 IOC 发布时,恶意软件已经分发,安全工程师自动处于防御状态,发挥损害控制的作用。

JARM Internet 扫描与其他元数据和历史分析相结合,可以对使用现有恶意软件的新活动进行主动 IOC 识别。例如,网络安全研究人员或公司可以使用 JARM 扫描 Internet,将已知的 JARM 结果与域和 IP 历史和声誉以及证书详细信息相关联,以构建高保真阻止列表。这使网络安全行业能够在第一个恶意软件甚至分发之前以编程方式构建高保真阻止列表的可能性,从而使威胁参与者在很长一段时间内首次处于防御状态。

部署到检测和响应

可以利用 JARM 进行检测和响应,方法是自动扫描在其网络上观察到的所有目标主机以进行事件丰富,利用汇总表,以便在给定的时间范围内不会多次扫描相同的主机。然后,他们可以针对 JARM 列表运行已知不良查询,或利用该列表在响应场景中进行关联。

为了简化流程,可以利用安全供应商,如 SecurityTrails 或 Shodan,并查询他们的 API 以获取目标 JARM 丰富。安全研究人员和供应商可能更适合维护 TLS 服务器的历史分析,因此可以提供更高级别的元数据以用于衡量主机的风险评分。

安全研究人员和供应商也有很大的潜力利用 JARM 与相关性和历史分析来识别和跟踪恶意服务器。然后,这些数据可用于构建高保真主动阻止列表,以便于使用。但请注意,应特别注意这些阻止列表,以确保将误报降至最低。

JARM 如何用于配置验证和应用程序识别

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

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

使用 JARM 轻松识别 Internet 上的恶意服务器

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

使用 JARM 轻松识别 Internet 上的恶意服务器

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

使用 JARM 轻松识别 Internet 上的恶意服务器


JARM 已开源,可在此处获得:  https ://github.com/salesforce/jarm

原文始发于微信公众号(军机故阁):使用 JARM 轻松识别 Internet 上的恶意服务器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月3日01:58:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用 JARM 轻松识别 Internet 上的恶意服务器http://cn-sec.com/archives/1343067.html

发表评论

匿名网友 填写信息