标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2025-3476]   作者: 闲云野鸡 发表于: [2024-12-05]

本文共 [24] 位读者顶过

 摘要

这种攻击方式被称为BYOVD攻击, BYOVD 攻击的核心是攻击者将一个已知存在漏洞的内核驱动程序写入磁盘并加载,然后利用该漏洞执行特权操作。这些操作可能包括终止安全产品、绕过 EDR 防篡改保护、提取特权进程信息,或执行通常被 Windows 操作系统或安全软件阻止的其他操作。

[出自:jiwo.org]

                    BYOVD技术背景


BYOVD(“自带漏洞驱动程序”)是指攻击者将合法但存在漏洞的驱动程序写入磁盘并加载到操作系统内核中,从而获得内核级访问权限。这种方式使他们能够绕过检测机制并在系统深层进行操控,通常可避开如 EDR(端点检测与响应)等防护措施。要实现这种攻击,攻击者首先需将驱动程序引入目标系统,然后启动特权进程加载该驱动程序,为后续的恶意行为奠定基础。

从历史来看,Windows 内核中的代码执行几乎没有任何限制,允许对内存进行不受约束的访问。然而,随着微软引入如 PatchGuard 和基于虚拟化的安全(VBS)以及具有虚拟化保护的代码完整性(HVCI)等安全措施,这种情况发生了改变,为内核建立了新的防护屏障。尽管如此,由于内核提供了强大的权限,它依然是恶意攻击者的主要目标。


为了保护内核,Windows 64 位操作系统强制要求所有驱动程序必须经过数字签名才能被加载。这项由代码完整性模块(CI.dll)支持的安全措施,被称为驱动程序签名强制(DSE)。这一要求极大地增加了攻击者在内核空间执行代码的难度,迫使他们寻找替代方法。

面对这些严格的安全措施,攻击者开发了 BYOVD 策略以获取内核访问权限。一旦驱动程序被引入系统,它便成为利用的目标,攻击者可通过其漏洞实现一系列恶意目的,体现了安全防御者与攻击者在内核安全领域的持续博弈。

攻击者的目标主要包括以下几个方面:

  • 读取或写入任意内核内存区域,试图读取加密密钥或篡改操作系统功能。

  • 禁用 DSE,以允许加载未签名的恶意驱动程序。

  • 手动映射未签名的恶意驱动程序。

  • 删除内核回调,降低 EDR 产品的可见性。

  • 篡改受保护的进程或受保护的注册表项。

  • 通过访问和覆盖原始磁盘扇区执行破坏性操作。

  • 篡改 CPU 特定型号寄存器(MSR),控制各种 CPU 功能。

  • 篡改受保护的操作系统寄存器。

  • 获取受保护进程的句柄。

  • 隐藏诸如进程、网络套接字或文件等对象。


被利用的驱动程序种类


被BYOVD攻击滥用的驱动程序主要分为三类: 漏洞驱动程序、可武器化驱动程序和恶意驱动程序。

漏洞驱动程序是合法的驱动程序,但由于存在软件缺陷,攻击者可利用这些缺陷执行超出驱动程序设计功能范围的操作。例如,漏洞可能允许任意读取和写入内核内存,从而加载一个未签名的恶意驱动程序,绕过 Windows 的代码签名限制。

可武器化驱动程序是漏洞驱动程序的一个子集,具备特定的合法功能,但这些功能可以被恶意行为者重新利用,或“武器化”以达到恶意目的,而无需通过漏洞进行利用。例如,一些安全产品的驱动程序可终止受保护的进程。尽管这些功能是为了合法用途设计的,但攻击者可以利用它们对安全防护机制进行恶意篡改。

漏洞驱动程序与驱动程序中的可武器化功能有一个关键区别:漏洞是可以通过厂商提供的补丁或用户更新修复的,而可武器化功能是内置的功能,这些功能无法通过补丁移除,并且厂商可能会继续在其应用程序中提供这些功能。

恶意驱动程序通常出现在 BYOVD 攻击链中,往往在滥用漏洞驱动程序后由攻击者加载。这些驱动程序可能通过漏洞驱动程序代理加载,或者攻击者获取了被盗用或受损的代码签名证书后直接加载。恶意驱动程序通常会注销已知 EDR 驱动程序的内核回调,或隐藏文件系统、网络活动或注册表活动,以规避监控。

可武器化驱动程序因其能终止 EDR 进程且易于操作,受到许多网络犯罪分子的青睐,因为它们不需要额外的恶意驱动程序支持。这种趋势也体现在本文讨论的入侵案例中,攻击者携带了六个可武器化驱动程序,这些驱动程序都有公共的概念验证(POC)代码,可以在代码共享网站或 loldrivers 项目中获取。

以下展示了攻击者利用 BYOVD 攻击链中的6个漏洞驱动程序进行持续攻击的操作:

BYOVD利用驱动1-TfSysMon.sys

TfSysMon.sys 是一个已知的漏洞驱动程序,被观察到多次被 eCrime 团伙滥用。该驱动程序来自 ThreatFire System Monitor应用,属于可被武器化的漏洞驱动程序类别。在这种情况下,TfSysMon.sys可以通过特定构造的 IOCTL 请求终止受保护的进程(例如 EDR 产品)。

最初,攻击者尝试通过 wmic.exe使用命令行 process call create 间接启动恶意文件 WatchMgrsCore.exe进行代理执行。这种通过 Windows Management Instrumentation (WMI) 的执行行为由 Falcon 检测为可疑并被阻止,其父进程显示为 WmiPrvSe.exe。

