2021年夏天,研究人员就发现攻击者通过电子邮件传播BazarLoader恶意软件。BazarLoader是基于Windows的恶意软件,主要通过电子邮件等方式传播。攻击者通过恶意软件后门访问受攻击的主机,并对目标域网络环境进行探测,部署Cobalt Strike,绘制网络拓扑图。如果为高价值目标,攻击者就会横向攻击,部署Conti、Ryuk等勒索软件。

最近趋势科技的研究人员又观察到 BazarLoader 在其当前的恶意软件功能中添加了两种新的传播机制。

研究人员继续监控使用信息窃取器BazarLoader(被趋势科技检测为TrojanSpy.Win64)的活动。BAZARLOADER TrojanSpy.Win64。BAZARLOADER, Backdoor.Win64.BAZARLOADER)。其中一种方法涉及使用受攻击的软件安装程序,因为攻击者将 BazarLoader 与合法程序捆绑在一起。第二种方法涉及使用带有 Windows 链接 (LNK) 和动态链接库 (DLL) 负载的 ISO 文件。研究人员观察到美洲是 BazarLoader 攻击的重点区域。

通过受攻击的安装程序传播

在研究人员的一项监控进程中,他们发现了与 BazarLoader 捆绑在一起的 VLC 和 TeamViewer 软件包的受攻击版本。虽然最初的传播机制尚未确定,但这些包的使用可能是更广泛的社会工程技术的一部分,以欺骗用户下载和实施受攻击的安装程序。

1.png

与 BazarLoader 捆绑的受攻击安装程序

当安装程序加载时,它会删除并执行 BazarLoader 可执行文件。这也是与最近的 BazarLoader 传播机制的显着区别之一,其中攻击者似乎偏爱动态链接库 (DLL)。

2.png

当VLC安装程序执行时,捆绑包会删除并执行 ste.exe,这是一个 BazarLoader 可执行文件

研究人员跟踪安装程序在执行 ste.exe 后创建一个进程“vlc-3.0.16-win3..2.tmp”,该进程将后者的可执行文件复制到磁盘并执行它。然后它与命令和控制 (C&C) 服务器连接,并将其自身的副本注入到一个新的暂停的 MS Edge 进程中。

3.png

跟踪 BazarLoader 可执行文件的进程

4.png

ste.exe 可执行文件通过 MS Edge 连接到 C&C 服务器

通过 ISO 文件传播

同时,研究人员还发现了一个滥用ISO文件的传递机制,其中包含的DLL和LNK文件执行其中的BazarLoader DLL。LNK文件使用一个文件夹图标来欺骗用户双击该图标,使该文件能够运行所附的BazarLoader DLL文件。

5.png

LNK 使用文件夹图标诱使用户双击 BazarLoader DLL

然后它调用导出函数“EnterDLL”,这是 BazarLoader 最近使用的一个函数。 Rundll32.exe 加载恶意 DLL 并与 C&C 服务器通信,然后继续生成暂停的 MS Edge 进程以将自身注入其中。

6.png

观察到的EnterDll,它是BazarLoader攻击者以前使用的一个导出函数

7.png

BazarLoader 打开 MS Edge 并将自身注入其中

BazarLoader 活动中使用的传播机制变体的数量继续增加,因为攻击者将其攻击模式多样化以逃避检测。然而,尽管由于单一检测技术的局限性而缺乏新颖性,但这两种技术都值得注意并且仍然有效。例如,虽然已经观察到其他恶意软件使用受攻击的安装程序,但大文件仍然可以挑战检测解决方案,例如沙箱可能会限制文件大小。另一方面,作为快捷方式的LNK文件也可能会因为在快捷方式和恶意文件本身之间创建的额外层而被混淆。

此外,部署用于初始访问的BazarLoader恶意软件是现代勒索软件(如Conti和Ryuk)作为服务子公司的一种众所周知的技术。除了这些已知的勒索软件家族,包括更多的工具进入他们的武器库,其他恶意软件组织和勒索软件运营商可能会采取额外的手段。

感染过程可以分为几个阶段,依次运行以激活内存中的植入程序并允许它在运行时部署额外的有效载荷。本节会简要介绍这些阶段,包括对最终有效载荷的描述。

感染流程始于 PowerShell 滴管。此组件的目的是通过将其安装为服务来暂存链中的后续元素。在此之前,它会创建几个注册表项,将加密数据分配给这些注册表项,其中一个对应于将在后期部署的有效负载。值得注意的是,脚本本身以打包形式交付,因此其完整执行取决于命令行参数,该参数用作解密其大部分逻辑和数据的项。没有这个key,这个阶段之后的流量是不可能恢复的。

下一个阶段是由前者作为服务执行的,目的是作为下一个阶段的另一个前兆。它用于从先前写入的注册表项读取加密数据并解密它,以启动内存植入的执行。我们确定了这个组件的两个变体,一个是用c++开发的,另一个是用 .NET 开发的。后者早在 2021 年 3 月就出现在野外,它使用受感染机器的 GUID 来派生解密项,因此被定制为在该特定系统上执行。另一方面,C++ 变体依赖于硬编码的 AES 256 加密项。

第三阶段是核心植入,由上述加载程序部署后在内存中运行,并注入到新创建的 svchost.exe 进程的地址空间中。它的主要目标是促进与 C2 服务器的通信通道,从而基于嵌入其配置中的 Malleable C2 配置文件,恶意流量伪装成与良性服务通信的伪装。需要注意的是,最初在 Cobalt Strike 框架中提供的 Malleable C2 功能的实现是根据 Cobalt Strike 代码的逆向工程自定义和重写的。

另一个用于隐藏恶意流量的有趣技术是恶意软件使用虚假文件格式标头来封装传递给 C&C 服务器的数据。为此,内存植入程序会合成一个 RIFF、JPEG 或 PNG 格式之一的虚假媒体文件,并将任何以加密形式传送到服务器的数据作为其主体。因此,传输的数据包以图像或音频文件的形式出现,并与网络中的其他合法流量混合在一起。

最后一个阶段是由上述植入程序注入 winlogon.exe 进程的有效载荷,用于向攻击者提供远程控制功能。此类功能包括启动远程控制台或桌面会话,后者支持在目标设备上执行发送的鼠标点击和击键,以及检索反映这些操作输出的定期屏幕截图。此阶段还允许攻击者加载任意 .NET 程序集或执行 PowerShell 命令,以及完全控制受害者的文件系统以搜索、检索或推送文件。

除了最后阶段的有效载荷之外,核心组件还能够在系统上部署 Windows 内核模式驱动程序。这个驱动程序的目的是作为隐藏恶意软件的rootkit,如文件,注册表项和网络流量,从而获得隐身和能力,以避免被安全产品和安全人员检测到。接下来的章节详细介绍了这个驱动程序是如何部署的(即它是如何绕过Windows缓解的,假设它不是数字签名的),以及它为用户模式恶意植入提供了哪些特殊功能。

安全建议

BazarLoader 是一种多功能恶意软件传送机制的例子,它很可能会找到更多方法来适应欺骗更多用户。有关 BazarLoader 用于进入系统的所有其他措施的详细信息,请在点此详细了解。

以下是防御这种威胁的最佳实践:

启用安全解决方案,允许跟踪文件进程的可见性,允许安全团队检测恶意的传出和传入网络通信和流量;

最好从各自的官方网站和平台下载安装程序和更新;

BazarLoader正在演变成一个信息窃取型恶意软件,为其他恶意软件运营商提供初始访问恶意软件即服务(MaaS),并为更具有破坏性的攻击(如现代勒索软件)提供二次有效载荷传播。安全团队必须基于已知数据,对已知威胁的监控和跟踪更加到位,并使用能够对未知威胁进行模式识别和行为监视的多层解决方案。

2021年夏天,研究人员就发现攻击者通过电子邮件传播BazarLoader恶意软件。BazarLoader是基于Windows的恶意软件,主要通过电子邮件等方式传播。攻击者通过恶意软件后门访问受攻击的主机,并对目标域网络环境进行探测,部署Cobalt Strike,绘制网络拓扑图。如果为高价值目标,攻击者就会横向攻击,部署Conti、Ryuk等勒索软件。

最近趋势科技的研究人员又观察到 BazarLoader 在其当前的恶意软件功能中添加了两种新的传播机制。

研究人员继续监控使用信息窃取器BazarLoader(被趋势科技检测为TrojanSpy.Win64)的活动。BAZARLOADER TrojanSpy.Win64。BAZARLOADER, Backdoor.Win64.BAZARLOADER)。其中一种方法涉及使用受攻击的软件安装程序,因为攻击者将 BazarLoader 与合法程序捆绑在一起。第二种方法涉及使用带有 Windows 链接 (LNK) 和动态链接库 (DLL) 负载的 ISO 文件。研究人员观察到美洲是 BazarLoader 攻击的重点区域。

通过受攻击的安装程序传播

在研究人员的一项监控进程中,他们发现了与 BazarLoader 捆绑在一起的 VLC 和 TeamViewer 软件包的受攻击版本。虽然最初的传播机制尚未确定,但这些包的使用可能是更广泛的社会工程技术的一部分,以欺骗用户下载和实施受攻击的安装程序。

1.png

与 BazarLoader 捆绑的受攻击安装程序

当安装程序加载时,它会删除并执行 BazarLoader 可执行文件。这也是与最近的 BazarLoader 传播机制的显着区别之一,其中攻击者似乎偏爱动态链接库 (DLL)。

2.png

当VLC安装程序执行时,捆绑包会删除并执行 ste.exe,这是一个 BazarLoader 可执行文件

研究人员跟踪安装程序在执行 ste.exe 后创建一个进程“vlc-3.0.16-win3..2.tmp”,该进程将后者的可执行文件复制到磁盘并执行它。然后它与命令和控制 (C&C) 服务器连接,并将其自身的副本注入到一个新的暂停的 MS Edge 进程中。

3.png

跟踪 BazarLoader 可执行文件的进程

4.png

ste.exe 可执行文件通过 MS Edge 连接到 C&C 服务器

通过 ISO 文件传播

同时,研究人员还发现了一个滥用ISO文件的传递机制,其中包含的DLL和LNK文件执行其中的BazarLoader DLL。LNK文件使用一个文件夹图标来欺骗用户双击该图标,使该文件能够运行所附的BazarLoader DLL文件。

5.png

LNK 使用文件夹图标诱使用户双击 BazarLoader DLL

然后它调用导出函数“EnterDLL”,这是 BazarLoader 最近使用的一个函数。 Rundll32.exe 加载恶意 DLL 并与 C&C 服务器通信,然后继续生成暂停的 MS Edge 进程以将自身注入其中。

