内核模式威胁的最新技术与防御方式(第一部分)

 

概述

近期以来,Windows的操作系统不断增加其安全机制,包括PatchGuard、Driver Signature Enforcement和SecureBoot。这些机制,已经有效阻止了一些常见的内核模式恶意软件,包括TDL4和ZeroAccess。然而,一些高级攻击者已经找到了逃避这些防护机制的方法,并继续利用内核模式的恶意软件实施攻击行为。以内核模式运行的威胁通常可以完全控制被感染的计算机,可以重写操作系统的规则,并且可以轻松篡改安全软件。

APT小组意识到了内核模式威胁的优势所在,并且正在持续利用它们来对抗防御机制。最近,我们在Black Hat中发表了一场关于内核模式威胁的演讲,其中深入研究了内核模式威胁的演变以及这些攻击的当前态势。通过对现有技术的整合,再加之高强度的攻击,攻击者可以访问一系列功能,从而实现更加复杂、更加难以检测的内核模式攻击。我们的下一篇文章将会重点讨论如何防御这些攻击,但在此之前,必须首先了解内核模式威胁所使用的最新技术。通过这两篇文章,我们希望能够让大家更加了解这些威胁,最终改善整个行业的防御态势。

 

内核模式威胁与平台防护的演变

早期的内核恶意软件

在十多年前,第一个真正意义上广泛传播的内核恶意软件问世,当时还没有针对这些威胁的系统级防御机制,因此这些恶意软件迅速爆发。包括RustockTDSSZeroAccess在内的这些恶意软件,在其巅峰时有高达数百万的感染。这些恶意软件采用了相似的技术,都是通过感染磁盘上的现有驱动程序,来获取ring0执行。这些恶意软件通常还包含Rootkit功能,用于隐藏或阻断用户和安全软件的文件、进程和网络连接。

为了应对21世纪后期广泛存在的恶意软件,Microsoft开发了两种技术,用于减轻这些恶意软件的威胁。第一个是PatchGuard,PatchGuard用于检测rootkit类型的技术(例如挂钩),然后将会造成系统发生崩溃。PatchGuard并不完美,并且可以被绕过,但这一机制不断发展,目前已经成为了攻击者的一大障碍。

此外,Microsoft还新增了另一种保护机制:驱动程序强制签名(DSE  )。驱动程序强制签名要求所有驱动程序在加载之前,都要使用有效的签名。这一机制可防止在系统上加载恶意软件(在进程中破坏数字签名)的驱动程序。

随着64位系统市场份额的增加,这两种防御方式显得至关重要。

Bootkit恶意软件

为了逃避PatchGuard和驱动程序强制签名机制,一些恶意软件的作者开始利用Bootkits,将他们的恶意软件加载到内核模式。Bootkits会对与前期操作系统引导过程相关的代码进行篡改,例如MBR、VBR或其他特定操作系统的引导加载程序代码。

这类恶意软件,比较典型的是eEye BootRoot的原始PoC、SinowalTDL4XPaj等。其中,XPaj的一个重要特点在于,它在启动过程的早期,以挂钩的方式来绕过PatchGuard,这一过程甚至发生在PatchGuard自身被初始化之前。这也就意味着,PatchGuard默认将会把钩子视为合法代码中的一部分。

目前,安全防护领域通过Secure Boot(安全引导 )机制来防范Bootkit恶意软件。这一技术已经加入到UEFI(统一可扩展固件接口)规范之中,并且在Microsoft Windows 8系统中首先实现。加入Secure Boot机制后,UEFI Runtime(替代原来的BIOS)在操作系统引导加载程序执行之前,会验证其数字签名是否正确。

