现代处理器硬件安全机制与漏洞剖析
1. 控制流保护技术
在处理器安全领域,控制流的完整性至关重要。目前有两种主流的控制流保护技术,分别是英特尔的控制流强制技术(CET)和 ARM 的指针完整性机制。
1.1 英特尔控制流强制技术(CET)
英特尔在 2016 年 6 月宣布了控制流强制技术(CET)。CET 通过定义一个影子栈来保护向后边缘控制流转移。当 CET 启用时,调用指令会将返回地址同时压入影子栈和原始栈。任何返回指令会弹出影子栈,并确保其与从应用程序栈获取的返回地址匹配。若不匹配,则会引发异常并停止应用程序的执行。影子栈的完整性由内存管理单元(MMU)保护,以防止攻击者覆盖其中的返回地址。任何试图访问影子栈内容的内存指令都会被 MMU 阻止,并引发页面错误。
为了保护向前边缘控制流转移,CET 使用 ENDBRANCH 指令来标记应用程序代码中调用和间接跳转指令的合法着陆点。当发出跳转指令时,CET 进入 WAIT FOR ENDBRANCH 状态。如果 ENDBRANCH 指令不是程序流中的下一条指令,处理器将引发控制保护错误。
1.2 ARM 指针完整性机制
ARM 的指针完整性机制利用加密原语(哈希)来验证控制流指针在使用前是否未被损坏。每个控制流指针的指针认证码(PAC)存储在指针的未使用位(即指针的 24 个最高有效位)中。PAC 使用自定义指令进行计算和认证: - PAC