模块化防御的自定义指令支持与处理器安全增强方案
1. 引言
软件安全面临着来自网络攻击和物理攻击的双重威胁。物理攻击对微控制器而言,可分为被动的侧信道分析攻击和主动的故障注入攻击;网络攻击则主要包括利用软件漏洞劫持控制流的攻击。保护软件免受这些攻击是一个极具挑战性的问题,传统的软件防护方法在应对故障注入攻击时效率较低,而现有的控制流完整性(CFI)保护方案也存在各种局限性。
2. 攻击类型与控制流完整性概述
- 攻击类型
- 物理攻击 :包括被动的侧信道分析攻击,攻击者通过观察设备的能量消耗、电磁辐射等泄露信息来获取敏感数据;以及主动的故障注入攻击,攻击者通过注入故障来改变程序的执行流程。
- 网络攻击 :主要分为“代码基”攻击和“数据基”攻击。“代码基”攻击如返回导向编程(ROP)攻击,攻击者通过破坏栈来调用预先选择的代码片段;“数据基”攻击则是利用数据污染来改变指针的指向,从而导致控制流被篡改。
- 控制流完整性(CFI) :CFI 旨在防止控制流被劫持,其核心思想是在运行时验证程序的控制流是否符合预期。通常,程序的控制流可以用静态控制流图(CFG)来表示,该图可以在编译时确定。
3. CFI 实现方案对比
方案类型 | 优点 | 缺点 | <
---|