技术讨论 | Windows全版本提权之Win10系列解析
作者:网友投稿 时间:2018-09-20 09:27
2018 年 8 月 27 日,境外安全研究人员 SandboxEscaper 在其个人主页上披露了影响 Windows 10 及Windows Server 2016系统的一个安全漏洞。根据描述,该漏洞存在于Windows的计划任务调度服务中,利用该漏洞攻击者可以从USER提升至SYSTEM权限。
天融信阿尔法实验室第一时间进行跟进,进行漏洞复现和分析。本文将以Windows 10 X64系统平台为基础,详细介绍该漏洞及漏洞利用方法。同时附带利用该漏洞实现的提权工具及源码。


Windows 计划任务调度服务的接口函数(schedsvc!SchRpcSetSecurity())用于修改计划任务相关文件访问控制属性,未验证调用者身份。攻击者可主动调用该接口函数,配合“硬链接(HardLink)”,达到修改指定系统文件访问控制属性的目的。当一些系统服务的关键模块(EXE/DLL)被篡改,再次调用该服务,攻击者的代码将得以执行,且为SYSTEM权限。
三、相关技术在具体讲解漏洞及其利用方法之前,让我们首先简单了解一些与之相关的知识。介绍这部分内容是为了让不熟悉Windows相关特性的读者对该漏洞有更加清晰的认识,熟悉以下内容的读者可以跳过这一部分。
Security Descriptor 安全描述符在Windows系统下,Security Descriptor安全描述符(简称SD) 是包含一个内核对象所有关于安全设置的数据结构。SD中包括用户SID、DACL、SACL。DACL表明了哪些用户可以访问该对象、以什么方式访问该对象(如CreateFile时指定的访问权限)。
系统中每一个文件、进程等等都有对应的内核对象,其中都有一个SD结构,包括每个用户对该文件支持的操作。这里摘取《Windows 安全编程》一书中关于该内容的部分说明,需要详细了解该部分内容的可以读一下这本书。




SchRpcSetSecurity()漏洞函数支持调用者修改部分文件的安全属性,其中安全属性通过SDDL字符串描述,Windows会解析SDDL并转换为SD描述符。有需要了解SDDL详细信息的可以参考尾部连接。
ALPC (Advanced Local Procedure Call)高级过程调用ALPC是一种用户模式与内核模式通讯的方式,也支持进程间通讯。该方式被Windows系统大量使用。ALPC允许在系统内运行的客户端进程要求在同一系统中运行的服务器进程提供某些信息或执行某些操作。
其中Windows计划任务就采用了该方式进行管理,schedsvc模块以服务的方式运行,可以看做一个服务提供者。计划任务管理程序可以通过ALPC调用schedsvc的接口进行一些增删改查操作。
硬链接(HardLink)硬链接是通过将多于一个的路径引用在单个文件的符号链接。通俗的说,硬链接可以看做特殊的“快捷方式文件”。我们可以通过mklink在指定位置为指定文件创建硬链接,这时候就可以通过这2个路径访问同一个文件。

当然硬链接有其他很多限制和特点,这里不做太多介绍,只介绍与本文相关的内容。



如微软所描述,硬链接并没有单独的SD描述符。更改硬链接的安全描述符,即更改了基础文件的安全描述符。
四、漏洞位置


