RobbinHood:利用Windows驱动程序漏洞关闭杀软的勒索软件
2012-04-12 01:00:00 Author: www.4hou.com(查看原文) 阅读量:72 收藏

Change 勒索软件 2020-02-16 09:30:00

收藏

导语:Sophos安全团队发现了一起新型勒索软件攻击事件,该勒索软件能通过合法且经过数字签名的硬件驱动程序,在恶意文件加密部分执行之前禁用目标计算机中的安全产品。

近期,Sophos安全团队发现了一起新型勒索软件攻击事件,该勒索软件能通过合法且经过数字签名的硬件驱动程序,在恶意文件加密部分执行之前禁用目标计算机中的安全产品。

该驱动程序曾由台湾主板制造商技嘉(Gigabyte)使用(当前已弃用),它具有一个已知的漏洞CVE-2018-19320,利用此漏洞,攻击者能够尝试访问设备并部署第二个驱动程序,进而杀死系统中的杀毒产品。

该漏洞于2018年被发现,技嘉曾否认此漏洞并表示其产品不受影响,后来才决定撤销此驱动程序。但由于用于对驱动程序进行数字签名的Verisign代码签名机制尚未撤销签名证书,Authenticode签名仍然有效,因此它当前仍能存在且具有威胁性。 

图1.勒索告示

Sophos将此次观察到的勒索软件称为RobbinHood。试图绕过杀毒产品的勒索软件并不少见,例如Nemty使用常规的taskkill杀死进程和服务,而Snatch勒索软件则将电脑重新引导到安全模式以解决端点保护的问题。显然,从内核模式执行进程终止具有许多优势。

本文将对此次攻击的操作方式作探讨,并提出一些在未来面对这类情形的威胁时的防御措施。

击破Windows防御

在不深入研究勒索软件或数据加密本身的情况下,我们将专注于攻击者用来杀死端点保护软件的模块。攻击的这一部分由STEEL.EXE中嵌入的几个文件组成,所有文件都被提取到到C:\WINDOWS\TEMP。

image.png

STEEL.EXE

STEEL.EXE负责终止进程并删除杀软文件。为此,STEEL.EXE应用程序首先部署ROBNR.EXE,后者安装恶意的未签名驱动程序RBNL.SYS。该驱动程序以内核模式运行,处于提取进程和文件最佳位置,不受诸如端点保护之类的安全控制措施的阻碍。

RBNL.SYS安装完成后,STEEL.EXE读取PLIST.TXT文件,指示RBNL.SYS删除该文件中列出的所有应用程序并终止其关联进程。如果进程作为服务运行,则服务也会因为关联文件被删除而不再自动重启。

STEEL.EXE进程退出后,勒索软件程序就可以畅通无阻地执行加密攻击。

ROBNR.EXE

ROBNR.EXE是一个便捷的应用程序,可植入并安装易受攻击的GDRV.SYS驱动程序和恶意RBNL.SYS驱动程序。

64位Windows计算机具有为驱动程序签名实施的机制,这意味着Windows仅允许加载由制造商和Microsoft正确签名的驱动程序。

恶意软件作者没有费心为驱动程序寻找签名,因为它涉及购买证书,购买的证书也可能随时被颁发机构吊销,导致驱动程序不再可用。这里作者选择了另一条途径,利用正确签名的第三方GDRV.SYS驱动程序中的提权漏洞,该漏洞允许读写任意内存,作者的目的是为了(暂时)禁用Windows内核内存中的驱动程序签名机制。一旦禁用了驱动程序签名机制,攻击者便可以加载其未签名的恶意驱动程序。

禁用驱动程序签名执行

攻击者可以通过更改内核空间中的单个变量(单个字节)来禁用驱动程序签名强制实施。在Windows 7(或更早版本)中,此变量称为nt!g_CiEnabled (NTOSKRNL.EXE);在Windows 8和10上,此变量称为ci!g_CiOptions(CI.DLL)。为了找到变量所在位置,攻击者使用了一种来自DSEFix的策略

在Windows 8或10上步骤如下:首先在进程中调用DONT_RESOLVE_DLL_REFERENCES来加载标准的Windows组件CI.DLL,并将其作为一个数据库。加载CI.DLL后通过GetModuleBaseByName函数查询CI.DLL在内核内存中的位置,使用NtQuerySystemInformation(SystemModuleInformation…)来获取所有已加载内核模块的内核地址。

 

图2.找到控制驱动程序签名实施的变量

 

图3.获取模块的内核地址

一旦知道了这些内核地址,攻击者便会从模块的导出地址表中解析导出的CiInitialize函数。然后反汇编该函数找到call CipInitialize()的指令mov dword ptr [address],ecx。下图中展示了地址g_CiOptions。

 