因此,恶意软件对引导加载程序做出的任何修改,都会导致计算机无法正常启动。Microsoft使用了Trusted Boot(可信引导 ),继续对这种方法进行扩展。Trusted Boot与Secure Boot的工作方式类似,但Trusted Boot会在整个启动过程中持续验证签名。Secure Boot存在一个缺点,就在于它不能防范固件被篡改,因为固件被允许在Secure Boot检查之前运行。然而,例如Intel的Boot Guard计数器固件攻击技术,会将信任根(Root of Trust)移动到CPU的Immutable Section中。

 

与其他漏洞捆绑的威胁

虽然DSE、PatchGuard和Secure Boot能够防范常规的内核模式威胁,但是一些大规模的恶意组织仍然在寻找新方法来规避这些平台的保护。APT级内核模式恶意软件通常会安装一个合法的、经过签名的、存在漏洞的驱动程序,然后利用该应用程序获取内核代码,从而绕过DSE的防护。UroburouDerusbiSlingshot等威胁都采用这这种方法。其中,Derusbi还窃取了合法的证书,并使用这些证书来对恶意软件驱动程序进行签名。

此外,还有更高级别的威胁(例如Duqu),它们不再安装存在漏洞的驱动程序,而是直接利用0 Day内核。为了进一步规避检测,Duqu会挂钩到Kaspersky驱动程序的导入地址表,并使得驱动程序认为恶意的用户进程是受信任的Kaspersky进程。随后,卡巴斯基驱动程序将该进程加入白名单,同时会防止该进程被本地用户或其他恶意软件终止。考虑到持久性,Duqu还会将驱动程序植入到网络DMZ中的磁盘上,该驱动程序经过一份窃取的富士康证书签名。该植入程序能够将网络流量重定向可以作为整个网络的入口
还有一个需要重点关注的恶意程序,是DOUBLEPULSAR。这是一种非常轻量级的内核模式植入程序,仅存在于内存中。这一恶意程序重启后不会具有持久性。它通常借助远程ring0漏洞加载到系统上,例如永恒之蓝。DOUBLEPULSAR允许攻击者通过在SMBv1驱动程序(srv.sys)中挂钩函数指针来对系统进行远程访问。在这时,PatchGuard没有监视这一功能指针。通过这样,攻击者可以加载更多的内核模式代码,或者注入一个更为完整的威胁,例如在WannaCry和NotPetya攻击中所进行的那样。

为了缓解对内核模式的漏洞利用,Microsoft发布了基于虚拟化的安全性(Virtualization Based Security,VBS)。在该机制中,内核由管理程序进行沙箱化,不再完全地控制系统。

管理程序代码完整性(Hypervisor Code Integrity,HCVI )机制则是对VBS的扩展,并要求对所有的内核代码进行签名。此外,不再允许内核内存可写可执行(W^X)。HVCI阻止了许多内核模式威胁,例如Turla Driver Loader(将在下篇文章讨论)和DOUBLEPULSAR。Credential Guard还会利用HVCI来保护mimikatz等工具的凭据。

 

展望

到目前为止,我们所讨论的缓解措施只是Microsoft在过去10年中实施的内核缓解措施中的一些重要机制,他们在最近的操作系统版本(特别是Win 10)中显著加大力度对这些威胁进行防范。然而,操作系统的市场份额仍然是一个主要问题,目前的绝大多数用户群体仍在使用Win 7系统,而许多已经升级到Win 10的组织中没有启用最先进的内核保护。由于这些保护措施还没有得到广泛的实施,因此攻击者仍然会发动地恒本的内核攻击。

那么,我们可以采取哪些措施,来防范内核模式威胁呢?在我们的下一篇文章中,我们将会介绍对攻击方式的最新研究成果,并直接分析如何防范这些威胁。在这些防范方式中,也包括红蓝对抗、漏洞挖掘和实时防护。尽管内核模式威胁仍会继续发展,但恶意软件检测技术也在同步进行发展,并且不断防御新的内核模式威胁。在下篇文章中,我们也会提出最新的检测方式,从而在内核模式威胁不断发展的背景下始终抢先一步。

(完)