今天小编分享的科技经验:BlackCat勒索軟體启用了新的签名内核驱动程式,欢迎阅读。
我们将在本文中详细介绍发生在 2023 年 2 月的 BlackCat 勒索軟體事件,研究人员在其中发现了一种新型逃避功能。
2022 年 12 月下旬,Mandiant、Sophos 和 Sentinel One 的研究人员发现恶意内核驱动程式是通过几个微软硬體开发人员帐户 ( 由微软 Windows 硬體开发人员计划认证 ) 签名的,微软随后撤销了几个在这些攻击中被滥用的微软硬體开发者账户。
我们将在本文中介绍有关 2023 年 2 月发生的 BlackCat 勒索軟體事件,该变体与三家安全商 2022 年 12 月下旬披露的恶意驱动程式重叠。众所周知,BlackCat 在逃避功能上使用了多种技术,比如使用禁用和修改工具或使用安全模式引导技术。
本文重点分析揭示了这种新功能,它涉及使用签名内核驱动程式进行逃避。我们认为这个新的内核驱动程式是一个最新版本,继承了以前研究中披露的示例的主要功能。该驱动程式与单独的用户客户机可执行檔案一起使用,试图控制、暂停和终止部署在攻击目标上的安全代理的各种进程。
攻击者使用不同的方法对其恶意内核驱动程式进行签名:通常是通过滥用 Microsoft 签名门户、使用泄露和被盗的证书或使用地下服务。在示例中,攻击者试图部署 Mandiant 披露的旧驱动程式,该驱动程式通过 Microsoft 签名 ( SHA256: b2f955b3e6107f831ebe67997f8586d4fe9f3e98 ) 。由于该驱动程式之前已经被发现并检测到,攻击者部署了另一个由被盗或泄露的交叉签名证书签名的内核驱动程式。
恶意签名的内核驱动程式
我们观察到的 2023 年 2 月的勒索軟體事件证明,勒索軟體运营商及其附属机构对获得他们在攻击中使用的勒索軟體有效负载的特权级访问非常感兴趣。他们通常使用包含低权限组件的勒索軟體家族,以避免在最终有效负载被释放后被安全产品检测到。跟踪分析发现,大多数与内核相关的有效负载通常是在企图逃避阶段被发现的。
内核级攻击的分布
大多数与内核相关的有效负载都是在企图逃避阶段被发现的
一些勒索軟體攻击试图遵守微软的代码签名要求。这使得恶意攻击者可以灵活地在释放实际负载之前编译为特定任务 ( 通常涉及削弱防御和逃避 ) 设计的内核模块。攻击者可以采取以下方法:
1. 使用代码签名证书,该证书要么是泄露的,要么是窃取的,要么是从黑市购买的。
2. 通过模仿合法机构并按照微软的流程获取交叉签名证书 ( 前提是微软允许对内核模式代码进行交叉签名 ) ,滥用微软的门户来发布签名的内核模块,获得新的有效代码签名证书,以及从黑市购买与真实身份相关的有效代码签名证书和 / 或扩展验证(EV)证书。
显示攻击者如何遵守微软代码签名要求的图表
对签名驱动程式的分析
接下来,我们将研究二月 BlackCat 攻击中使用的签名驱动程式(ktgn.sys)。下图显示了这些新签署的驱动程式的其他示例,以及它们是如何被用作 BlackCat 逃避程式的。
BlackCa 在逃避阶段释放的檔案
通过虚拟机保护的用户代理 tjr.exe 将内核驱动程式释放到用户临时目录 C:%User%AppDataLocalTempKtgn.sys。然后安装被释放的驱动程式,名称为 Ktgn,启动值为 System(在系统重新启动时启动)。通过我们对用户与该驱动程式互動时发生的情况的分析,我们观察到它只使用了一个公开的设备输入和输出控制(IOCTL)代码—— Kill Process,该代码用于阻止安装在系统上的安全代理进程。
与此同时,驱动程式 ktgn.sys 使用当前吊销的有效数字签名从 "BopSoft" ( 它也曾被其他攻击者用于代码签名 ) 签名,可以成功加载到执行签名策略的 64 位 Windows 安装中,该驱动程式使用 Safengine Protector v2.4.0.0 工具进行混淆,这使得静态分析技术不可靠。通过加载被混淆的驱动程式并尝试构建一个用户模式客户端来观察暴露的 IOCTL 接口,我们可以确定每个 IOCTL 代码的函数。最后,我们观察到相同的内核驱动程式被不同的代码签名证书签名。
具有不同签名者的驱动程式变体
用于混淆二进制檔案的封装程式
由于它没有注册解除安裝回调函数,因此只有在释放或修改服务系統資料庫项后重新启动系统时,才能解除安裝驱动程式。
服务控制管理器无法停止该服务
缺少解除安裝函数的驱动程式
一个名为 \.keHeperDriverLink 的符号链接被创建,该符号允许用户模式客户端与其连接和通信。请注意,该链接只允许一个连接,如果多个客户端试图同时连接,系统将崩溃。
正在检查另一个用户模式进程是否正在尝试连接到驱动程式
暴露的 IOCTL 接口
这个客户机支持 10 个不同的命令,每个命令实现一个特定的功能,该功能由内核驱动程式通过适当的 IOCTL 接口执行。驱动程式和用户模式客户端之间的通信使用 irp_mj_devicide_control 处理程式通过以下代码发生,每个 IOCTL 代码及其对应的功能:
222088h:激活驱动程式
22208ch:取消激活驱动程式
222094h:终止进程
222184h:删除檔案
222188h:强制删除檔案
22218ch:复制檔案
222190h:强制复制檔案
2221c8h:注册进程 / 线程对象通知
2221c4h:注销进程 / 线程对象通知
222264h:重启系统
根据我们对内核驱动程式的分析,它似乎仍在开发和测试中,因为它的结构不是很好,而且它的一些功能目前还不能使用。接下来将介绍各种 IOCTL 接口的详细信息。
IOCTL 222088h
在执行任何其他操作之前,必须首先调用 IOCTL 222088h 来激活驱动程式。如果未调用此代码,驱动程式将不接受任何操作,并将返回消息 STATUS_ACCESS_DENIED。用户模式客户端将此激活字节数组发送给驱动程式。
激活是对位于驱动程式中的大小为 0x42 的硬编码字节数组进行简单的字节比较。如果比较通过,它将設定一个 BOOLEAN 标志,该标志将在任何操作之前进行检查。
运行内存中的激活字节数
复制激活字节以测试驱动程式操作
IOCTL 22208 ch
IOCTL 22208Ch 在用户模式客户端完成取消之前在 IOCTL 代码 222088h 中設定的标志的操作后被调用。这将使驱动程式失效并停止处理任何新的操作。
客户端将需要传递 IOCTL 代码 222088h 中传递的相同字节数组,以便成功完成操作。
IOCTL 222094 h
IOCTL 222094h 用于阻止任何用户模式进程(甚至是受保护的进程)。Tt 从用户代理接收进程 ID,然后在目标进程上下文中创建内核线程。创建的内核线程调用 ZwTerminateProcess API 来终止目标进程。
检查驱动程式是否激活
IOCTL 222094h 终止进程
IOCTL 222184 h
IOCTL 222184h 用于删除特定的檔案路径。
IOCTL 222184h 删除檔案路径
IOCTL 222188 h
IOCTL 222188h 强制删除檔案。为此,内核驱动程式执行以下操作:
1. 它尝试使用暴力方法打开系统上的所有进程(从 PID=0x4 到 PID=0x27FFD);
2. 当它成功地打开一个进程时,它会尝试引用进程内的所有句柄,再次使用暴力方法(从 HANDLE=0x4 开始到 HANDLE=0x27FFD);
3. 当它成功引用句柄时,它使用 ObQueryNameString API 将句柄映射到名称。当找到匹配项时,内核驱动程式关闭句柄。
此操作将确保关闭对该檔案的所有引用,并且该操作可以成功完成,而不会出现任何错误,说明该檔案正被其他应用程式使用。
暴力破解 PID
暴力破解句柄
IOCTL 22218 ch
IOCTL 22218Ch 用于复制檔案。
IOCTL 22218Ch 用于复制檔案
IOCTL 222190 h
IOCTL 222190h 用于强制复制檔案。驱动程式使用与强制删除相同的操作(IOCTL 代码:222188h)。它使用暴力方法关闭所有进程对檔案的所有引用,然后复制檔案。
IOCTL 2221C4h 和 IOCTL 2221C8h
IOCTL 2221C4h 和 2221C8h 都用于注册和注销进程 / 线程通知回调。然而,在撰写本文时,这两条路径都是无法实现的,这表明它们仍处于开发或测试阶段。
注册对象通知的伪代码
注销对象通知的伪代码
对象通知函数的伪代码
IOCTL 222264 h
IOCTL 222264h 通过调用 HalReturnToFirmware API 重启系统。
总结
攻击者通过终端保护平台 ( EPP ) 和终端检测与响应 ( EDR ) 技术,正在积极寻求对 Windows 作業系統的高权限访问的恶意攻击,绕过各类防护措施。由于这些添加的保护层,攻击者倾向于选择阻力最小的方法,通过内核层(甚至更低级别)运行恶意代码。所以我们认为,这种威胁会一直存在。
恶意攻击者将继续使用 rootkit 对安全工具隐藏恶意代码,绕过防御,并在很长一段时间内不会被检测到。这些 rootkit 将被恶意组织大量使用,他们既拥有逆向工程低级系统组件的技能,又拥有开发此类工具所需的资源。这些恶意攻击者还拥有足够的财力,可以从黑市购买 rootkit 或购买代码签名证书来构建 rootkit。这意味着涉及这类 rootkit 的主要危险在于它们能够隐藏复杂的有针对性的攻击,这些攻击将在攻击的早期使用,允许攻击者在受害者环境中启动实际有效负载之前就逃脱检测。
缓解措施
代码签名证书通常会被攻击者滥用,因为它们在攻击中提供了额外的混淆层。对于组织来说,泄露的密钥不仅会带来安全风险,还会导致对原始签名軟體的声誉和信任的丧失。企业应该通过实现最佳实践来保护他们的证书,例如减少对私钥的访问,从而降低对证书进行未经授权访问的风险。为私钥使用强密码和其他身份验证方法还可以帮助保护它们免受恶意攻击者的窃取或破坏。此外,使用单独的测试签名证书 ( 用于测试环境中使用的预发布代码 ) 可以最大限度地减少实际发布签名证书在攻击中被滥用的可能性。
对于一般的勒索軟體攻击,组织可以实现一个系统的安全框架,分配资源来建立一个强大的防御策略。建议如下:
盘点资产和数据;
识别授权和未经授权的设备和軟體;
审计事件和事件日志;
管理硬體和軟體配置;
仅在必要时授予管理员权限和访问权限;
监控网口、協定和服务;
为合法应用程式建立軟體许可列表;
实施数据保护、备份和恢复措施;
启用多因素身份验证 ( MFA ) ;
在系统各层部署最新版本的安全解决方案;
注意攻击的早期迹象;
保护潜在的入口点 ( 如终端、电子邮件、web 和网络 ) ,组织可以检测并防范恶意元素和可疑活动,从而保护自己免受勒索軟體攻击。