我们会在本文对一个带签名的rootkit进行分析,它的主要二进制函数是一个通用加载程序,使攻击者能够直接加载第二阶段的未签名内核模块。
在趋势科技最近的一次调查中,研究人员发现了一个有趣的攻击活动,他们最初认为这是检测微软签名文件时的误报。然而,追踪发现,这是一个新出现的签名rootkit,它与一个大型命令和控制(C&C)基础设施通信,用于我们目前正在跟踪的未知攻击者,我们认为这与rootkit FiveSys背后的攻击者相同。其攻击目标是中国的游戏行业。恶意软件似乎已经通过了Windows硬件质量实验室(WHQL)获得了有效签名。WHQL签章要求确保所有驱动程序是获得OS厂商验证及签章,但这类签章无法保证出于真正App开发商之手。这显示恶意程序作者想利用微软签章制度,让用户误以为它是合法驱动程序而安装。研究人员已在2023年6月向微软安全响应中心(MSRC)报告了他们的发现。
主二进制文件充当通用加载程序,允许攻击者直接加载第二阶段未签名内核模块。每个第二阶段插件都是针对部署它的受害设备自定义的,有些甚至包含针对每台设备的自定义编译驱动程序。每个插件都有一组要从内核空间执行的特定操作。
发现的变体由八个主要集群组成,这些集群基于从签名(Authenticode)中的SPC_SP_OPUS_INFO字段中提取的特定于供应商的元数据,揭示了这些变体代表其签名的各种发布者。
每个集群中的示例数量
2022年和2023年使用微软门户网站签署的驱动程序数量
攻击者目前使用不同的方法对其恶意内核驱动程序进行签名,通常包括:
滥用微软签名门户;
使用泄露和被盗的证书;
使用黑市服务;
接下来,我们将介绍一种明显遵循第一种方法的攻击:滥用WHQL在恶意驱动程序上获得有效签名,该恶意驱动程序可以在最新的Windows版本上成功加载。我们还将提供这种新发现的恶意软件的技术细节,该恶意软件是由微软直接签名的独立内核驱动程序,这是一种不断发展的攻击技术,现在出现的非常频繁。尽管构建这样的能力非常复杂,但当前的攻击者似乎很热衷于这些工具、策略和程序(TTP)。
作为独立内核驱动程序由Microsoft直接签名的恶意软件
WHCP滥用史
下图显示了Windows硬件兼容性程序(WHCP)滥用史,这些报告导致了Windows内核信任模型的妥协。2021年6月,Netfilter rootkit被报道,之后微软发布了一份报告,详细说明它被用作游戏社区中地理定位作弊的手段。Bitdefender随后在2021年10月披露了FiveSys,这是一个主要用于在线游戏玩家的rootkit,主要目的是窃取凭证和在游戏中购买劫持。最后,Mandiant报告了已知的最后一次滥用,揭露了Poortry恶意软件,该恶意软件已被用于许多网络攻击,包括基于勒索软件的事件。
WHCP发生时间表
现代rootkit的检测方法
在引入内核模式代码签名(KMCS)策略机制的时代,随着64位签名驱动程序的数量增加,现在寻找64位签名的rootkit并不那么容易,如下图所示。由于现代内核rootkit的开发成本更高,而且将内核rootkit纳入其恶意软件库的技术能力不足,或者可以访问绕过新Windows版本中添加的安全防御所需的技术,这使得检测这类攻击变得更加困难。
2015年前后检测到的一次以上已签名驱动程序总数
如下图所示,研究人员根据以下内容评估了Windows内核驱动程序示例:
他们签署的驱动程序签名被吊销;
它们有一个或多个基于恶意软件搜索引擎的误报检测,包括VirusTotal恶意软件存储库:
Set 1:未被吊销且无误报检测的已签名驱动程序;
Set 2:未被吊销且有一个或多个来自不同引擎的误报检测的已签名驱动程序;
Set 3:已被吊销且无误报的签名驱动程序;
Set 4:已被吊销的签名驱动程序,其中包含来自不同引擎的一个或多个误报。
Windows内核驱动程序基于其签名驱动程序被吊销或以其他方式进行采样,并且它们具有一个或多个误报检测。
从Set 1和Set 2中寻找新的示例提交以查找攻击这样就可以研究这个新出现的示例集群和服务于第二阶段插件的底层C&C基础设施。
从2020年到2022年5月,属于示例Set 2的内核驱动程序提交数量增加
第一阶段分析
根据从这次活动中收集的示例,我们确定了两个不同的集群,它们的示例之间有多个相似之处。研究人员观察到一种模式,即使用VMProtect对一些示例进行模糊处理,然后在没有任何模糊处理的情况下对具有更多功能的较新示例进行签名,这表明这些示例背后的攻击者仍处于测试和开发阶段。
有很多相似之处的两个不同集群
大多数示例都是“Microsoft Windows Hardware Compatibility Publisher”签名的驱动程序。下面我们将对第一个集群中的一个示例进行分析。
驱动程序首先检查加载到内存中的驱动程序上是否有另一个实例,方法是尝试打开由驱动程序在初始化期间创建的符号名称“\??\ea971b87”。如果成功打开,DriverEntry返回的错误代码“0FFFFCFC7”将停止加载驱动程序。然后,如果驱动程序尚未加载,它将创建一个符号名称“\??\ea971b87”,并初始化其处理程序的函数。基于我们观察到的当前变体,它仅使用“IRP_MJ_DEVICE_CONTROL”和“IRP_J_SHUTDOWN”。
检查驱动程序是否已经加载
初始化IO处理程序
注册关闭通知处理程序
然后,驱动程序检查二进制编译是调试构建还是发布,如下图所示。在调试构建的情况下,它在整个执行过程中打印一些调试消息,这表明目前的产品仍在开发和测试中。然后,驱动程序通过编辑注册表禁用用户帐户控制(UAC)和安全桌面模式,并初始化Winsock内核(WSK)对象,以启动C&C服务器的网络活动。
检查编译是否是调试构建的
禁用UAC然后初始化WSK对象
从“IRP_J_DEVICE_CONTROL”设备控制处理程序挂接文件系统堆栈
第一阶段网络初始化
第一阶段驱动程序负责与C&C服务器之间的所有网络通信。它使用WSK(一种内核模式的网络编程接口)从内核空间启动所有通信。使用WSK,内核模式软件模块可以使用用户模式Winsock2支持的相同套接字编程概念执行网络I/O操作。
它使用域生成算法(DGA)生成不同的域。如果它无法解析地址,它会直接连接到硬编码在驱动程序内部的辐射ip,它连接到端口80上的驱动程序,并创建一个TCP套接字用于通信。
wsk创建的套接字类型
解析DNS
解析DNS
来自第一阶段驱动程序的DNS请求
连接C&C服务器
然后,它定期连接到C&C服务器以获取配置。它可以选择作为内核驱动程序加载程序:
它逐字节地接收来自C&C服务器的数据;
它对接收到的数据进行解码和解密;
它将接收到的内核驱动程序直接加载到内存中,而不将其写入磁盘;
它解析接收到的可移植可执行文件(PE)并执行所有重新定位;
它调用驱动程序入口点;
这样,内核插件就永远不会接触磁盘,只会在内存中,这使得它更隐蔽,并使其能够绕过检测。
解码从C&C服务器接收到的数据
接收第一阶段的配置
解析用于加载新接收到的驱动程序的函数地址
获取驱动程序入口地址
调用驱动程序入口函数
第二阶段插件
下载的第二阶段驱动程序是自签名的,因为它完全由第一阶段加载程序加载,绕过Windows本机驱动程序加载程序。因此,不需要对这些第二阶段的变体进行签名。它打开文件“C:\WINDOWS\System32\drivers\687ae09e.sys”,然后读取数据并对其进行编码。然后,它将数据划分为内存块并将其写入注册表路径“\ registry \Machine\Software\PtMyMem”及其大小和MD5。之后,它从磁盘中删除文件“C:\WINDOWS\System32\drivers\687ae09e.sys”。
第二阶段的自签名驱动程序
读取文件
文件信息
注册表中的编码文件
删除写入磁盘的文件
实现持久性
第一阶段关闭通知函数检查是否已从C&C服务器接收到内核插件并将其加载到内存中,以便进行清理。它还检查注册表项“\ registry \Machine\Software\PtMyMem”,如果它出现,则迭代其所有子键并解码数据,将其写入磁盘“C:\WINDOWS\System32\drivers\687ae09e”。sys”路径。最后,它创建一个名为“BaohuName”的服务,该服务将在系统再次启动时运行。
第一阶段和第二阶段(从C&C服务器下载的插件)作为攻击者自我保护和持久性方法的一部分协同工作。该技术与从C&C服务器下载的内核插件相结合,将成为该驱动程序的主要持久性机制。对这个特定的第二阶段插件的详细分析如下:
第一阶段驱动程序连接C&C服务器并下载第二阶段驱动程序;
第二阶段驱动程序从磁盘读取第一阶段驱动程序并将其写入注册表,然后从磁盘删除;
第一阶段和第二阶段的驱动器只存在于内存中;
在重新启动之前,执行第一阶段关闭通知例程;
关机例程将从注册表中自我读取,自我写回磁盘,并创建一个服务,该服务将在下次系统重新启动时启动。
Defender停止器插件
此驱动程序的主要目标是停止Windows Defender。它首先从注册表项“HKEY_LOCAL_MACHINE\\SOFTWARE\\Policies\\Microsoft\\Windows Defender”禁用反间谍软件检测,禁用“SecurityHealthService”服务,并停止杀毒检测。
停止反间谍软件检测
停止“SecurityHealthService”服务
禁用杀毒检测
然后在“映像文件执行选项”注册表中为所有Windows Defender进程添加一个条目,因此当其中任何一个进程崩溃时,另一个进程将启动。将启动的可执行文件是“C:\\Users\\Administrator\\Desktop\\111111111.exe”,这表明这些插件是自定义的,攻击者正在根据需要积极开发新的插件。它最终会终止所有Windows Defender进程。
将条目添加到映像文件执行选项
映像文件执行中的调试器值
映像文件执行中的调试器值
Windows Defender进程
终止进程
代理插件
此插件负责在设备上安装代理,并将web浏览流量重定向到远程代理设备。它首先编辑Windows代理配置“hxxp[:]//4dpyplftay8g90qb7l.kkvgsytcw4hsn3g0nc5r[.]xyz:17654/api/pac/PacReback?key=10252”。
编辑的Windows代理配置
然后,它在浏览器中注入一个JavaScript,根据URL将其重定向到另一个服务器。截至2023年5月31日,检查URL的脚本将排除以下后缀:
edu.edu:.edu/.gov.gov:.gov/
如果URL是被监控的域之一,它会将流量重定向到以下地址:
HTTP will be redirected to “nt32vn1-redyf[.]gj2oydber4xfa6c[.]com[:]10385”;HTTPS will be redirected to “ybqjb6[.]ady4111523[.]com[:]10385”;
以下是一些受监控的域:
www[.]68chuanqi[.]comwww[.]ooyy[.]comwww[.]v8cq[.]comwww[.]bairimen[.]comwww[.]980cq[.]cn
它还排除了以下域:
www[.]baidu[.]come[.]so[.]comwww[.]sogou[.]com
解码函数
URL过滤器
2023年1月6日,研究人员观察到脚本发生了变化,并开始排除所有具有以下扩展名的URL:
.edu..edu:.edu/.js.css.jpg.bmp
更新后的URL过滤器
排除的域
此外,它停止重定向任何DGA生成的域,代理服务器更改为以下内容:
HTTP现在被重定向到103.45[.]162[.]204:10252;HTTPS现在被重定向到103.45[.]162[.]217:10252;以下是一些受监控的域:Angdao[.]com[.]cnwww[.]newsensation.com[.]cn
基于此,研究人员认为攻击者正在优化其过滤机制以降低干扰。
幕后组织分析
经过分析,我们发现驱动程序和著名的FiveSys rootkit在功能、代码相似性、基础设施和受害者特征方面表现出许多相似之处:
1.FiveSys和新签名的驱动程序所使用的C&C基础结构有相似之处。
2.FiveSys rootkit和第二阶段的签名rootkit都专注于将网页浏览流量重定向到攻击者控制的自定义代理服务器。此外,它们都能够安装自定义根证书来重定向HTTPS流量。FiveSys rootkit的主要目的是监控和重定向web流量,但该功能已经发展,现在可以在新签名的rootkit中找到,这表明其功能的进步。
3.新签名的rootkit共享许多与FiveSys中相同的函数,例如挂接文件系统函数和预创建的小型过滤器函数。
BinDiff输出
在签名rootkit(右)和FiveSys rootkit(左)之间预创建小型过滤器函数的相似性
总结
积极寻找对Windows操作系统的高权限访问的攻击者使用的技术试图绕过终端保护平台(EPP)和终端检测和响应(EDR),由于这些保护措施添加的保护层,攻击者倾向于选择阻力最小的路径,通过内核层甚至更低的级别运行恶意代码。攻击者将继续使用rootkit在安全工具隐藏其恶意代码,破坏防护,并在很长一段时间内绕过检测。
本文翻译自:https://www.trendmicro.com/en_us/research/23/g/hunting-for-a-new-stealthy-universal-rootkit-loader.html如若转载,请注明原文地址