6.png

观察到的EnterDll,它是BazarLoader攻击者以前使用的一个导出函数

7.png

BazarLoader 打开 MS Edge 并将自身注入其中

BazarLoader 活动中使用的传播机制变体的数量继续增加,因为攻击者将其攻击模式多样化以逃避检测。然而,尽管由于单一检测技术的局限性而缺乏新颖性,但这两种技术都值得注意并且仍然有效。例如,虽然已经观察到其他恶意软件使用受攻击的安装程序,但大文件仍然可以挑战检测解决方案,例如沙箱可能会限制文件大小。另一方面,作为快捷方式的LNK文件也可能会因为在快捷方式和恶意文件本身之间创建的额外层而被混淆。

此外,部署用于初始访问的BazarLoader恶意软件是现代勒索软件(如Conti和Ryuk)作为服务子公司的一种众所周知的技术。除了这些已知的勒索软件家族,包括更多的工具进入他们的武器库,其他恶意软件组织和勒索软件运营商可能会采取额外的手段。

感染过程可以分为几个阶段,依次运行以激活内存中的植入程序并允许它在运行时部署额外的有效载荷。本节会简要介绍这些阶段,包括对最终有效载荷的描述。

感染流程始于 PowerShell 滴管。此组件的目的是通过将其安装为服务来暂存链中的后续元素。在此之前,它会创建几个注册表项,将加密数据分配给这些注册表项,其中一个对应于将在后期部署的有效负载。值得注意的是,脚本本身以打包形式交付,因此其完整执行取决于命令行参数,该参数用作解密其大部分逻辑和数据的项。没有这个key,这个阶段之后的流量是不可能恢复的。

下一个阶段是由前者作为服务执行的,目的是作为下一个阶段的另一个前兆。它用于从先前写入的注册表项读取加密数据并解密它,以启动内存植入的执行。我们确定了这个组件的两个变体,一个是用c++开发的,另一个是用 .NET 开发的。后者早在 2021 年 3 月就出现在野外,它使用受感染机器的 GUID 来派生解密项,因此被定制为在该特定系统上执行。另一方面,C++ 变体依赖于硬编码的 AES 256 加密项。

第三阶段是核心植入,由上述加载程序部署后在内存中运行,并注入到新创建的 svchost.exe 进程的地址空间中。它的主要目标是促进与 C2 服务器的通信通道,从而基于嵌入其配置中的 Malleable C2 配置文件,恶意流量伪装成与良性服务通信的伪装。需要注意的是,最初在 Cobalt Strike 框架中提供的 Malleable C2 功能的实现是根据 Cobalt Strike 代码的逆向工程自定义和重写的。

另一个用于隐藏恶意流量的有趣技术是恶意软件使用虚假文件格式标头来封装传递给 C&C 服务器的数据。为此,内存植入程序会合成一个 RIFF、JPEG 或 PNG 格式之一的虚假媒体文件,并将任何以加密形式传送到服务器的数据作为其主体。因此,传输的数据包以图像或音频文件的形式出现,并与网络中的其他合法流量混合在一起。

最后一个阶段是由上述植入程序注入 winlogon.exe 进程的有效载荷,用于向攻击者提供远程控制功能。此类功能包括启动远程控制台或桌面会话,后者支持在目标设备上执行发送的鼠标点击和击键,以及检索反映这些操作输出的定期屏幕截图。此阶段还允许攻击者加载任意 .NET 程序集或执行 PowerShell 命令,以及完全控制受害者的文件系统以搜索、检索或推送文件。

除了最后阶段的有效载荷之外,核心组件还能够在系统上部署 Windows 内核模式驱动程序。这个驱动程序的目的是作为隐藏恶意软件的rootkit,如文件,注册表项和网络流量,从而获得隐身和能力,以避免被安全产品和安全人员检测到。接下来的章节详细介绍了这个驱动程序是如何部署的(即它是如何绕过Windows缓解的,假设它不是数字签名的),以及它为用户模式恶意植入提供了哪些特殊功能。

安全建议

BazarLoader 是一种多功能恶意软件传送机制的例子,它很可能会找到更多方法来适应欺骗更多用户。有关 BazarLoader 用于进入系统的所有其他措施的详细信息,请在点此详细了解。

以下是防御这种威胁的最佳实践:

启用安全解决方案,允许跟踪文件进程的可见性,允许安全团队检测恶意的传出和传入网络通信和流量;

最好从各自的官方网站和平台下载安装程序和更新;

BazarLoader正在演变成一个信息窃取型恶意软件,为其他恶意软件运营商提供初始访问恶意软件即服务(MaaS),并为更具有破坏性的攻击(如现代勒索软件)提供二次有效载荷传播。安全团队必须基于已知数据,对已知威胁的监控和跟踪更加到位,并使用能够对未知威胁进行模式识别和行为监视的多层解决方案。

最近,不知是出于什么原因,Avaddon勒索软件背后的黑客向安全研究人员主动寄出解密密钥。一封假装来自联邦调查局的电子邮件已经发出,其中包含一个密码和一个受密码保护的压缩文件的链接。该文件声称是Avaddon勒索软件的解密密钥。该文件被发送给来自EMSIsoft的名为Fabian Wosar的安全研究员和来自Coverware的Michael Gillespie。这两名研究人员调查了电子邮件所附的软件,并确定它是无害的,并且包含了为成为Avaddon勒索软件受害者的用户提供的解密密钥。Emsisoft与BleepingComputer分享了一个测试解密器,实验证明可以解密一个用Avaddon最近的样本加密的虚拟机。

Avaddon总共发布了2934个解密密钥,每个密钥对应于该组织的一个受害者。Emsisoft发布了一个免费的解密程序,任何该软件的受害者都可以用它来免费恢复他们的文件,该解密程序文件可以在这里访问到。

根据分析,Avaddon组织已经停止了恶意攻击活动。经确认托管在 Tor 网络隐藏服务上的 Avaddon 网站目前已经不可用,这说明该组织的活动已被关闭。

关闭背后的原因仍然未知,但可能与Colonial Pipelin事件以及美国的法律法规有关。今年美国燃油燃气管道运营商Colonial Pipeline遭到黑客攻击,被迫支付赎金。国土安全部发言人萨拉佩克在一份声明中表示,拜登政府正在采取进一步行动,以更好地保护我们国家的关键基础设施。运输安全管理局正与网络安全和基础设施安全局密切合作,与管道行业的公司进行协调,以确保它们采取必要措施,提高自身应对网络威胁的能力,并保护自己的系统。

Avaddon的历史

Avaddon于2020被发现,一开始只是通过垃圾邮件展开攻击,提供勒索软件即服务(RaaS),后来,攻击者开发出恶意广告及远程桌面攻击,甚至是在成功感染企业之后,进一步发动分布式服务阻断攻击以逼迫受害者支付赎金,Avaddon的活跃程度使得美国FBI与澳洲的网络安全中心曾公开警告企业小心来自Avaddon的攻击。

1.png

Avaddon组织首现于某俄罗斯黑客论坛,Avaddon勒索软件的特点有:

C++编写,使用WinAPI,不依赖第三方;支持Windows7以上版本;文件加密算法:AES256 + RSA2048;支持IOCP异步通知机制;支持内网扫描,如SMB扫描、DFS扫描;使用PowerShell的无文件落地;反检测机制,设置注册表来绕过UAC;加密的文件扩展名包括:MS Office文档、PDF、文本、数据库、图像文件和音频文件;多线程文件加密以获得最大性能;加密所有本地和远程和可访问驱动器;IOCP 支持并行文件加密;持续加密新写入的文件和新连接的媒体;能够跨网络共享(SMB、DFS)传播;多种传播选项(脚本、PowerShell、.EXE 有效负载 .DLL);Payload 以管理员身份执行;加密隐藏文件和卷;删除垃圾、卷影副本 (VSS) 和其他还原点;终止禁止加密文件的进程。

为了谋取更多的利益,Avaddon组织会与其他组织合作,比如臭名昭著的Phorpiex僵尸组织。  该模式为典型的AaaS(Access as a Service,访问即服务),即Avaddon勒索团伙通过其他黑产团伙提供肉鸡访问权限来扩大勒索面,从而谋取更多的利益。 后来,Avaddon勒索组织又开发出了使用窃取数据威胁受害者缴纳赎金的获利模式。据统计,已有多个目标被Avaddon勒索组织在暗网上公开隐私文件,比如保险信息和项目档案等。

技术迭代过程

Avaddon 通常通过网络钓鱼活动通过包含混淆的 JPEG 或 ZIP 附件(实际上是带有宏的 JavaScript 或 Excel)的电子邮件进行传播。然而,勒索软件利用了其他几种感染媒介,包括被其他恶意软件(Smoke Loader、Phorpiex/Trik、Rigek 等)下载或在信息系统遭到破坏后直接传播,特别是通过远程桌面协议 (RDP) 和虚拟专用网络 (VPN)。

在一项调查中,Avaddon 的传播主要是依赖缺乏 VPN 更新和不安全的密码,然后获得 Active Directory 域的最大权限,收集和泄露敏感数据,并在多台计算机上部署他的加密软件。

Avaddon 的加密机制避开了 Windows 系统的关键区域,允许受害者使用他们的计算机并目睹损坏。如果赎金未在十天(240 小时)内支付,该组织将在其数据泄露网站上公布所有被盗数据。

3.png

自第一个版本发布以来,Avaddon 勒索软件经过多次修改和改进,特别是在其加密机制和有效载荷方面:

早在 2020 年 6 月,开发人员就已经集成了通过 Powershell 启动有效载荷的能力,以解决防病毒软件对 Avaddon 的改进检测问题;

2021 年 1 月,Avaddon 增加了对 Windows XP 和 2003 的支持;

2021 年 2 月,开发人员修复了勒索软件加密机制中的一个漏洞。

攻击目标

Avaddon 勒索软件针对 IT 服务、批发和卫生等广泛领域的国际公共和私人组织。最近的受害者包括美国公司美国银行系统 (ABS)、比利时咨询公司 Finalyse 以及最近的马耳他政党和保险公司 Group AXA。

2.png

但是,该组织禁止使用者瞄准独立国家联合体 (CIS) 的国家/地区。此外,勒索软件在攻击期间会运行脚本以识别其目标的语言。如果检测到俄语或乌克兰语,则自动停止运行。