图4.使用HDE反汇编程序查找g_CiOptions的位置

知道了g_CiOptions变量在内核空间中的位置,就可以将易受攻击的第三方驱动程序放到磁盘上启动。有关此漏洞的确切信息请参阅此篇文章(https://www.secureauth.com/labs/advisories/gigabyte-drivers-elevation-privilege-vulnerabilities)。

除了技嘉驱动程序之外,还有其他许多具有类似漏洞的易受攻击的驱动程序,可能会在将来被攻击者滥用,例如VirtualBox (CVE-2008-3431), Novell (CVE-2013-3956), CPU-Z (CVE-2017-15302), ASUS (CVE-2018-18537)。

 

图5.恶意驱动程序的部署方式

恶意驱动程序

成功部署和启动恶意驱动程序后,ROBNR.EXE进程退出,STEEL.EXE开始处理PLIST.TXT文件,列出所有要杀死的应用程序。

该恶意内核驱动程序用于终止进程并删除关联的文件。它采用了多种技巧来杀死这些应用程序,即使它们正在使用中并受到安全产品篡改保护机制的保护。

 

图6.恶意驱动程序启动

 

图7.恶意驱动程序处理来自STEEL.EXE的命令(IOCTL)

在恶意驱动程序中发现以下字符串,表明恶意驱动程序很可能是由RobbinHood勒索软件背后的同一作者构建的:

C:\Users\Mikhail\Desktop\Robnhold\x64\Win7Release\Robbnhold.pdb

删除文件

恶意驱动程序具有多种删除文件的方法,但它不会只选择一种方式,而是按顺序运行这些方法确保文件真正删除。

要删除正在使用的文件,恶意驱动程序直接在NTFS.SYS存储设备上发出I/O请求数据包或IRP。通过清除ImageSectionObject和DataSectionObject指针,存储设备将假定文件未在使用中,并且即使文件仍作为进程运行也会被安全删除。此技巧的使用请参见此文

 

图8.恶意驱动程序使用多种方式删除文件

 

图9.恶意驱动程序删除正在使用的文件

终止进程

删除文件后,STEEL.EXE将杀死与文件关联的所有进程,也是通过恶意内核驱动程序来完成的。

 

图10.恶意驱动程序终止进程

依靠对象句柄过滤进行篡改保护的端点保护进程无法防止内核模式的进程终止或文件删除。恶意驱动程序打开的进程句柄是内核句柄,而内核句柄是不能被过滤的。因此,恶意内核驱动程序可以杀死这些进程的同时不干扰端点安全控制。有一种解决方案是,让端点保护进程监视任何试图内核模式驱动程序的进程,并防止安装发生。

如果该进程作为服务运行,则Windows的服务控制管理器将(通常)尝试重新启动刚刚被杀死的进程,但会因相关文件不存在而失败。安全应用程序将被有效永久禁用,重新启动服务的失败尝试将显示在事件日志中。

当STEEL.EXE杀死了PLIST.TXT列表中的所有进程和文件后将退出。现在,勒索软件可以不受阻碍地加密系统上的所有文件。

可以采取哪些措施来防止此类攻击?

即使用户安装好了所有的补丁,且电脑上没有已知的漏洞,仍然有可能被攻击,因为攻击者利用的漏洞是他们自己带来的。那么,我们可以做些什么来阻止攻击者的初始访问呢?

采用三管齐下的方法,可以最大程度地降低遭受攻击的风险。

1.破坏整条攻击链的威胁保护

当今的勒索软件往往了使用多种技术,把防御集中在单一的技术上只会让你面临的的风险上升。取而代之的是应该部署多种技术来尽可能多地攻破攻击的各个阶段,并将公共云集成到安全策略中。

2.严格的安全措施

包括:

· 使用多重验证(MFA)

· 使用通过密码管理器管理的复杂密码

· 限制访问权限;仅向用户帐户和管理员授予他们所需的访问权限

· 进行定期备份,并将其置于离线和离线状态,以使攻击者无法找到它们

· 锁定RDP,如果不需要它,可以关闭或使用速率限制,2FA或者VPN

· 确保启用了篡改保护,篡改保护旨在防止勒索软件禁用端点保护的情况发生

3.持续的员工教育

人往往是网络安全中最薄弱的环节,网络犯罪分子正是利用人类心理和行为谋取不法收益的专家。因此,保障员工获得安全方面的教育也是很重要的。

本文翻译自:https://news.sophos.com/en-us/2020/02/06/living-off-another-land-ransomware-borrows-vulnerable-driver-to-remove-security-software/如若转载,请注明原文地址


文章来源: https://www.4hou.com/posts/N5J8
如有侵权请联系:admin#unsafe.sh