CET 影子堆栈
亦称 CET-SS
CET 影子堆栈提供受保护的返回地址状态,以帮助检测受损的控制流返回。处理器的影子堆栈功能只是进程获得有效保护的先决条件之一。
您需要了解的内容
CET 影子堆栈提供受保护的返回地址状态,以帮助检测受损的控制流返回。处理器的影子堆栈功能只是进程获得有效保护的先决条件之一。
工作原理
影子堆栈在普通执行堆栈之外保留一份受保护的返回信息副本。受保护的返回会根据架构规则检查一致性。操作系统管理启用状态、内存权限和线程状态,而运行时必须正确处理异常和上下文切换。
适用场景
修改普通返回地址的堆栈覆盖操作在与受保护的返回状态不一致时,可能会引发控制保护异常。调试器或运行时必须理解影子堆栈环境,而不是将其视为普通的可写堆栈。
如何检查支持与启用状态
CPUID.07H.00H:ECX 第 7 位枚举影子堆栈功能。使用操作系统记录的针对每个进程或每个线程的状态接口来确认启用情况。出现无法解释的崩溃时,有必要在更改保护策略之前检查受支持的软件更新和兼容性。
功能、启用状态与强制执行情况必须分别进行检查。处理器可以支持某项保护,但操作系统、应用程序或虚拟机策略可能并未激活它。数据库中的支持字段并非对运行中系统的证明。
该特性未确立的内容
影子堆栈并不代表支持 IBT,无法保护所有应用程序数据,也不能消除所有控制流攻击。CPU 标签不能证明每个可执行文件和已加载的库都在操作系统的兼容性策略覆盖范围内。
实践中的兼容性与性能
保持操作系统、固件和相关运行时为最新版本。如果某项保护暴露了兼容性问题,请首先使用厂商诊断工具和受支持的更新。宽泛的保护开关可能会影响无关的应用程序,应遵循明确的部署和恢复策略。
实用验证核对清单
- 记录所涉及的具体处理器或平台型号,以及应用程序、操作系统和运行时的版本。保留实际错误或要求的原始措辞。
- 查阅该具体型号的制造商参考资料,然后检查程序运行环境中生效的功能与启用状态。
- 逐项比对所选二进制文件或后端的每项要求。仅凭名称相似的特性、别名或宽泛的技术标签是不够的。
- 确认应用程序选择了预期的实现。在不满足要求时,使用其文档中记录的诊断工具和受支持的回退方案。
- 每次只进行一项受支持的更改并重复相同的负载测试。保留原始配置和恢复路径以便随时使用。
若特性已列出但软件无法使用
首先排查出现故障的具体组件。硬件数据库描述的是记录在案的功能;操作系统或虚拟机监控程序可能会呈现不同的生效环境。非法指令错误同样需要调查实际发生故障的指令和二进制构建版本,因为数据损坏或不相关的未受支持指令也可能产生类似症状。
安装适用于该特定平台的受支持应用程序、驱动程序或运行时版本,并在需要时使用厂商文档记录的基线或回退构建版本。软件更新无法凭空创造处理器缺失的指令。固件和安全策略的更改应遵循系统制造商的规程和恢复计划,而非通用的优化方案。
本说明的来源与适用范围
Intel 64 和 IA-32 架构软件开发人员手册 · Linux 内核:Control-flow Enforcement Technology 影子堆栈
这些参考资料确立了架构行为和软件要求。它们并不独立验证关联硬件型号页面上的每个特性值。如需了解型号支持情况,请使用该页面的制造商证据并检查实际生效的系统配置。本文不提供基准测试、认证或独立审查日期。
来源与验证
编辑归属:Feex。未记录独立审核日期。 我们的研究方式.
- Intel 64 和 IA-32 架构软件开发人员手册 · 第 1 卷和第 2 卷描述了指定名称的指令族和 CPUID;第 3 卷描述了状态、分页、VMX 和保护控制。架构文档并不代表对某一特定型号的支持。
- Linux 内核:Control-flow Enforcement Technology 影子堆栈 · 区分硬件支持、二进制标记、加载器启用和针对每个线程的有效保护。将 IBT 和影子堆栈描述为独立的功能设施。
这篇文章有用吗?
回答"是"或"否"即可。如果您愿意,可以选择一个原因,或添加一段简短附言。
感谢。这有助于我们改进此页面。