记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

Google白帽发现Windows bug

2019-03-21 12:20

Google Project Zero白帽研究员James Forshaw发现位于Windows kernel模式驱动中的漏洞,利用该漏洞可以进行权限提升。该漏洞是由于处理特定请求时缺乏必要检查导致的。

Windows使用PreviousMode域来设置UserMode或KernelMode,然后确定调用的参数是否来源于可信源。

该机制也用于文件创建和打开,kernel模式代码可以从不同的API函数中选择,包括到I/O管理器内部函数IopCreateFile的函数。

在这种情况下,PreviousMode会被分配一个特定的变量来确定是否检查有效的参数和缓存。

操作系统使用该变量进行设备对象的检查,即是否是UserMode。IopCreateFile中的Options参数会暴露给一些API函数,这些API函数只能从kernel模式来调用以设定覆盖AccessMode的flag,并设置为KernelMode。

IoCreateFile只能从kernel模式代码调用,并且没有系统调用传递参与,因此任意的调用都会使用线程中设置的previous mode。如果IoCreateFile被一个previous mode为UserMode的线程调用,这就意味着会执行SecAC和MemAC。

强制执行MemAC是有问题的,因为kernel代码无法传递到IoCreateFile的kernel模式指针,这会使API很难使用。但调用IoCreateFile不能只修改线程的previous mode为KernelMode,因为SecAC会被禁用。

在特定情形下,会出现访问强制检查的行为,因此有kernel mode驱动会打开用户模式应用指定的对象名。

Forshaw解释说,

并不是kernel mode下运行的Windows中所有的驱动在执行特定(IRP_MJ_CREATE)请求时都会执行所有的访问检查。Kernel mode代码会进行强制检查,为恶意活动打开了后门。

执行的操作类型和操作的特定参数都是在IRP结构之后的IO Stack Location结构中传递的。在打开文件的情形中,主要的操作类型是IRP_MJ_CREATE,使用了IO_STACK_LOCATION结构的Create union域。

如果攻击者能够控制文件创建或打开调用的参数,就可以用来自用户模式下的请求,发送check设定为KernelMode的IRP_MJ_CREATE请求,这样就可以进行权限提升。

要完成本地权限提升,还需要以下部件:

1、kernel mode Initiator (调用IoCreateFile或IoCreateFileEx的代码)会设定INPC和IFAC flags,但是不会设定OFAC。

2、使用RequestorMode的有漏洞的接收器在处理IRP_MJ_CREATE进行安全检查时并不会检查SFAC。

攻击者需要可以让Initiator打开接收器处理的设备对象。接收器中的安全检查会被绕过因为Irp->RequestorMode是KernelMode,但SL_FORCE_ACCESS_CHECK flag并不会检查。研究人员发现了多个initiator和接收器的实例,但是链接在一起并不会造成权限提升。研究人员称会进一步研究。

研究人员认为第三方驱动也存在被攻击者利用的风险,因此建议所有的kernel驱动开发者尽快检查带来确保IRP请求的正确处理,并对文件打开API的使用进行防护。

微软称会在未来的Windows操作系统版本中解决该bug,会在Windows 10 19H1中应用大多数的补丁。

本文翻译自:https://securityaffairs.co/wordpress/82642/hacking/windows-privilege-escalation-bug-class.html如若转载,请注明原文地址: http://www.hackdig.com/03/hack-54632.htm
知识来源: https://www.4hou.com/vulnerable/16908.html

阅读:43671 | 评论:0 | 标签:漏洞 windows

想收藏或者和大家分享这篇好文章→复制链接地址

“Google白帽发现Windows bug”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云