最近,不知是出于什么原因,Avaddon勒索软件背后的黑客向安全研究人员主动寄出解密密钥。一封假装来自联邦调查局的电子邮件已经发出,其中包含一个密码和一个受密码保护的压缩文件的链接。该文件声称是Avaddon勒索软件的解密密钥。该文件被发送给来自EMSIsoft的名为Fabian Wosar的安全研究员和来自Coverware的Michael Gillespie。这两名研究人员调查了电子邮件所附的软件,并确定它是无害的,并且包含了为成为Avaddon勒索软件受害者的用户提供的解密密钥。Emsisoft与BleepingComputer分享了一个测试解密器,实验证明可以解密一个用Avaddon最近的样本加密的虚拟机。

Avaddon总共发布了2934个解密密钥,每个密钥对应于该组织的一个受害者。Emsisoft发布了一个免费的解密程序,任何该软件的受害者都可以用它来免费恢复他们的文件,该解密程序文件可以在这里访问到。

根据分析,Avaddon组织已经停止了恶意攻击活动。经确认托管在 Tor 网络隐藏服务上的 Avaddon 网站目前已经不可用,这说明该组织的活动已被关闭。

关闭背后的原因仍然未知,但可能与Colonial Pipelin事件以及美国的法律法规有关。今年美国燃油燃气管道运营商Colonial Pipeline遭到黑客攻击,被迫支付赎金。国土安全部发言人萨拉佩克在一份声明中表示,拜登政府正在采取进一步行动,以更好地保护我们国家的关键基础设施。运输安全管理局正与网络安全和基础设施安全局密切合作,与管道行业的公司进行协调,以确保它们采取必要措施,提高自身应对网络威胁的能力,并保护自己的系统。

Avaddon的历史

Avaddon于2020被发现,一开始只是通过垃圾邮件展开攻击,提供勒索软件即服务(RaaS),后来,攻击者开发出恶意广告及远程桌面攻击,甚至是在成功感染企业之后,进一步发动分布式服务阻断攻击以逼迫受害者支付赎金,Avaddon的活跃程度使得美国FBI与澳洲的网络安全中心曾公开警告企业小心来自Avaddon的攻击。

1.png

Avaddon组织首现于某俄罗斯黑客论坛,Avaddon勒索软件的特点有:

C++编写,使用WinAPI,不依赖第三方;支持Windows7以上版本;文件加密算法:AES256 + RSA2048;支持IOCP异步通知机制;支持内网扫描,如SMB扫描、DFS扫描;使用PowerShell的无文件落地;反检测机制,设置注册表来绕过UAC;加密的文件扩展名包括:MS Office文档、PDF、文本、数据库、图像文件和音频文件;多线程文件加密以获得最大性能;加密所有本地和远程和可访问驱动器;IOCP 支持并行文件加密;持续加密新写入的文件和新连接的媒体;能够跨网络共享(SMB、DFS)传播;多种传播选项(脚本、PowerShell、.EXE 有效负载 .DLL);Payload 以管理员身份执行;加密隐藏文件和卷;删除垃圾、卷影副本 (VSS) 和其他还原点;终止禁止加密文件的进程。

为了谋取更多的利益,Avaddon组织会与其他组织合作,比如臭名昭著的Phorpiex僵尸组织。  该模式为典型的AaaS(Access as a Service,访问即服务),即Avaddon勒索团伙通过其他黑产团伙提供肉鸡访问权限来扩大勒索面,从而谋取更多的利益。 后来,Avaddon勒索组织又开发出了使用窃取数据威胁受害者缴纳赎金的获利模式。据统计,已有多个目标被Avaddon勒索组织在暗网上公开隐私文件,比如保险信息和项目档案等。

技术迭代过程

Avaddon 通常通过网络钓鱼活动通过包含混淆的 JPEG 或 ZIP 附件(实际上是带有宏的 JavaScript 或 Excel)的电子邮件进行传播。然而,勒索软件利用了其他几种感染媒介,包括被其他恶意软件(Smoke Loader、Phorpiex/Trik、Rigek 等)下载或在信息系统遭到破坏后直接传播,特别是通过远程桌面协议 (RDP) 和虚拟专用网络 (VPN)。

在一项调查中,Avaddon 的传播主要是依赖缺乏 VPN 更新和不安全的密码,然后获得 Active Directory 域的最大权限,收集和泄露敏感数据,并在多台计算机上部署他的加密软件。

Avaddon 的加密机制避开了 Windows 系统的关键区域,允许受害者使用他们的计算机并目睹损坏。如果赎金未在十天(240 小时)内支付,该组织将在其数据泄露网站上公布所有被盗数据。

3.png

自第一个版本发布以来,Avaddon 勒索软件经过多次修改和改进,特别是在其加密机制和有效载荷方面:

早在 2020 年 6 月,开发人员就已经集成了通过 Powershell 启动有效载荷的能力,以解决防病毒软件对 Avaddon 的改进检测问题;

2021 年 1 月,Avaddon 增加了对 Windows XP 和 2003 的支持;

2021 年 2 月,开发人员修复了勒索软件加密机制中的一个漏洞。

攻击目标

Avaddon 勒索软件针对 IT 服务、批发和卫生等广泛领域的国际公共和私人组织。最近的受害者包括美国公司美国银行系统 (ABS)、比利时咨询公司 Finalyse 以及最近的马耳他政党和保险公司 Group AXA。

2.png

但是,该组织禁止使用者瞄准独立国家联合体 (CIS) 的国家/地区。此外,勒索软件在攻击期间会运行脚本以识别其目标的语言。如果检测到俄语或乌克兰语,则自动停止运行。

现代 Web 应用程序通常依赖于多台服务器链,它们相互转发HTTP请求。这种转发创建的攻击面越来越受到关注,包括最近流行的缓存攻击和请求走私漏洞。最近的请求走私研究,已经开发出新的方法来隐藏链中某些服务器的 HTTP 请求标头,同时让其他服务器看到它们——这种技术被称为“标头走私”。本文提出了一种新的识别标题走私的技术,并演示了标题走私如何导致缓存攻击、IP限制绕过和请求走私。

Web 应用程序使用的 HTTP 服务器链通常可以建模为由两个组件组成:

◼直接处理来自用户请求的“前端”服务器,这些服务器通常会处理缓存和载荷平衡,或充当 Web 应用程序防火墙 (WAF);

◼前端服务器将请求转发到的“后端”服务器,这是应用程序的服务器端代码运行的地方;

1.jpg

上述模型仅是一个简化,可能有多个前后端服务器,现实中可能有多个前端和后端服务器,而前端和后端服务器本身通常是多个服务器链。

后端服务器通常依赖前端服务器在 HTTP 请求标头中提供的准确信息,例如“X-Forwarded-For”标头中的客户端 IP 地址或“Content-Length”标头中的请求正文长度。为了准确地提供这些信息,前端服务器必须过滤掉客户端提供的这些标头的值,这些值是不可信的。

使用标头走私,可以绕过此过滤并将信息发送到它视为受信任的后端服务器。我将展示这如何导致绕过 AWS API Gateway 中的 IP 限制,以及一个易于利用的缓存攻击问题。然后,我将讨论如何调整用于发现这些漏洞的方法,以基于多个“Content-Length”标头(CL)安全地检测请求走私。

本研究开发的用于识别标头走私漏洞的方法决定了是否可以对标头应用“突变”,使其能够在不被前端服务器识别或处理的情况下潜入后端服务器。突变只是对标头的混淆。以下示例是“Content-Length”标头的变体版本:

2.png

这个方法依赖于这样一个事实:当发送一个带有无效的“Content-Length”标头的请求时,大多数web服务器都会返回一个漏洞:

请求

3.png

响应

4.png

该方法还依赖于在“Content-Length”标头的常规形式和变异形式发送有效值和无效值时对响应的比较。我们首先将常规“Content-Length”标头中的有效和无效值发送到目标:

请求

5.png

响应

6.png

请求

7.png

响应

8.png

由于在“Content-Length”标头中包含垃圾值会导致响应不同,我们可以推断链中至少有一个服务器正在解析这个标头。

此服务器链允许通过在标头名称中的空格后附加字符将标头走私到后端。因此,当我们将请求中的“Content-Length”替换为“Content-Length abcd”并再次发送请求时,我们得到以下结果:

请求

9.png

响应

10.png

请求

11.png

响应

12.png

在比较来自常规和变异的“Content-Length”标头的响应时,有三件重要的事情需要注意。第一个是每个标头中的无效值与有效值引起的响应不同。这表明链中至少有一个服务器将这些标头中的每一个解析为“Content-Length”标头。

其次,当每个标头文件中包含一个有效值时,会返回相同的响应:

请求

13.png

响应

14.png

请求

15.png

响应

16.png

这表明变异标头的存在并没有阻止任一服务器正常解析请求,这种检查对于确保突变不会使请求完全无效非常重要。

最后要注意的重要一点是,与常规标头相比,每个标头中的无效值会导致变异标头中的不同响应:

请求

17.png

响应

18.png

请求

19.png

响应

20.png

这表明,这些漏洞很可能源自链中的不同服务器。换句话说,前端服务器不会像解析常规的“Content-Length” 标头一样解析变体后的“Content-Length”标头,而后端服务器由于存在标头走私,则可以。

示例

绕过限制

◼AWS API 网关 IP 限制

在跨漏洞赏金计划扫描时,我注意到使用 AWS API Gateway 创建的 API 允许通过在空格后将字符附加到标头名称来进行标头走私,例如,将“X-My-Header: test”变异为“X-My-Header abcd: test”。我还注意到前端服务器正在重写“X-Forwarded-For”标头。

API Gateway 允许你使用以下资源策略来限制 API 访问某些 IP 地址:

21.png

此策略将访问限制为仅接受来自 IP 地址 1.2.3.4和私有范围 10.0.0.0/8 的请求。来自其他 IP 地址的请求遇到漏洞:

请求

22.png

响应

23.png

不出所料,简单地向请求添加“X-Forwarded-For”标头与 AWS 的安全控制不匹配:

要求

24.png

回复

25.png

然而,当应用一个允许标头信息走私到这个标头信息的突变时,就会授予访问权限:

请求

26.png

响应

27.png

这允许绕过 IP 限制,但在实际情况下可能很难实现。来自私有范围的地址是显而易见的猜测,但如果这些不被允许,那么就很难猜测一个已被授予访问权限的IP地址。

请求

28.png

响应

29.png

事实证明,在请求中添加标头“x - forward - for abcd: z”可以在API网关中绕过AWS资源策略的IP限制。

AWS Cognito速率限制

在渗透测试期间,我在 AWS Cognito 中发现了一个类似但非常小的漏洞。 Cognito 是一个身份验证提供程序,你可以将其集成到你的应用程序中以帮助处理身份验证。

