Google白帽发现Windows bug

上一篇 / 下一篇  2019-03-22 13:27:09

  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中应用大多数的补丁。

TAG: Bug 软件测试管理 缺陷管理

 

评分:0

我来说两句

日历

« 2024-04-20  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 17969
  • 日志数: 15
  • 建立时间: 2019-02-03
  • 更新时间: 2019-03-25

RSS订阅

Open Toolbar