Intel长期与社区合做,以加强操做系统和软件的安全防御。但随着防御技术的加强,攻击者也相应地提升技术手段,JOP(Jump Oriented Programming)和ROP(Return Oriented Programming)就是被普遍采用的手段。由于使用的是内存中已有的代码,因此很难被发现。
Intel和Microsoft在过去的10年里,设计了十多种方案来解决这个问题,最后归结于x86/64架构的CET(Control-flow Enforcement Technology) specification。基于以往的经验教训,包括定义新的扩展指令、改动ISA等,Intel为安全防御机制所定的目标以下。web
CET的两个关键组成部分是shadow stack和indirect branch tracking。
CET中新增的shadow stack彻底用于监控控制流的变化,而传统的栈(程序运行时在内存中所占有的部分空间),同时用于控制流信息和数据的保存。在CET被使能的状况下,CALL指令除了把返回地址压入传统栈中以外,还把它压入了影子栈。传统栈中的内容不受任何影响。执行RETURN指令的时候,返回地址从两个栈中同时弹出,只有它们的内容一致,控制流才会转移到返回地址上去。对影子栈的写保护机制使得攻击者很难同时修改两个栈中的返回地址,也就很难修改控制流,进而实现攻击行为。
Intel的ISA架构下还增长了一条ENDBRANCH指令,用来标识一个合法的间接分支挥着跳转。若是非法,则CPU会产生一个异常,显示器为危险操做。为了兼容,该指令在当前的Intel处理器中被实现为NOP。
Intel长期以来一直致力于减小安全特性对性能的冲击,CET也不例外,但其对性能的影响与软件特性相关。安全