在短时间内向“ConfirmForgotPassword”或“ForgotPassword”目标发出五次请求后,我的IP地址被暂时封锁。但是,在请求中添加“X-Forwarded-For:[0x0b]z”允许再发出 5 个请求。不幸的是,不可能在此标头中循环不同的值或有效的 IP 地址继续获得五次尝试,这意味着此漏洞的影响很小。然而,它仍然是一个很好的例子,说明如何使用头部走私来绕过速率限制。

缓存攻击

在我向AWS报告后,他们立即修复了IP限制绕过。当重新测试时,我注意到我仍然可以使用相同的变体将标头走私到后端服务器,这让我想知道是否还有其他有趣的标头值得尝试。

API 网关可能在内部使用了一些很有趣的标头,但我无法识别其中的任何一个。真正引人注目的是”Host”标头,如果我试图将这个标头偷偷传递到后端服务器会发生什么。

我使用 API Gateway 设置了两个 API:一个“受害者”API 和一个“攻击者”API:

请求

30.png

响应

31.png

请求

32.png

响应

33.png

当在常规“Host”标头旁边包含一个变异的“Host”标头时,就会出现有趣的行为:

请求

34.png

响应

35.png

API 网关正在从变异的“Host”标头中指定的 API 返回响应。这与大多数 Web 服务器的行为形成对比,后者不会将变异的“Host”标头视为“Host”标头,而是从常规“Host”标头中获取主机。当这样的服务器充当 API 网关前的缓存时,这会变得很有趣,因为它会缓存上述请求的结果,就好像它是对“victim.i.long.lat”的请求一样,即使响应是来自“attacker.i.long.lat”API。

36.jpg

为了演示这一点,我使用“AllViewer”请求策略在 API 网关前面设置了 CloudFront,这会导致所有标头都被转发。发送上述请求,然后请求“https://victim.i.long.lat/a”,显示攻击者API的响应已经存储在受害者API的缓存中:

请求

37.png

响应

38.png

请求

39.png

响应

40.png

这种缓存攻击很容易被利用,因为攻击者可以设置自己的API并返回任意路径的任意内容。这允许他们完全覆盖受害者缓存中的任何条目,有效地允许他们完全控制受害者API的内容。

请求走私

在 Black Hat USA 2020 上,Amit Klein 提出了一个基于 2 个“Content-Length”标头的请求走私(“CL.CL”请求走私)。当使用在同一连接中发送的以下请求将 Squid 用作 Abyss Web 服务器前的反向代理时,可能会触发该漏洞:

41.JPG

第一个请求以绿色显示,包含两个“Content-Length”标头,一个是变异的,另一个是未变异的。 Squid 只会解析未变异的标头文件,并将第一个请求的主体长度取为 33 字节,以蓝色显示。 Squid 然后将第二个请求作为红色显示的请求——对“/doesntexist”的“GET”请求。

另一方面,Abyss 将解析变异和未变异的“Content-Length”标头,并从变异标头中获取 0 字节的值。因此,它认为第二个请求是以蓝色开头的请求——对“/a.html”的“GET”请求。

42.jpg

这样做的总结果是,Abyss 以“/a.html”的内容响应,而 Squid 将此响应缓存到路径“/doesntexist”,从而导致缓存攻击。

Klein 的研究特别有趣,因为它表明 CL.CL 请求走私存在于现代系统中,他提出了一种使用超时安全检测请求走私的简单方法,该方法基于“内容长度”和“传输编码”标头(“CL.TE”和“TE.CL”请求走私)。此方法试图使后端期待比前端转发更多的内容,从而触发后端超时。通过首先扫描 CL.TE 请求走私,可以在测试易受攻击的系统时将影响其他用户请求的风险降至最低。

对 CL.CL 请求走私执行相同操作的尝试可能类似于以下情况:

43.png

对于前端读取未变异的“Content-Length”标头而后端读取变异版本的易受攻击的系统,这通常会导致超时。尽管在 Squid 和 Abyss 设置的情况下,不会导致超时,因为 Abyss 不会在回复“POST”请求之前等待正文发送。

当这个请求被发送到一个易受攻击的系统时,危险就来了,其中前端读取变异的标头,后端读取未变异的版本。前端服务器将转发“z”正文,后端服务器将其视为下一个请求的开始。然后套接字就被攻击了,并且由于后端服务器将请求方法视为例如“zGET”,因此另一个用户的请求失败的可能性很高。

如果我们不知道前端服务器将解析哪个“Content-Length”标头,我们既有可能会在易受攻击的系统中导致超时,也有可能发生套接字攻击,可能导致另一个用户的请求失败。

可以稍微修改用于检测标头走私的方法,以创建安全的 CL.CL 请求走私检测方法。以下示例展示了如何使用这种修改后的方法来检测 Squid 和 Abyss 中的 Klein 漏洞。

首先,使用正在测试的“Content-Length”标头对向目标系统发送 "baseline" 请求:

请求

44.png

响应

45.png

下一步是再发送两次相同的请求,在每个“Content-Length”标头中都有一个垃圾值:

请求

46.png

响应

47.png

请求

48.png

响应

49.png

比较 3 个响应,我们注意到:

包含垃圾值的请求都触发了与"baseline"响应不同的响应,这表明至少有 1 个服务器正在解析每个标头的值。

对包含垃圾值的请求的响应是不同的。这表明漏洞来自不同的服务器,因此链中的不同服务器正在解析不同版本的“Content-Length”标头。

这些情况表明潜在的 CL.CL 请求走私,当调查超出这一点时,重要的是要知道前端服务器正在解析哪个标头,以最大限度地减少使套接字攻击和影响其他用户的机会。

这可以通过发送带有单个未变异的“Content-Length”标头的请求并观察产生的漏洞来实现:

请求

50.png

响应

51.png

由于前端服务器几乎肯定会解析此请求中的“Content-Length”标头,因此产生的漏洞很可能是由前端服务器生成的。通过将此漏洞与该过程中早期生成的漏洞进行比较,我们看到它与在同一请求中发送标头“Content-Length: z”和“Content-Length abcd: 0”时生成的漏洞相同。因此,前端服务器解析未变异的“Content-Length”标头,后端服务器解析变异的1。

这些请求仅表明存在潜在的请求走私漏洞,尽管还远未确定。例如,许多服务器会处理两种形式的“Content-Length”标头,但是当它们具有不同的值时就会出现漏洞,从而无法进行请求走私。

缓解措施

防御这些类型的漏洞可能有些复杂,因为它们依赖于 Web 服务器之间实现的差异,而不是 1 个 Web 服务器中的特定漏洞。

前端服务器应避免转发格式奇怪的标头,这是 AWS 通过 API 网关采用的方法,包括编写测试来验证这种行为。这也阻止了 Cloudflare 在缓存攻击示例中使用,因为它们不会转发名称中带有空格的任何标头。

现代 Web 应用程序通常依赖于多台服务器链,它们相互转发HTTP请求。这种转发创建的攻击面越来越受到关注,包括最近流行的缓存攻击和请求走私漏洞。最近的请求走私研究,已经开发出新的方法来隐藏链中某些服务器的 HTTP 请求标头,同时让其他服务器看到它们——这种技术被称为“标头走私”。本文提出了一种新的识别标题走私的技术,并演示了标题走私如何导致缓存攻击、IP限制绕过和请求走私。

Web 应用程序使用的 HTTP 服务器链通常可以建模为由两个组件组成:

◼直接处理来自用户请求的“前端”服务器,这些服务器通常会处理缓存和载荷平衡,或充当 Web 应用程序防火墙 (WAF);

◼前端服务器将请求转发到的“后端”服务器,这是应用程序的服务器端代码运行的地方;

1.jpg

上述模型仅是一个简化,可能有多个前后端服务器,现实中可能有多个前端和后端服务器,而前端和后端服务器本身通常是多个服务器链。

后端服务器通常依赖前端服务器在 HTTP 请求标头中提供的准确信息,例如“X-Forwarded-For”标头中的客户端 IP 地址或“Content-Length”标头中的请求正文长度。为了准确地提供这些信息,前端服务器必须过滤掉客户端提供的这些标头的值,这些值是不可信的。

使用标头走私,可以绕过此过滤并将信息发送到它视为受信任的后端服务器。我将展示这如何导致绕过 AWS API Gateway 中的 IP 限制,以及一个易于利用的缓存攻击问题。然后,我将讨论如何调整用于发现这些漏洞的方法,以基于多个“Content-Length”标头(CL)安全地检测请求走私。

本研究开发的用于识别标头走私漏洞的方法决定了是否可以对标头应用“突变”,使其能够在不被前端服务器识别或处理的情况下潜入后端服务器。突变只是对标头的混淆。以下示例是“Content-Length”标头的变体版本:

2.png

这个方法依赖于这样一个事实:当发送一个带有无效的“Content-Length”标头的请求时,大多数web服务器都会返回一个漏洞:

请求

3.png

响应

4.png

该方法还依赖于在“Content-Length”标头的常规形式和变异形式发送有效值和无效值时对响应的比较。我们首先将常规“Content-Length”标头中的有效和无效值发送到目标:

请求

5.png

响应

6.png

请求

7.png

响应

8.png

由于在“Content-Length”标头中包含垃圾值会导致响应不同,我们可以推断链中至少有一个服务器正在解析这个标头。

此服务器链允许通过在标头名称中的空格后附加字符将标头走私到后端。因此,当我们将请求中的“Content-Length”替换为“Content-Length abcd”并再次发送请求时,我们得到以下结果:

请求

9.png

响应

10.png

请求

11.png

响应

12.png

在比较来自常规和变异的“Content-Length”标头的响应时,有三件重要的事情需要注意。第一个是每个标头中的无效值与有效值引起的响应不同。这表明链中至少有一个服务器将这些标头中的每一个解析为“Content-Length”标头。

其次,当每个标头文件中包含一个有效值时,会返回相同的响应:

请求

13.png

响应

14.png

请求

15.png

响应

16.png

这表明变异标头的存在并没有阻止任一服务器正常解析请求,这种检查对于确保突变不会使请求完全无效非常重要。

最后要注意的重要一点是,与常规标头相比,每个标头中的无效值会导致变异标头中的不同响应:

请求

17.png

响应

18.png

请求

19.png

响应

20.png

这表明,这些漏洞很可能源自链中的不同服务器。换句话说,前端服务器不会像解析常规的“Content-Length” 标头一样解析变体后的“Content-Length”标头,而后端服务器由于存在标头走私,则可以。

示例

绕过限制

◼AWS API 网关 IP 限制

在跨漏洞赏金计划扫描时,我注意到使用 AWS API Gateway 创建的 API 允许通过在空格后将字符附加到标头名称来进行标头走私,例如,将“X-My-Header: test”变异为“X-My-Header abcd: test”。我还注意到前端服务器正在重写“X-Forwarded-For”标头。

