微软推出了两个新的Windows API,以帮助驱动程序开发人员创建更安全的软件。 微软已经详细说明了其消除未初始化内存问题的下一步,这次针对的是为Windows构建硬件驱动程序的开发人员使用的未初始化内核池内存。 据微软安全响应中心(MSRC)的安全工程师Joe Bialek说,这些未初始化的内存漏洞占近年来微软CVEs的十分之一。 Bialek指出:"2017年到2018年年中,未初始化的内核池漏洞占到上报给微软的所有未初始化内存问题的一半以下。" Bialek上个月详细介绍了微软的InitAll项目,以解决未初始化的内存漏洞。InitAll是在Windows 10 1903版及更高版本的内核模式代码、Hyper-V代码和与网络相关的用户模式服务中启用的。 这是微软为消除与内存相关的漏洞所做的更大努力的一部分,过去十年微软发布的所有补丁中,内存漏洞占了大约70%,部分原因是Windows是用C和C ++编写的。这也是为什么微软正在探索Rust来重写一些Windows组件。" 微软的目标是确保其代码没有内置的未初始化内核池问题,并实施对性能影响最小的解决方案。 这个方案被称为"池归零"(pool zeroing),这是通过Windows 10 2004版中新的Windows内核池应用程序编程接口(API)引入得,其目的是将Windows应用程序和驱动程序开发人员造成的麻烦最小化。 Bialek说:"我们仍然希望,这些缓解措施将在很大程度上消除近年来占微软CVE 5%到10%的漏洞类别的威胁。"电子产品 全球采购很省钱 这些API被称为ExAllocatePool2和ExAllocatePool3。还有一些独立的工具可以支持2004年以前的Windows 10版本。 "这样做的目的是让驱动程序开发人员更清楚地知道他们在程序中做了什么。Bialek解释说:"如果开发人员真的打算对分配进行未初始化或置零,这是没有任何问题的,因为指令行为是在API名称中明确指定的。" Bialek指出,新的pool zeroing API需要修改代码才能使用。为了支持这些API,微软彻底检修了Windows内存管理器,并对未来发布的Hyper-V和网络组件进行了修改。 Bialek说:"我们目前的计划是在不久的将来将所有的内核模式代码转换为新的API,使用自动的错误归档工具来帮助确保所有的东西都被转换。" 微软正在探索如何帮助第三方驱动程序制造商摆脱旧的pool API。 Bialek相信,新的pool API将在很大程度上消除Windows中未初始化的内存漏洞。 他说:"一旦我们完成了将代码转换到新的pool API的工作,目前影响客户的大部分未初始化内存漏洞将在Windows上得到缓解。" "当然,未初始化的内存漏洞仍然是可能的,但在InitAll保护堆栈和使用归零标志的大多数分配之间,这些问题潜伏的机会将小得多。"