Windows 1%用户的静默漏洞缓解机制
随着Windows 10加速发布周期,微软经常引入新功能来缓解设计不良的API或易被滥用的行为。但许多缓解措施往往缺乏文档记录,甚至未通过常规Win32 API公开。这使得第三方开发者处于安全盲区。
未文档化的缓解案例
典型的静默缓解案例是OBJ_IGNORE_IMPERSONATED_DEVICEMAP
和OBJ_DONT_REPARSE
这两个OBJECT_ATTRIBUTE标志——它们最终被文档化部分是因为我的建议。从修复我报告的漏洞到文档化用了5年时间,这在微软的时间尺度上可能算"迅速"。
NtLoadKey3系统调用
在Windows 10 2004(以及至少1909版本)中,微软引入了仅通过未文档化系统调用可用的新缓解措施。NtLoadKey3
是注册表键加载功能的最新迭代:
- 演进历史:
- 原始版
NtLoadKey
- XP时代
NtLoadKey2
增加标志位 NtLoadKeyEx
添加可信配置单元支持- 现在
NtLoadKey3
采用全新设计
- 原始版
漏洞缓解原理
该调用主要修复以下安全问题:
- 加载完整注册表配置单元需要调用者的有效令牌具有
SeRestorePrivilege
权限 - API创建文件时(包括主配置单元和恢复日志)存在符号链接攻击风险
- 日志文件会继承主配置单元的安全描述符
新版本通过新增参数指定文件创建时模拟的访问令牌,使权限检查与危险操作使用不同令牌,从而有效缓解问题。用户配置文件服务现已采用此机制。
技术实现细节
逆向得到的函数原型:
|
|
新设计将信任密钥和事件句柄整合为句柄列表,提高了系统调用的扩展灵活性。最后一个参数用途尚不明确。
微软的文档化困境
尽管该安全修复已反向移植到所有支持的操作系统,微软仍未公开说明。在当前注重开发体验的微软生态中,此类关键安全特性的文档化仍然滞后,给第三方应用安全带来持续挑战。