导语:Kapersky Lab 使用Exploit Checker技术检测到NAMCO驱动中存在漏洞,可将用户权限提升到系统权限。
最近,我们开始从内部沙箱的Exploit Checker插件中接收可疑事件。管理模式下在用户地址空间中执行代码的行为不断触发启发式,并将一个可执行文件标记为进一步分析。起初,看起来好像我们发现了Windows的0 day本地特权提升漏洞,但触发Exploit Checker事件的样本竟然是干净的签名可执行文件GundamOnline.exe,是BANDAI NAMCO Online Inc(万代南梦宫在线)推出的多人在线游戏Mobile Suit Gundam Online(机动战士高达Online)的一部分。
初始样本使用专用壳加壳,包含反分析技术使静态分析复杂化。例如,它会尝试执行大家熟知的VMware hypervisor检测程序来检测自己是否在虚拟机中启动。首先它将hypervisor的magic值VMXh加载到EAX寄存器,ECX寄存器的值为0x0A,这是一个接收hypervisor版本的特殊命令。然后它在VMware hypervisor I \ O端口0x5658执行一个in命令。如果EBX寄存器由于该操作而被VMXh覆盖,则表示程序正在VMware虚拟机中运行。
我们的沙箱执行日志显示用户空间内存页面在IOCTL请求0xAA012044发送到驱动创建的设备对象\\.\Htsysm7838后立刻被驱动bandainamcoonline.sys调用。在这之前驱动程序已安装好,先被GundamOnline下载到目录 C:\Windows\SysWOW64\ ,之后使用NtLoadDriver()加载,随即删除。
正常情况下,由于SMEP(管理模式执行保护)开启此行为应该不被允许。SMEP是英特尔最新处理器上的一项安全功能,限制管理模式下使用用户内存页面。页面类型由页面表项中的用户/管理员标志决定。如果在管理模式下调用用户内存页面,则SMEP会发生访问冲突异常,系统将触发错误检查并暂停,即所谓的BSOD(蓝屏)。
驱动合法 使用NAMCO BANDAI Online Inc 的证书签名
证书有效期告诉我们两件事。首先,该证书自2012年以来一直有效,这可能意味着第一个存在漏洞的驱动版本是在同一时间发布的。但是,我们没有找到,我们发现的最早的bandainamcoonline.sys样本可追溯至2015年11月。其次,因为它在三年前已经过期,所以在系统中安装使用此证书签名的驱动程序是不可原谅的。当然,没有任何事可以阻止你安装和加载一个证书有效期过期的驱动程序。
为找到触发启发式的原因,我们需要静态分析驱动程序。在DriverEntry函数中,它首先解码内存中的设备对象名称字符串,然后创建设备\\.\ Htsysm7838。另外两个编码字符串——bandainamcoonline和bandainamcoonline.sys ,没有在驱动程序中使用。
驱动程序本身非常小,只包含三个已注册的主要函数。处理请求的函数IRP_MJ_DEVICE_CONTROL只接受两个IOCTL:0xAA012044和0xAA013044。调用时,它会检查输入和输出缓冲区的大小,并最终调用ExecuteUserspaceCode函数,将输入缓冲区的内容传递给它。
ExecuteUserspaceCode函数对输入缓冲区(包含一个指向用户空间函数或shellcode的指针)进行一次检查,并在禁用SMEP的同时保存原来的CR4寄存器值。然后调用该函数,并将它作为参数传递给MmGetSystemRoutineAddress。最后,恢复原来的寄存器状态,重新启用SMEP。
为直接从提供的驱动程序中调用用户函数,首先要删除CR4寄存器中的特定比特位以暂停SMEP,这是DisableSMEP函数的作用。之后,原始CR4值由EnableSMEP函数恢复。
此漏洞的产生是因为除了输入缓冲区格式的基本检查之外,没有其余的检查。因此,系统中的任何用户都可以使用该驱动程序提升权限,并在OS的Ring 0层执行任意代码。即使驱动程序不在系统中,攻击者也可以通过Windows API函数进行注册并利用该漏洞。
我们意识到此漏洞和去年在Capcom驱动程序中发现的完全一样。
二进制比对发现,bandainamcoonline.sys和capcom.sys几乎完全相同。只是编码的字符串和数字签名有细微的变化。由于我们能够找到的最早存在漏洞的驱动程序样本可追溯至2015年11月,所以可以认为这个漏洞最早出现在bandainamcoonline.sys驱动程序中,它比Capcom早一年使用类似的驱动程序。
我们相信这两个驱动程序肯定是从相同的源代码编译的,作为反黑客解决方案的一部分阻止用户在游戏中作弊。隐蔽地禁用和重新启用SMEP函数表明此设计是故意的。但是由于驱动程序没有进行额外的安全检查,因此任何用户都可以使用Windows API(如DeviceIoControl())调用和利用存在漏洞的IO控制代码。这本质上使驱动程序成了一个rootkit,允许任何人以最高特权与操作系统进行交互。实际上,我们已经发现多个恶意软件样本(已被我们的产品检测到)使用了capcom.sys中一个之前公布的已知漏洞,将他们的权限提升到系统权限。
发现漏洞之后我们联系了BANDAI NAMCO Online Inc,供应商迅速响应,并在三天后发布了补丁。他们完全卸载了驱动,不再由游戏执行文件加载。这与Capcom所做的非常类似,这样做完全可以接受。
如果没有我们的Exploit Checker技术(沙箱中的插件,KATA——卡巴斯基反目标攻击平台中也有),就不可能发现这个漏洞。该技术旨在监视post-exploitation阶段最先发生的可疑事件,并且可以检测ROP、堆喷射、栈溢出等常见漏洞攻击技术。这种情况下,以管理模式在用户地址空间中执行代码将触发多个启发式,并将样本标记为进一步分析。如果采用令牌交换来提升进程权限(LPE漏洞利用中广泛使用的一种技术),它将被Exploit Checker启发式检测自动检测到。
Kaspersky Lab将文中提及的存在漏洞的驱动程序标记为:
HEUR:HackTool.Win32.Banco.a
HEUR:HackTool.Win32.Capco.a