Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。 Windows内核在实现虚拟DOS机(VDM)时存在竞争条件错误,允许恶意的程序修改物理内存的最初4KB页面(被称为0页面)。 在初始化VDM过程中,NtVdmControl(3)所调用的NT!VdmpInitialize将0页面的内容拷贝到虚拟地址0,这样VDM就可以拥有系统的原始中断向量表(IVT)和BIOS数据区的副本。为了实现这个操作,VdmpInitialize使用SECTION_ALL_ACCESS打开\Device\PhysicalMemory,映射扇区的最先4KB,然后从这个映射memmove到虚拟地址0,如果出现了异常的话异常处理程序会解除映射并中断函数;如果memmove操作顺利完成的话也会立即解除映射。 但物理内存是以PAGE_READWRITE权限映射到用户态地址空间中的,因此恶意的线程可能在解除映射之前重新获得执行,然后通过写入映射直接修改0页面。尽管这个竞争条件的机会窗口很小,映射的基址是动态的,VdmpInitialize在每个进程中也只能成功执行一次,但本地登录的攻击者仍可以利用这个漏洞获得对系统的完全控制。
Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。 Windows内核在实现虚拟DOS机(VDM)时存在竞争条件错误,允许恶意的程序修改物理内存的最初4KB页面(被称为0页面)。 在初始化VDM过程中,NtVdmControl(3)所调用的NT!VdmpInitialize将0页面的内容拷贝到虚拟地址0,这样VDM就可以拥有系统的原始中断向量表(IVT)和BIOS数据区的副本。为了实现这个操作,VdmpInitialize使用SECTION_ALL_ACCESS打开\Device\PhysicalMemory,映射扇区的最先4KB,然后从这个映射memmove到虚拟地址0,如果出现了异常的话异常处理程序会解除映射并中断函数;如果memmove操作顺利完成的话也会立即解除映射。 但物理内存是以PAGE_READWRITE权限映射到用户态地址空间中的,因此恶意的线程可能在解除映射之前重新获得执行,然后通过写入映射直接修改0页面。尽管这个竞争条件的机会窗口很小,映射的基址是动态的,VdmpInitialize在每个进程中也只能成功执行一次,但本地登录的攻击者仍可以利用这个漏洞获得对系统的完全控制。