控制流保护(CFG)
CFG
Windows8.1预览中引入了新的安全缓解技术,因为兼容性问题,在windows 8.1 RTM 中被禁用。然后再windows 10 中被重新启用。是实现控制流完整性(CFI)的一种方式。
CFG 通过在间接跳转(Indirect Call)前插入校验代码(比如 call dword ptr ss:[ebp-8] 等等 ),检查目标地址的有效性,进而可以阻止执行流跳转到预期之外的地点, 最终及时并有效的进行异常处理,避免引发相关的安全问题。
防止不可信的间接调用
依赖于二进制文件的编译和链接级处理,在机器代码中的每个间接调用之前强制执行附加调用目标检查。
控制流完整性Control-Flow Integrity
防止各种恶意软件攻击重定向程序的执行流。
控制流完整性的-原则(Principles),实施(Implementations), 和应用(Applications).:https://www.microsoft.com/en-us/research/publication/control-flow-integrity-principles-implementations-and-applications/?from=http%3A%2F%2Fresearch.microsoft.com%2Fpubs%2F69217%2Fccs05-cfi.pdf
CFG如何工作:用户模式部分
负责配置结构
增加了五个新字段
包括在构建过程中生成的CFG的关键数据
- CFG检查函数指针(指向空子例程)
- CFG函数表(NT内核使用)
- CFG标志
初始化SystemDllInitBlock和加载配置
初始化LdrSystemDllInitBlock
函数位图布局和目标验证逻辑
附加
CFG如何工作:内核模式部分
CFG弱点