绕过数字签名,利用安全软件上下文执行恶意代码

admin 2025年4月16日22:39:23评论5 views字数 2891阅读9分38秒阅读模式

part1

点击上方蓝字关注我们

将二进制空间安全设为"星标⭐️"

第一时间收到文章更新

技术背景

为了隐藏其在受感染系统中的活动,APT(高级持续性威胁)组织使用各种技术来绕过防御机制。这些技术大多众所周知,并且可被EPP(端点保护平台)解决方案以及EDR(端点检测与响应)威胁监控和响应工具检测。例如,在Windows系统中,网络犯罪分子可能使用内核级rootkit,特别是恶意驱动程序来隐藏其活动。然而,在最新版本的Windows中,内核模式驱动程序只有在经过微软数字签名的情况下才能被加载。攻击者绕过这一保护机制的方法是使用具有合法签名但包含漏洞函数的合法驱动程序,在内核上下文中执行恶意操作。监控工具会跟踪此类驱动程序的安装,并检查执行安装的应用程序。但如果是安全软件自身执行了不安全操作怎么办?这类软件通常被监控工具信任,因此不会引起怀疑。

在2024年初, 在调查与ToddyCat相关的事件时,在多个设备的temp目录下发现了一个名为version.dll的可疑文件。

这是一个用C++编写的64位DLL,实为一个复杂的工具,被命名为TCESB。此前在ToddyCat攻击中未曾见过,目的是悄无声息地执行恶意Payload,绕过设备上安装的防护和监控工具。

卡巴斯基产品将此工具识别为:

  • Trojan.Win64.ToddyCat.a

  • Trojan.Win64.ToddyCat.b

DLL代理技术

静态分析显示该DLL导出的所有函数实际上都从系统文件version.dll(版本检查和文件安装库)中导入了同名函数。

绕过数字签名,利用安全软件上下文执行恶意代码
这表明攻击者使用了DLL代理技术来运行恶意代码。这种技术通过导出合法DLL中的全部函数名,表面上看起来正常,但实则将函数调用转发至原始DLL,恶意代码则在后台的应用程序上下文中运行。
绕过数字签名,利用安全软件上下文执行恶意代码

但仅凭DLL代理不足以执行恶意代码。加载该DLL的应用程序本身必须存在安全漏洞,例如不安全的DLL搜索路径漏洞:在加载动态库时首先在当前目录搜索,而非系统目录。若当前目录中存在伪装的恶意DLL,应用程序就会加载该DLL而非原始文件。微软已发布官方建议来防止这种不安全的DLL加载。

ESET扫描器漏洞

我们花了些时间才找出是哪个文件加载了TCESB工具。通过分析出现恶意DLL的系统目录,在某台设备上发现与TCESB同一目录下有一个无扩展名的可执行文件ecls。以此可以推断攻击者在传输文件时因文件名错误复制了两份,其中一份执行恶意活动后被删除,另一份残留在系统中。

该文件是ESET EPP(端点保护平台)解决方案的一部分——命令行启动的扫描器(ESET Command line scanner)。动态分析显示,扫描器以不安全方式加载version.dll,会优先在当前目录中查找,再搜索系统目录。攻击者利用此漏洞实现恶意DLL的加载。

研究人员将该漏洞报告给ESET并通过协作式漏洞披露流程提交。ESET注册了CVE-2024-11859编号,并在2025年1月21日发布补丁修复漏洞。4月4日,该漏洞的信息出现在ESET安全通告中。

在虚拟环境中运行TCESB后,我们看到ESET命令行扫描器进程的地址空间中存在两个version.dll文件——一个是系统库,另一个是TCESB的恶意DLL。

绕过数字签名,利用安全软件上下文执行恶意代码

工具基本功能

为确定该恶意工具的主要功能,检查了DLL中的字符串。

绕过数字签名,利用安全软件上下文执行恶意代码

这些字符串未被混淆。搜索显示,大部分字符串来自一个开源的恶意工具EDRSandBlast其设计目的就是绕过安全解决方案。卡巴斯基将其识别为:HEUR:HackTool.Win64.EDRSandblast.a。ToddyCat在此基础上创建了TCESB DLL,并对原始代码进行修改以扩展其功能。