API Gateway 允许你使用以下资源策略来限制 API 访问某些 IP 地址:

21.png

此策略将访问限制为仅接受来自 IP 地址 1.2.3.4和私有范围 10.0.0.0/8 的请求。来自其他 IP 地址的请求遇到漏洞:

请求

22.png

响应

23.png

不出所料,简单地向请求添加“X-Forwarded-For”标头与 AWS 的安全控制不匹配:

要求

24.png

回复

25.png

然而,当应用一个允许标头信息走私到这个标头信息的突变时,就会授予访问权限:

请求

26.png

响应

27.png

这允许绕过 IP 限制,但在实际情况下可能很难实现。来自私有范围的地址是显而易见的猜测,但如果这些不被允许,那么就很难猜测一个已被授予访问权限的IP地址。

请求

28.png

响应

29.png

事实证明,在请求中添加标头“x - forward - for abcd: z”可以在API网关中绕过AWS资源策略的IP限制。

AWS Cognito速率限制

在渗透测试期间,我在 AWS Cognito 中发现了一个类似但非常小的漏洞。 Cognito 是一个身份验证提供程序,你可以将其集成到你的应用程序中以帮助处理身份验证。

在短时间内向“ConfirmForgotPassword”或“ForgotPassword”目标发出五次请求后,我的IP地址被暂时封锁。但是,在请求中添加“X-Forwarded-For:[0x0b]z”允许再发出 5 个请求。不幸的是,不可能在此标头中循环不同的值或有效的 IP 地址继续获得五次尝试,这意味着此漏洞的影响很小。然而,它仍然是一个很好的例子,说明如何使用头部走私来绕过速率限制。

缓存攻击

在我向AWS报告后,他们立即修复了IP限制绕过。当重新测试时,我注意到我仍然可以使用相同的变体将标头走私到后端服务器,这让我想知道是否还有其他有趣的标头值得尝试。

API 网关可能在内部使用了一些很有趣的标头,但我无法识别其中的任何一个。真正引人注目的是”Host”标头,如果我试图将这个标头偷偷传递到后端服务器会发生什么。

我使用 API Gateway 设置了两个 API:一个“受害者”API 和一个“攻击者”API:

请求

30.png

响应

31.png

请求

32.png

响应

33.png

当在常规“Host”标头旁边包含一个变异的“Host”标头时,就会出现有趣的行为:

请求

34.png

响应

35.png

API 网关正在从变异的“Host”标头中指定的 API 返回响应。这与大多数 Web 服务器的行为形成对比,后者不会将变异的“Host”标头视为“Host”标头,而是从常规“Host”标头中获取主机。当这样的服务器充当 API 网关前的缓存时,这会变得很有趣,因为它会缓存上述请求的结果,就好像它是对“victim.i.long.lat”的请求一样,即使响应是来自“attacker.i.long.lat”API。

36.jpg

为了演示这一点,我使用“AllViewer”请求策略在 API 网关前面设置了 CloudFront,这会导致所有标头都被转发。发送上述请求,然后请求“https://victim.i.long.lat/a”,显示攻击者API的响应已经存储在受害者API的缓存中:

请求

37.png

响应

38.png

请求

39.png

响应

40.png

这种缓存攻击很容易被利用,因为攻击者可以设置自己的API并返回任意路径的任意内容。这允许他们完全覆盖受害者缓存中的任何条目,有效地允许他们完全控制受害者API的内容。

请求走私

在 Black Hat USA 2020 上,Amit Klein 提出了一个基于 2 个“Content-Length”标头的请求走私(“CL.CL”请求走私)。当使用在同一连接中发送的以下请求将 Squid 用作 Abyss Web 服务器前的反向代理时,可能会触发该漏洞:

41.JPG

第一个请求以绿色显示,包含两个“Content-Length”标头,一个是变异的,另一个是未变异的。 Squid 只会解析未变异的标头文件,并将第一个请求的主体长度取为 33 字节,以蓝色显示。 Squid 然后将第二个请求作为红色显示的请求——对“/doesntexist”的“GET”请求。

另一方面,Abyss 将解析变异和未变异的“Content-Length”标头,并从变异标头中获取 0 字节的值。因此,它认为第二个请求是以蓝色开头的请求——对“/a.html”的“GET”请求。

42.jpg

这样做的总结果是,Abyss 以“/a.html”的内容响应,而 Squid 将此响应缓存到路径“/doesntexist”,从而导致缓存攻击。

Klein 的研究特别有趣,因为它表明 CL.CL 请求走私存在于现代系统中,他提出了一种使用超时安全检测请求走私的简单方法,该方法基于“内容长度”和“传输编码”标头(“CL.TE”和“TE.CL”请求走私)。此方法试图使后端期待比前端转发更多的内容,从而触发后端超时。通过首先扫描 CL.TE 请求走私,可以在测试易受攻击的系统时将影响其他用户请求的风险降至最低。

对 CL.CL 请求走私执行相同操作的尝试可能类似于以下情况:

43.png

对于前端读取未变异的“Content-Length”标头而后端读取变异版本的易受攻击的系统,这通常会导致超时。尽管在 Squid 和 Abyss 设置的情况下,不会导致超时,因为 Abyss 不会在回复“POST”请求之前等待正文发送。

当这个请求被发送到一个易受攻击的系统时,危险就来了,其中前端读取变异的标头,后端读取未变异的版本。前端服务器将转发“z”正文,后端服务器将其视为下一个请求的开始。然后套接字就被攻击了,并且由于后端服务器将请求方法视为例如“zGET”,因此另一个用户的请求失败的可能性很高。

如果我们不知道前端服务器将解析哪个“Content-Length”标头,我们既有可能会在易受攻击的系统中导致超时,也有可能发生套接字攻击,可能导致另一个用户的请求失败。

可以稍微修改用于检测标头走私的方法,以创建安全的 CL.CL 请求走私检测方法。以下示例展示了如何使用这种修改后的方法来检测 Squid 和 Abyss 中的 Klein 漏洞。

首先,使用正在测试的“Content-Length”标头对向目标系统发送 "baseline" 请求:

请求

44.png

响应

45.png

下一步是再发送两次相同的请求,在每个“Content-Length”标头中都有一个垃圾值:

请求

46.png

响应

47.png

请求

48.png

响应

49.png

比较 3 个响应,我们注意到:

包含垃圾值的请求都触发了与"baseline"响应不同的响应,这表明至少有 1 个服务器正在解析每个标头的值。

对包含垃圾值的请求的响应是不同的。这表明漏洞来自不同的服务器,因此链中的不同服务器正在解析不同版本的“Content-Length”标头。

这些情况表明潜在的 CL.CL 请求走私,当调查超出这一点时,重要的是要知道前端服务器正在解析哪个标头,以最大限度地减少使套接字攻击和影响其他用户的机会。

这可以通过发送带有单个未变异的“Content-Length”标头的请求并观察产生的漏洞来实现:

请求

50.png

响应

51.png

由于前端服务器几乎肯定会解析此请求中的“Content-Length”标头,因此产生的漏洞很可能是由前端服务器生成的。通过将此漏洞与该过程中早期生成的漏洞进行比较,我们看到它与在同一请求中发送标头“Content-Length: z”和“Content-Length abcd: 0”时生成的漏洞相同。因此,前端服务器解析未变异的“Content-Length”标头,后端服务器解析变异的1。

这些请求仅表明存在潜在的请求走私漏洞,尽管还远未确定。例如,许多服务器会处理两种形式的“Content-Length”标头,但是当它们具有不同的值时就会出现漏洞,从而无法进行请求走私。

缓解措施

防御这些类型的漏洞可能有些复杂,因为它们依赖于 Web 服务器之间实现的差异,而不是 1 个 Web 服务器中的特定漏洞。

前端服务器应避免转发格式奇怪的标头,这是 AWS 通过 API 网关采用的方法,包括编写测试来验证这种行为。这也阻止了 Cloudflare 在缓存攻击示例中使用,因为它们不会转发名称中带有空格的任何标头。

ESET 研究人员发现了一种独特且以前未出现过的 Windows 二进制加载程序,与其他此类加载程序不同,它作为服务器运行并在内存中执行接收到的模块。研究人员将这个新的恶意软件命名为Wslink,Wslink是其中一个dll的名称。

在过去两年中,研究人员只在中欧、北美和中东的观察中发现过几次由Wslink发起的攻击。初始攻击向量是未知的,大多数示例都使用了MPRESS,部分代码是虚拟化的。不幸的是,到目前为止,研究人员还无法获得它应该接收的任何模块。根据对比,目前还有已知的恶意软件与它在代码、功能或操作上具有相似性。

接下来,我们将对加载程序和研究人员自己的客户端进行分析,这最初研究人员是用来测试检测方法的。这个客户端的源代码可能对恶意软件分析的初学者感兴趣,它展示了如何重用和与先前分析的恶意软件的现有功能进行交互。

技术分析

Wslink作为服务运行,侦听服务参数(Parameters)项的ServicePort注册表值中指定的端口上的所有网络接口。前面注册Wslink服务的组件是未知的。下图描述了接受到该端口的传入连接的代码。

1.png

接受传入连接的循环的 Hex-Rays 反编译

Hex-Rays号称最强悍的反编译工具。可以反编译VB VC BCB Delphi等等一切 x86/x64代码为C代码。

接受连接之后是使用硬编码的 2048 位公钥进行 RSA 握手,以安全地交换密钥和 IV,以用于 CBC 模式下的 256 位 AES。加密模块是随后收到一个惟一的标识符——签名以及用于解密的附加密钥。

有趣的是,最近接收到的带有其签名的加密模块是全局存储的,这使得它对所有客户端都可用。这种方式节省流量,如果要加载的模块的签名与前一个匹配,则只传输密钥即可。

2.png

接收模块及其签名的 Hex-Rays 反编译

使用MemoryModule库将解密的模块(它是一个常规PE文件)加载到内存中,并最终执行其第一次导出。用于通信、套接字、键和IV的函数以参数的形式传递给导出,使模块能够通过已经建立的连接交换消息。

3.png

在内存中执行接收模块的代码的Hex-Rays反编译

客户端实现

研究人员自己的Wslink客户端实现,如下所述,简单地与修改后的 Wslink 服务器建立连接,并发送一个模块,然后解密和执行该模块。由于研究人员的客户端无法知道在任何给定的Wslink服务器实例中与公钥匹配的私钥,因此研究人员生成了自己的密钥对,并使用来自该密钥对的公钥修改服务器可执行文件,并在研究人员的Wslink客户端实现中使用私钥。

该客户端使研究人员能够复制Wslink的通信和搜索独特的模式,这进一步证实了研究人员的发现,因为研究人员可以模仿它的行为。