随后,攻击者切换账户,通过 RDP 再次登录到域控制器,并尝试以该用户直接执行 WatchMgrsCore.exe。这次执行将驱动程序文件 TfSysMon.sys写入磁盘,并因对该驱动程序发起的可疑 IOCTL 请求触发了 BYOVD 防护机制。此驱动程序伪装为文件 C:\Windows\WatchMgrsCore.sys。

BYOVD利用驱动2-TrueSight.sys

对手随后尝试通过引入新的二进制文件 C:\Users\Public\syscoreservice.exe来切换到一个新的驱动程序。此文件放置了另一个已知的易受攻击驱动程序 TrueSight.sys,伪装成 C:\Windows\System32\drivers\truepath.sys文件。该文件也被归类为“可武器化”,可用于终止 EDR 产品。

BYOVD利用驱动3-aswArPot.sys

在多次尝试执行恶意 PowerShell 脚本失败之间,攻击者将著名的易受攻击驱动程序 aswArPot.sys 复制到磁盘,存储路径为 C:\Users\Public\aswArPot.sys。该易受攻击的驱动程序是 Avast Anti-Rootkit 的一部分,包含允许终止受保护进程的 API 函数。多年来,电子犯罪勒索软件的攻击者已多次使用该驱动程序。

BYOVD利用驱动4-viragt64.sys

攻击者随后试图在 C:\AU_Data\Bin 下的新位置部署进一步的恶意软件。这些文件中的两个,loader.exeloader_protected.exe,接着,攻击者执行了另一个独特的二进制文件:magic.exe。此二进制文件被执行后,写入了易受攻击的驱动程序 viragt64.sys,路径为 C:\Users\<REDACTED>\AppData\Local\Temp\20240815.sys。该驱动程序最初是 Vir.IT eXplorer Anti-Virus 产品的一部分。随着时间的推移,该驱动程序存在多个关联的 CVE,允许在内核中执行任意代码。

magic.exe 加载程序通过服务控制以伪装成 Microsoft 知识库更新的服务名来尝试启动驱动程序,使用的命令行是“sc create KB20240815 binpath= C:\Users\<REDACTED>\AppData\Local\Temp\20240815.sys type= kernel start=auto” 和 “sc start KB20240815”。

BYOVD利用驱动5-rentdrv2.sys

攻击者随后将另一个易受攻击的驱动程序 rentdrv2.sys复制到磁盘,伪装成 C:\AU_Data\1721289943.sys.5rentdrv2.sys 也存在漏洞,具有终止受保护进程的可武器化能力。

BYOVD利用驱动6-ksapi64.sys

该易受攻击的驱动程序是可武器化的 ksapi64.sys,是 Kingsoft Antivirus Security System 的一部分,可被滥用来终止受保护的进程。该驱动程序伪装为 C:\Users\Public\WinDAPI.sysC:\Users\Public\WinDAPI64.sys


利用漏洞驱动攻击案例1

gdrv.sys 是由技嘉开发的内核驱动程序。它启用各种主板增强功能,包括硬件管理、超频和性能优化。

此驱动程序的旧版本存在多个漏洞——如 CVE-2018-19320、CVE-2018-19321、CVE-2018-19322 和 CVE-2018-19323——这些漏洞使攻击者能够对内核内存、IO 端口和 MSR 寄存器进行任意读写操作。其滥用的一个例子是 RobbinHood 勒索软件,它利用通过 0xC3502808 输入/输出控制代码(IOCTL)暴露的漏洞来禁用 DSE,目的是加载其自己的恶意驱动程序。然后,该恶意驱动程序将被用来移除安全软件,如 EDR 工具。

下图是使用 switch-case 结构在用户模式进程调用 IOCTL 0xC3502808 时调用自定义 memcpy 指令:


该驱动程序使用 switch-case 语句将执行指向处理 0xC3502808 IOCTL 的代码。随后,它调用一个自定义的 memcpy 实现,该实现使用一个自定义结构来指定源地址、目标地址和要复制的缓冲区大小。此 memcpy 缺乏限制谁可以调用它或阻止超出该驱动程序范围的内存写入的安全机制。攻击者可以确定各种内核空间结构的地址,并利用此 memcpy 在内核空间内写入内存。

下图是自定义memcpy 实现接收一个包含目标地址、源地址以及要复制数据长度的自定义结构:



该驱动程序的供应商已承认这些漏洞并在新版本中进行了修复。然而,旧版本的此驱动程序仍可在 BYOVD 攻击链中被滥用。


利用漏洞驱动攻击案例2

GMER 是一款旨在帮助识别隐藏在操作系统内核中的根套件的工具。它能够审计和篡改各种内核结构,以实现识别和防御根套件的目的。该强大工具需要一个驱动程序来实现所有这些功能——这个驱动程序已经被多种攻击者和开源工具武器化,用于终止或挂起受保护的进程。

该驱动程序通过 0x9876C094 IOCTL 暴露了 ZwTerminateProcess 内核 API。用户模式进程只需要发送要终止的进程的进程 ID(PID)。

下图是IOCTL 0x9876C094 接收要终止的目标进程的 PID:


下图是封装通过 ZwTerminateProcess 实现的进程终止功能的函数:





评论

暂无
发表评论
 返回顶部 
热度(24)
 关注微信