该工具可修改操作系统内核结构,以关闭通知例程,例如有关系统中新建进程或加载事件的通知。

搜索内核内存中的结构地址

为了定位用于禁用通知例程的内核结构,TCESB会识别其运行环境中的Windows内核版本,调用函数GetNtoskrnlVersion()

绕过数字签名,利用安全软件上下文执行恶意代码

接着它从两个数据源之一获取结构偏移信息:CSV文件或PDB文件。

工具首先查找其资源区内的CSV文件。该表格包含多个流行内核版本及其对应的偏移信息。TCESB逐行搜索匹配的内核版本。

绕过数字签名,利用安全软件上下文执行恶意代码

我们比对了EDRSandBlast开源库中的CSV文件及其更新历史,发现TCESB所含的CSV内容与EDRSandBlast 2022年8月13日的版本一致,而EDRSandBlast在2023年10月6日之后添加的行在TCESB中未包含,说明TCESB开发者是基于该时间段使用的EDRSandBlast代码。

如果CSV未包含当前版本所需结构的信息,TCESB则尝试从PDB文件中读取。它会访问C:WindowsSystem32ntoskrnl.exe文件,提取内核版本信息后插入下列URL模板:

https://msdl.microsoft.com/download/symbols/%s/%08X%04hX%04hX%016llX%X/%s

通过该地址向微软调试信息服务器发送GET请求以下载PDB文件,保存至当前目录后解析所需结构偏移。

漏洞驱动程序(BYOVD)

为了修改内核中存储系统事件通知回调的结构,TCESB采用了“自带漏洞驱动(BYOVD)”技术。它通过设备管理器接口安装漏洞驱动,使用包含安装信息的INF文件。

绕过数字签名,利用安全软件上下文执行恶意代码

该驱动为Dell的DBUtilDrv2.sys,存在CVE-2021-36276漏洞。此驱动用于更新PC的驱动程序、BIOS和固件。

加载恶意Payload

一旦漏洞驱动安装成功,TCESB进入循环状态,每两秒检测一次当前目录中是否存在特定命名的Payload文件——该文件可能不会立即存在,以便操作员确认工具运行无误后再传输。文件一旦被发现,就会被送往解密函数。

绕过数字签名,利用安全软件上下文执行恶意代码
工具还会创建自己的日志文件,记录所有执行阶段的详细信息。
绕过数字签名,利用安全软件上下文执行恶意代码

分析了两个TCESB样本。尽管未获取到Payload本体,但其文件名分别为kespecore,均无扩展名。

工具代码表明,Payload文件的数据使用AES-128加密。

绕过数字签名,利用安全软件上下文执行恶意代码
密钥存储在有效载荷前32字节中,其后为加密数据块。以下为读取密钥的代码片段:
绕过数字签名,利用安全软件上下文执行恶意代码
密钥用于解密数据块,如图:
绕过数字签名,利用安全软件上下文执行恶意代码

读取的数据被加载到内存中并执行。

总结

本文中发现了一个由 ToddyCat APT 组织试图在受感染系统中用于隐蔽执行的复杂工具。该工具利用了一系列漏洞,同时基于一个已知的开源恶意软件的旧版本,并在此基础上进行了修改,以扩展其功能。

绕过数字签名,利用安全软件上下文执行恶意代码
为了检测此类工具的活动,建议对系统中涉及已知漏洞驱动程序的安装事件进行监控。例如,可以参考 loldrivers 项目网站(地址:https://www.loldrivers.io/) 上列出的此类驱动程序清单。此外,还应监控设备上加载 Windows 内核调试符号 的相关事件,尤其是在这些设备上不应存在操作系统内核调试的场景中。同时,我们还建议使用操作系统工具检查所有已加载的系统库文件是否具有数字签名

原文始发于微信公众号(二进制空间安全):绕过数字签名,利用安全软件上下文执行恶意代码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月16日22:39:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   绕过数字签名,利用安全软件上下文执行恶意代码https://cn-sec.com/archives/3965096.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息