Windows 10控制流保护技术详解

1 下载量 59 浏览量 更新于2024-07-14 收藏 201KB PDF 举报
"Windows 10 Control Flow Guard Internals (mj0011) - 计算机科学" 本文档深入探讨了Windows 10操作系统中的一个重要安全特性——控制流守卫(Control Flow Guard,简称CFG)。Control Flow Guard是一种旨在防止代码注入攻击的安全机制,这些攻击通常利用缓冲区溢出等漏洞,篡改程序的执行流程,从而执行恶意代码。 **控制流守卫的引入** 控制流守卫首次在Windows 8.1 Preview版中提出,但因为兼容性问题而在正式版Windows 8.1 RTM中被禁用。随后,在Windows 10技术预览版中,这一功能被重新启用,并进行了一些微调。尽管CFG并不完美,但它实现了一种控制流完整性(Control-Flow Integrity,CFI)的概念,目标是阻止那些试图篡改机器代码执行路径的攻击。 **控制流完整性** 控制流完整性是一个安全性原则,其目标是确保程序的控制流只能按照预期的方式进行,不允许任意跳转。这一概念由微软的研究论文“Control-Flow Integrity - Principles, Implementations, and Applications”提出,以及Google的Native Client项目中的沙箱安全模型等进一步研究。控制流守卫(CFG)是这些理论在实际操作系统的应用,特别是在二进制可执行文件中实施的实用控制流完整性及随机化策略。 **CFG的工作原理** 控制流守卫主要防止不受信任的间接调用(indirect call),也被称为“icall guard”。它依赖于编译器生成的控制流图(CFG),该图描述了程序在正常执行时可能的所有合法跳转。在程序运行时,系统会检查所有间接调用的目标,确保它们指向预期的、已验证的函数地址。如果检测到不匹配,系统将触发一个异常,阻止非法的控制流改变。 **用户模式与内核模式** CFG在用户模式和内核模式下都有作用。用户模式下的CFG保护应用程序免受恶意代码的侵害,而内核模式下的CFG则保护操作系统自身及系统级服务的完整性,增强了系统的整体安全性。 **CFG的弱点** 虽然CFG提供了显著的安全增强,但它并非无懈可击。攻击者可能会利用未被CFG覆盖的代码路径,或者通过其他非间接调用方式绕过检查。此外,由于兼容性问题,某些旧的或未优化的软件可能无法与CFG良好地协同工作,这限制了其广泛部署的可能性。 Windows 10的控制流守卫(CFG)是现代操作系统对抗代码注入攻击的一种关键防御手段,它通过限制程序的控制流,增强了软件的安全性。然而,如同任何防御机制一样,CFG也需要持续改进和完善,以应对不断演化的威胁。