最初,一些用于发送/接收消息的函数是从原始示例中获得的,且可以立即使用它们进行实现。

Figure-4.-The-code-for-loading-functions-from-a-Wslink%E2%80%99s-sample.jpg

从Wslink示例中加载函数的代码

随后,研究人员的客户端从文件中读取要使用的私有RSA密钥,并建立到指定IP和端口的连接。预计Wslink的一个实例已经在提供的地址和端口上侦听。当然,其嵌入的公钥也必须替换为已知私钥的公钥。

研究人员的客户端和Wslink服务器继续执行握手,交换用于AES加密的密钥和IV。如下图所示分为三个步骤,发送客户端hello,接收带有IV的对称密钥,并将它们发送回来以验证成功解密。通过反转 Wslink 二进制文件,研究人员了解到hello消息的唯一约束,除了大小240字节之外,就是第二个字节必须为零,因此研究人员将其全部设置为零。

5.png

研究人员客户端的 RSA 握手密码

最后一部分是发送模块。如下图所示,分为以下四个简单步骤:

◼接收到之前加载的模块的签名,研究人员决定在实现中不使用它,因为它对研究人员不重要;

◼发送模块的硬编码签名;

◼从文件中读取模块,加密它并发送;

◼发送模块的加密密钥;

6.png

研究人员的客户端发送模块的代码

7.png

研究人员客户端用于加载和加密模块的代码

研究人员的客户端的完整源代码可以在WslinkClient GitHub存储库中找到。请注意,代码仍然需要大量的加工才能用于攻击,并且从头开始创建另一个加载程序会更容易。

总结

Wslink是一个小巧灵活的加载程序,与研究人员通常看到的加载程序不同,它作为服务器运行,并在内存中执行接收到的模块。

有趣的是,这些模块在通信、秘钥和套接字方面重用了加载程序的函数;因此,因此他们不必启动新的出站连接,Wslink 还具有完善的加密协议来保护交换的数据。

ESET 研究人员发现了一种独特且以前未出现过的 Windows 二进制加载程序,与其他此类加载程序不同,它作为服务器运行并在内存中执行接收到的模块。研究人员将这个新的恶意软件命名为Wslink,Wslink是其中一个dll的名称。

在过去两年中,研究人员只在中欧、北美和中东的观察中发现过几次由Wslink发起的攻击。初始攻击向量是未知的,大多数示例都使用了MPRESS,部分代码是虚拟化的。不幸的是,到目前为止,研究人员还无法获得它应该接收的任何模块。根据对比,目前还有已知的恶意软件与它在代码、功能或操作上具有相似性。

接下来,我们将对加载程序和研究人员自己的客户端进行分析,这最初研究人员是用来测试检测方法的。这个客户端的源代码可能对恶意软件分析的初学者感兴趣,它展示了如何重用和与先前分析的恶意软件的现有功能进行交互。

技术分析

Wslink作为服务运行,侦听服务参数(Parameters)项的ServicePort注册表值中指定的端口上的所有网络接口。前面注册Wslink服务的组件是未知的。下图描述了接受到该端口的传入连接的代码。

1.png

接受传入连接的循环的 Hex-Rays 反编译

Hex-Rays号称最强悍的反编译工具。可以反编译VB VC BCB Delphi等等一切 x86/x64代码为C代码。

接受连接之后是使用硬编码的 2048 位公钥进行 RSA 握手,以安全地交换密钥和 IV,以用于 CBC 模式下的 256 位 AES。加密模块是随后收到一个惟一的标识符——签名以及用于解密的附加密钥。

有趣的是,最近接收到的带有其签名的加密模块是全局存储的,这使得它对所有客户端都可用。这种方式节省流量,如果要加载的模块的签名与前一个匹配,则只传输密钥即可。

2.png

接收模块及其签名的 Hex-Rays 反编译

使用MemoryModule库将解密的模块(它是一个常规PE文件)加载到内存中,并最终执行其第一次导出。用于通信、套接字、键和IV的函数以参数的形式传递给导出,使模块能够通过已经建立的连接交换消息。

3.png

在内存中执行接收模块的代码的Hex-Rays反编译

客户端实现

研究人员自己的Wslink客户端实现,如下所述,简单地与修改后的 Wslink 服务器建立连接,并发送一个模块,然后解密和执行该模块。由于研究人员的客户端无法知道在任何给定的Wslink服务器实例中与公钥匹配的私钥,因此研究人员生成了自己的密钥对,并使用来自该密钥对的公钥修改服务器可执行文件,并在研究人员的Wslink客户端实现中使用私钥。

该客户端使研究人员能够复制Wslink的通信和搜索独特的模式,这进一步证实了研究人员的发现,因为研究人员可以模仿它的行为。

最初,一些用于发送/接收消息的函数是从原始示例中获得的,且可以立即使用它们进行实现。

Figure-4.-The-code-for-loading-functions-from-a-Wslink%E2%80%99s-sample.jpg

从Wslink示例中加载函数的代码

随后,研究人员的客户端从文件中读取要使用的私有RSA密钥,并建立到指定IP和端口的连接。预计Wslink的一个实例已经在提供的地址和端口上侦听。当然,其嵌入的公钥也必须替换为已知私钥的公钥。

研究人员的客户端和Wslink服务器继续执行握手,交换用于AES加密的密钥和IV。如下图所示分为三个步骤,发送客户端hello,接收带有IV的对称密钥,并将它们发送回来以验证成功解密。通过反转 Wslink 二进制文件,研究人员了解到hello消息的唯一约束,除了大小240字节之外,就是第二个字节必须为零,因此研究人员将其全部设置为零。

5.png

研究人员客户端的 RSA 握手密码

最后一部分是发送模块。如下图所示,分为以下四个简单步骤:

◼接收到之前加载的模块的签名,研究人员决定在实现中不使用它,因为它对研究人员不重要;

◼发送模块的硬编码签名;

◼从文件中读取模块,加密它并发送;

◼发送模块的加密密钥;

6.png

研究人员的客户端发送模块的代码

7.png

研究人员客户端用于加载和加密模块的代码

研究人员的客户端的完整源代码可以在WslinkClient GitHub存储库中找到。请注意,代码仍然需要大量的加工才能用于攻击,并且从头开始创建另一个加载程序会更容易。

总结

Wslink是一个小巧灵活的加载程序,与研究人员通常看到的加载程序不同,它作为服务器运行,并在内存中执行接收到的模块。

有趣的是,这些模块在通信、秘钥和套接字方面重用了加载程序的函数;因此,因此他们不必启动新的出站连接,Wslink 还具有完善的加密协议来保护交换的数据。

11月初一个名为“MosesStaff”的神秘黑客组织成功对以色列国防部发动了网络攻击,获取了一些“军队部署信息”,并对外发布了一些声称是从以色列国防部服务器获取的文件和照片。

“MosesStaff”在官网声称,该组织入侵了165个服务器和254个网站,收集了超过11TB的数据,其中包括以色列国防部及国防部长本尼·甘茨的相关信息,还有《以色列邮报》、电子西拉公司和Epsilor公司相关的文件。

技术分析

早在今年 9 月,黑客组织 MosesStaff 就开始以以色列组织为目标,加入了大约一年前由 Pay2Key 和 BlackShadow 攻击组织发起的攻击浪潮。这些攻击者主要是出于政治原因发起的攻击。

m1.jpg

MosesStaff 加密的计算机屏幕截图

在本文中,我们将介绍他们的策略、技术和程序 (TTP),分析他们的两个主要工具 PyDCrypt 和 DCSrv,描述他们的加密方案。

1.MosesStaff 对以色列公司进行的有针对性的攻击中,泄露了数据,并加密了网络。但没有赎金要求,也没有解密选项;他们的动机纯粹是政治性的。

2.对受害者网络的初始访问大概是通过利用 Microsoft Exchange Server等面向公众的基础设施中的已知漏洞实现的。

3.受感染网络中的横向移动是使用基本工具进行的:PsExec、WMIC 和 Powershell。

4.这些攻击利用开源库 DiskCryptor 来执行卷加密并使用引导加载程序锁定受害者的计算机,引导加载程序不允许计算机在没有正确密码的情况下启动。

5.在某些情况下,当前的加密方法可能是可逆的。

感染链

为了获得初始访问权限,攻击者利用了目标中面向外部的基础设施中的已知漏洞。结果,一个webshell出现在以下路径中:

C:\inetpub\wwwroot\aspnet_client\system_web\IISpool.aspx

它是一个基本的密码保护shell,其中将输入密码的MD5与硬编码值52a04efc6a0e7facf34dcc36a6d1ce6f (joker123的MD5哈希值)进行比较。这个webshell是模糊的,基于Github中可用的一个webshell。

2.jpg

混淆的 webshell 密码验证代码

3.webp.jpg

身份验证成功后混淆的 webshell 的屏幕截图

攻击者还将几个额外的工具上传到同一个文件夹:

1.多个批处理脚本可以在特定的远程计算机上启用 SMB 或禁用 Windows 防火墙。

2.PsExec 的一个副本,这是 Microsoft 的一种便携式工具,允许使用任何用户的凭据远程运行进程。

3.OICe.exe,一个小型的 Go 可执行文件,它通过其命令行参数接收命令并执行它。该工具可能会在攻击的早期阶段用于受感染的服务器,以避免执行 cmd 或 PowerShell 等可疑子进程。

攻击者进入受害者网络后,他们收集网络中计算机的信息并将其组合到一个victim_info列表中。这包含域名、计算机名称和管理员凭据,稍后用于编译特制的 PyDCrypt 恶意软件。

该恶意软件通常在 C:\Users\Public\csrss.exe 中路径运行,负责在网络内部自我复制并释放主要的加密载荷 DCSrv。

4.jpg

感染链

PyDCrypt

PyDCrypt 的主要目标是感染其他计算机并确保主要载荷 DCSrv 正确执行。可执行文件是用 Python 编写的,并使用 PyInstaller 进行加密编译,在构建阶段使用 --key 标志。如前所述,攻击者为每个受感染的组织构建一个新的样本,并对从受害者的环境中收集的参数进行硬编码:

5.jpg

在 PyDCrypt 示例中硬编码的字典显示了攻击者在侦察阶段从受害者环境中收集的信息

PyDCrypt 可以接收 2 或 3 个参数。

预期的第一个参数是 113,恶意软件会检查,如果参数不同,它不会继续执行并自行释放。

第二个参数可以是 0 或 1,表示 PyDCrypt 之前是否已经运行过。

第三个参数是可选的,如果提供了,它将用作加密密钥,稍后将作为参数传递给DCSrv。

恶意软件的主要工作流程:

创建锁定文件以防止多个恶意软件实例同时运行。

解密 DCSrv(名为 C:\Users\Public\svchost.exe)到磁盘并执行它。加密算法基于 XOR 和多个 Base64 编码操作。

6.jpg

负责 DCSrv 执行的 PyDCrypt 的反混淆代码

解密并释放 PSExec(名为 ps.exe),解码方法与 DCSrv 相同。

修改防火墙规则以允许在远程计算机上使用 netsh.exe 传入 SMB、Netbios 和 RPC 连接:

7.png

遍历网络中的计算机并感染每台计算机:恶意软件尝试使用已泄露的管理员凭据通过 Powershell、PSExec 或 WMIC等任何可用的工具远程复制和执行 csrss.exe (PyDCrypt)。通过在目标计算机上运行 whoami 或 echo 1233dsfassad 来完成对每种方法的探测。

释放所有创建的工件,例如 ps.exe 二进制文件和 PyDCrypt 可执行文件。

8.jpg

PyDCrypt 单执行树(single execution tree)的取证报告示例

DCSrv

该恶意进程伪装成合法的 svchost.exe 进程,其目的只有一个:加密所有计算机卷,并拒绝对计算机的任何访问。

它包含以下4个资源:

资源 1——包含加密配置,根据代码,还可以包含硬编码的加密密钥。一些配置值是:

引导加载程序自定义消息:Hacked By

在安装 DiskCryptor 驱动程序后重新启动计算机之前等待的时间;

加密卷后重新启动计算机之前等待的时间;

引爆时间:加密开始的确切时间;

资源 2——64 位的签名 DCDrv.sys 驱动程序;

资源 3——32 位签名的 DCDrv.sys 驱动程序;

资源 4——用于安装引导加载程序的加密 DLL;

除了配置之外,执行流程还可以由该工具接收到的命令行参数控制,它可以接受0到2个参数。

如果第一个存在,则它是加密密钥,如果第二个存在,则它是一个标识符,也将与保存在恶意软件配置中的字符串进行比较。一个例子是字符串“113”,在DCSrv和PyDCrypt参数中都使用了它。然而,如前所述,标准的执行链是PyDCrypt将其参数(包括加密密钥)传递给DCSrv。

完整的加密工具是基于一个强大的第三方开源工具DiskCryptor。MosesStaff使用了该工具的几个部分,主要是签名驱动程序和自定义引导加载程序。

该工具的执行流程可以分为三个部分:驱动安装、卷加密和引导加载程序安装。

安装驱动程序

第一个操作是创建两个名为 DCUMSrv 和 DCDrv 的服务,每一个都有不同的目的。

DCUMSrv仅用于持久性机制,用于在启动时使用最初提供的参数运行相同的可执行文件svchos .exe。DCDrv运行提供的过滤驱动程序DCDrv.sys。对于安装,它从资源2或3中提取嵌入式驱动程序(取决于它是运行在32位系统还是64位系统上),并将其内容写入C: windows system32\drivers\DCDrv.sys。然后,它以与DiskCryptor开源项目相同的方式配置注册表参数。

9.webp.jpg

用于持久性机制的服务

10.jpg

安装 DCSrv.sys 过滤器驱动程序

由于驱动程序的有效签名,正如我们在下面看到的,DSE(驱动程序签名强制执行)功能不会停止其安装。

11.webp.jpg

DCDrv.sys 有效签名

当恶意软件完成驱动程序的安装后,它会在几分钟后执行一次重启,以使驱动程序运行。

加密卷

在第二次运行时,恶意软件会等待配置中给出的确切时间,然后才会引爆其加密机制,这是有效载荷是针对每个受害者创建的又一个证明。

12.jpg

检查当前时间并将其与配置中提供的值进行比较的代码

到特定时间时,程序会遍历所有可用驱动器,从 C: 到 Z:,并使用多个线程同时对它们进行加密。

如前所述,核心加密机制基于DiskCryptor驱动程序。因此,它所要做的就是使用打包到 dc_ioctl 结构中的正确参数启动正确的 IOCTL 消息:

13.png

用户模式应用程序和内核模式驱动程序之间有多种通信方法,最流行的方法是使用 Windows API DeviceIoControl 发送称为 IO 控制代码 (IOCTL) 的特殊代码。

在本例中,用于加密驱动器的相关IOCTL代码为DC_CTL_ENCRYPT_START和DC_CTL_ENCRYPT_STEP,参数为:passw1字段中的命令行密钥,device字段中的迭代设备,crypt字段中的CF_AES加密模式。

这个过程可能需要一段时间,所以恶意软件在使用自定义引导加载程序重新启动之前有两个小时的休眠时间。

安装DiskCryptor引导装载程序

这通常在加密过程之前完成,但取决于配置值,也可以等待它结束。事先覆盖引导加载程序的动机很明显,因为即使加密没有完成,对组织的损害也是通过锁定他们的计算机造成的。

引导加载程序安装程序作为资源4嵌入到可执行文件中,并在以/.dll的形式删除它之前进行解密。这个DLL文件有两个名为IsEFI和InstallLoader的导出函数,它们的名称很好地描述了它们的功能。

恶意软件动态加载释放的库并使用引导加载程序文本消息作为参数调用 InstallLoader:

14.jpg

加载引导加载程序安装程序

我们还没有发现引导加载程序本身引入了任何自定义恶意更改。因此,它包含我们希望在带有引导加载程序的卷磁盘加密软件中看到的用于解密主卷的确切功能。

加密方案

勒索软件组织(如Conti、Revil、Lockbit等)几乎无一例外地总是确保他们的加密系统设计良好且无懈可击。他们知道一个严重的错误最终可能会让他们损失数十万美元的潜在收入。不管出于什么原因,包括非经济动机,缺乏使用勒索软件的经验,或者业余编码技能,MosesStaff团队并没有做太多技术上的突破。

密钥生成

MosesStaff 使用三种方法来生成加密机制使用的对称密钥:

作为 PyDCrypt 自动生成的命令行参数;

作为用户提供的命令行参数;

如果配置中的某个位被打开,则密钥在可执行文件中被硬编码;

最常见的方法是运行 PyDCrypt,并根据 MD5 哈希和精心制作的盐值为每个主机名发送专有加密密钥。生成密钥的代码如下所示:

15.png

解密过程

如上所述,简单的基于对称密钥的加密通常不足以形成一个防弹的、难以逆转的加密方案。通过使用上面的分析,我们确实有几个可能反转加密的选项。

第一个也是最重要的选项是查看环境中是否安装了EDR产品日志。一个正确设计的EDR会记录所有的流程创建,以及它们的命令行参数,这是案例中的关键。

16.jpg

使用svchost.exe参数进行解密的复制攻击的EDR解决方案的屏幕截图

第二种选择是提取并逆转最初攻击受害者的PyDCrypt恶意软件。这种方法有点棘手,因为代码在运行完成后会被自行删除。在PyDCrypt示例中,我们可以提取精心制作的哈希函数,该函数为每台计算机生成密钥。

通过使用从这些方法中提取的密钥,我们可以将它们插入启动登录屏幕,并解锁计算机。通过这种方式,我们可以恢复对操作系统的访问,但磁盘仍然是加密的,并且每次重新启动时 DiskCryptor 引导加载程序都处于活动状态。这可以通过创建一个简单的程序来解决,该程序向 DiskCryptor 驱动程序启动适当的 IOCTL,并最终将其从系统中释放。

总结

将网络攻击归因于政治动机的原因很复杂,目前,根据我们掌握的所有信息,我们无法得出任何明确的结论。然而,有一些工具引起了我们的注意:

攻击中使用的工具之一 OICe.exe 在该组织开始其活动的活跃阶段(加密和公开泄密)前几个月从巴勒斯坦提交给 VT。

17.jpg

攻击者在被攻击的服务器上留下的命令代理工具VT提交的屏幕截图

虽然这不是一个强有力的迹象,但它可能会泄露攻击者的起源;有时他们会测试公共服务(如 VT)中的工具,以确保它们足够隐蔽。

网站 moses-staff[.]se 上使用的背景和徽标 PNG 图像文件(所有人都有可用的元数据)是在域在计算机上注册后几天创建或修改的,时区为 GMT+3 ,这是以色列和巴勒斯坦领土在每年这个时候的时区。

18.jpg

来自MosesStaff网站的图像元数据示例

如上所述,MosesStaff 有一种特定的操作方式,即利用面向公众的服务器中的漏洞,然后使用独特的工具和野外操作的组合,使目标网络加密,与之前的 Pay2Key 和 BlackShadow 组织一样,MosesStaff 组织受政治和意识形态的驱使,将目标对准以色列组织。

11月初一个名为“MosesStaff”的神秘黑客组织成功对以色列国防部发动了网络攻击,获取了一些“军队部署信息”,并对外发布了一些声称是从以色列国防部服务器获取的文件和照片。

“MosesStaff”在官网声称,该组织入侵了165个服务器和254个网站,收集了超过11TB的数据,其中包括以色列国防部及国防部长本尼·甘茨的相关信息,还有《以色列邮报》、电子西拉公司和Epsilor公司相关的文件。

技术分析

早在今年 9 月,黑客组织 MosesStaff 就开始以以色列组织为目标,加入了大约一年前由 Pay2Key 和 BlackShadow 攻击组织发起的攻击浪潮。这些攻击者主要是出于政治原因发起的攻击。

m1.jpg

MosesStaff 加密的计算机屏幕截图

在本文中,我们将介绍他们的策略、技术和程序 (TTP),分析他们的两个主要工具 PyDCrypt 和 DCSrv,描述他们的加密方案。

1.MosesStaff 对以色列公司进行的有针对性的攻击中,泄露了数据,并加密了网络。但没有赎金要求,也没有解密选项;他们的动机纯粹是政治性的。

2.对受害者网络的初始访问大概是通过利用 Microsoft Exchange Server等面向公众的基础设施中的已知漏洞实现的。

3.受感染网络中的横向移动是使用基本工具进行的:PsExec、WMIC 和 Powershell。

4.这些攻击利用开源库 DiskCryptor 来执行卷加密并使用引导加载程序锁定受害者的计算机,引导加载程序不允许计算机在没有正确密码的情况下启动。

5.在某些情况下,当前的加密方法可能是可逆的。

感染链

为了获得初始访问权限,攻击者利用了目标中面向外部的基础设施中的已知漏洞。结果,一个webshell出现在以下路径中:

C:\inetpub\wwwroot\aspnet_client\system_web\IISpool.aspx

它是一个基本的密码保护shell,其中将输入密码的MD5与硬编码值52a04efc6a0e7facf34dcc36a6d1ce6f (joker123的MD5哈希值)进行比较。这个webshell是模糊的,基于Github中可用的一个webshell。

2.jpg

混淆的 webshell 密码验证代码

3.webp.jpg

身份验证成功后混淆的 webshell 的屏幕截图

攻击者还将几个额外的工具上传到同一个文件夹:

1.多个批处理脚本可以在特定的远程计算机上启用 SMB 或禁用 Windows 防火墙。

2.PsExec 的一个副本,这是 Microsoft 的一种便携式工具,允许使用任何用户的凭据远程运行进程。

3.OICe.exe,一个小型的 Go 可执行文件,它通过其命令行参数接收命令并执行它。该工具可能会在攻击的早期阶段用于受感染的服务器,以避免执行 cmd 或 PowerShell 等可疑子进程。

攻击者进入受害者网络后,他们收集网络中计算机的信息并将其组合到一个victim_info列表中。这包含域名、计算机名称和管理员凭据,稍后用于编译特制的 PyDCrypt 恶意软件。

该恶意软件通常在 C:\Users\Public\csrss.exe 中路径运行,负责在网络内部自我复制并释放主要的加密载荷 DCSrv。

4.jpg

感染链

PyDCrypt

PyDCrypt 的主要目标是感染其他计算机并确保主要载荷 DCSrv 正确执行。可执行文件是用 Python 编写的,并使用 PyInstaller 进行加密编译,在构建阶段使用 --key 标志。如前所述,攻击者为每个受感染的组织构建一个新的样本,并对从受害者的环境中收集的参数进行硬编码:

5.jpg

在 PyDCrypt 示例中硬编码的字典显示了攻击者在侦察阶段从受害者环境中收集的信息

PyDCrypt 可以接收 2 或 3 个参数。

预期的第一个参数是 113,恶意软件会检查,如果参数不同,它不会继续执行并自行释放。

第二个参数可以是 0 或 1,表示 PyDCrypt 之前是否已经运行过。

第三个参数是可选的,如果提供了,它将用作加密密钥,稍后将作为参数传递给DCSrv。

恶意软件的主要工作流程:

创建锁定文件以防止多个恶意软件实例同时运行。

解密 DCSrv(名为 C:\Users\Public\svchost.exe)到磁盘并执行它。加密算法基于 XOR 和多个 Base64 编码操作。

6.jpg

负责 DCSrv 执行的 PyDCrypt 的反混淆代码

解密并释放 PSExec(名为 ps.exe),解码方法与 DCSrv 相同。

修改防火墙规则以允许在远程计算机上使用 netsh.exe 传入 SMB、Netbios 和 RPC 连接:

7.png

遍历网络中的计算机并感染每台计算机:恶意软件尝试使用已泄露的管理员凭据通过 Powershell、PSExec 或 WMIC等任何可用的工具远程复制和执行 csrss.exe (PyDCrypt)。通过在目标计算机上运行 whoami 或 echo 1233dsfassad 来完成对每种方法的探测。

释放所有创建的工件,例如 ps.exe 二进制文件和 PyDCrypt 可执行文件。

8.jpg

PyDCrypt 单执行树(single execution tree)的取证报告示例

DCSrv

该恶意进程伪装成合法的 svchost.exe 进程,其目的只有一个:加密所有计算机卷,并拒绝对计算机的任何访问。

它包含以下4个资源:

资源 1——包含加密配置,根据代码,还可以包含硬编码的加密密钥。一些配置值是:

引导加载程序自定义消息:Hacked By

在安装 DiskCryptor 驱动程序后重新启动计算机之前等待的时间;

加密卷后重新启动计算机之前等待的时间;

引爆时间:加密开始的确切时间;

资源 2——64 位的签名 DCDrv.sys 驱动程序;

资源 3——32 位签名的 DCDrv.sys 驱动程序;

资源 4——用于安装引导加载程序的加密 DLL;

除了配置之外,执行流程还可以由该工具接收到的命令行参数控制,它可以接受0到2个参数。

如果第一个存在,则它是加密密钥,如果第二个存在,则它是一个标识符,也将与保存在恶意软件配置中的字符串进行比较。一个例子是字符串“113”,在DCSrv和PyDCrypt参数中都使用了它。然而,如前所述,标准的执行链是PyDCrypt将其参数(包括加密密钥)传递给DCSrv。

完整的加密工具是基于一个强大的第三方开源工具DiskCryptor。MosesStaff使用了该工具的几个部分,主要是签名驱动程序和自定义引导加载程序。

该工具的执行流程可以分为三个部分:驱动安装、卷加密和引导加载程序安装。

安装驱动程序

第一个操作是创建两个名为 DCUMSrv 和 DCDrv 的服务,每一个都有不同的目的。

DCUMSrv仅用于持久性机制,用于在启动时使用最初提供的参数运行相同的可执行文件svchos .exe。DCDrv运行提供的过滤驱动程序DCDrv.sys。对于安装,它从资源2或3中提取嵌入式驱动程序(取决于它是运行在32位系统还是64位系统上),并将其内容写入C: windows system32\drivers\DCDrv.sys。然后,它以与DiskCryptor开源项目相同的方式配置注册表参数。

9.webp.jpg

用于持久性机制的服务

10.jpg

安装 DCSrv.sys 过滤器驱动程序

由于驱动程序的有效签名,正如我们在下面看到的,DSE(驱动程序签名强制执行)功能不会停止其安装。

11.webp.jpg

DCDrv.sys 有效签名

当恶意软件完成驱动程序的安装后,它会在几分钟后执行一次重启,以使驱动程序运行。

加密卷

在第二次运行时,恶意软件会等待配置中给出的确切时间,然后才会引爆其加密机制,这是有效载荷是针对每个受害者创建的又一个证明。

12.jpg

检查当前时间并将其与配置中提供的值进行比较的代码

到特定时间时,程序会遍历所有可用驱动器,从 C: 到 Z:,并使用多个线程同时对它们进行加密。

如前所述,核心加密机制基于DiskCryptor驱动程序。因此,它所要做的就是使用打包到 dc_ioctl 结构中的正确参数启动正确的 IOCTL 消息:

13.png

用户模式应用程序和内核模式驱动程序之间有多种通信方法,最流行的方法是使用 Windows API DeviceIoControl 发送称为 IO 控制代码 (IOCTL) 的特殊代码。

在本例中,用于加密驱动器的相关IOCTL代码为DC_CTL_ENCRYPT_START和DC_CTL_ENCRYPT_STEP,参数为:passw1字段中的命令行密钥,device字段中的迭代设备,crypt字段中的CF_AES加密模式。

这个过程可能需要一段时间,所以恶意软件在使用自定义引导加载程序重新启动之前有两个小时的休眠时间。

安装DiskCryptor引导装载程序

这通常在加密过程之前完成,但取决于配置值,也可以等待它结束。事先覆盖引导加载程序的动机很明显,因为即使加密没有完成,对组织的损害也是通过锁定他们的计算机造成的。

引导加载程序安装程序作为资源4嵌入到可执行文件中,并在以/.dll的形式删除它之前进行解密。这个DLL文件有两个名为IsEFI和InstallLoader的导出函数,它们的名称很好地描述了它们的功能。

恶意软件动态加载释放的库并使用引导加载程序文本消息作为参数调用 InstallLoader:

14.jpg

加载引导加载程序安装程序

我们还没有发现引导加载程序本身引入了任何自定义恶意更改。因此,它包含我们希望在带有引导加载程序的卷磁盘加密软件中看到的用于解密主卷的确切功能。

加密方案

勒索软件组织(如Conti、Revil、Lockbit等)几乎无一例外地总是确保他们的加密系统设计良好且无懈可击。他们知道一个严重的错误最终可能会让他们损失数十万美元的潜在收入。不管出于什么原因,包括非经济动机,缺乏使用勒索软件的经验,或者业余编码技能,MosesStaff团队并没有做太多技术上的突破。

密钥生成

MosesStaff 使用三种方法来生成加密机制使用的对称密钥:

作为 PyDCrypt 自动生成的命令行参数;

作为用户提供的命令行参数;

如果配置中的某个位被打开,则密钥在可执行文件中被硬编码;

最常见的方法是运行 PyDCrypt,并根据 MD5 哈希和精心制作的盐值为每个主机名发送专有加密密钥。生成密钥的代码如下所示:

15.png

解密过程

如上所述,简单的基于对称密钥的加密通常不足以形成一个防弹的、难以逆转的加密方案。通过使用上面的分析,我们确实有几个可能反转加密的选项。

第一个也是最重要的选项是查看环境中是否安装了EDR产品日志。一个正确设计的EDR会记录所有的流程创建,以及它们的命令行参数,这是案例中的关键。

16.jpg

使用svchost.exe参数进行解密的复制攻击的EDR解决方案的屏幕截图

第二种选择是提取并逆转最初攻击受害者的PyDCrypt恶意软件。这种方法有点棘手,因为代码在运行完成后会被自行删除。在PyDCrypt示例中,我们可以提取精心制作的哈希函数,该函数为每台计算机生成密钥。

通过使用从这些方法中提取的密钥,我们可以将它们插入启动登录屏幕,并解锁计算机。通过这种方式,我们可以恢复对操作系统的访问,但磁盘仍然是加密的,并且每次重新启动时 DiskCryptor 引导加载程序都处于活动状态。这可以通过创建一个简单的程序来解决,该程序向 DiskCryptor 驱动程序启动适当的 IOCTL,并最终将其从系统中释放。

总结

将网络攻击归因于政治动机的原因很复杂,目前,根据我们掌握的所有信息,我们无法得出任何明确的结论。然而,有一些工具引起了我们的注意:

攻击中使用的工具之一 OICe.exe 在该组织开始其活动的活跃阶段(加密和公开泄密)前几个月从巴勒斯坦提交给 VT。

17.jpg

攻击者在被攻击的服务器上留下的命令代理工具VT提交的屏幕截图

虽然这不是一个强有力的迹象,但它可能会泄露攻击者的起源;有时他们会测试公共服务(如 VT)中的工具,以确保它们足够隐蔽。

网站 moses-staff[.]se 上使用的背景和徽标 PNG 图像文件(所有人都有可用的元数据)是在域在计算机上注册后几天创建或修改的,时区为 GMT+3 ,这是以色列和巴勒斯坦领土在每年这个时候的时区。

18.jpg

来自MosesStaff网站的图像元数据示例

如上所述,MosesStaff 有一种特定的操作方式,即利用面向公众的服务器中的漏洞,然后使用独特的工具和野外操作的组合,使目标网络加密,与之前的 Pay2Key 和 BlackShadow 组织一样,MosesStaff 组织受政治和意识形态的驱使,将目标对准以色列组织。