高效推测执行下的信息流验证
1. 背景与问题引入
在标准执行语义下,一段代码可能是无害的。例如,当代码中对数组的访问有边界条件限制时,攻击者控制输入索引也无法获取数组之外或数组所引用位置之外的信息。然而,在推测执行模式下,情况就变得复杂了。推测执行是 CPU 为减少空闲时间而采用的一种优化技术,它会在不确定程序某部分是否会被执行的情况下提前执行代码。
比如,有这样一段代码,在标准执行时,对数组的访问会先检查索引是否在范围内,只有满足条件才会进行访问。但在推测执行时,可能会在边界检查完成之前就执行数组访问操作。虽然从程序层面看,临时变量的值只有在推测正确后才会写入内存,但对数组的读取操作会将数据加载到缓存中,改变微架构状态。由于边界检查尚未完成,对数组的访问可能会读取内存中的任意字节,这些信息可能会通过共享缓存的时序攻击泄露给攻击者。
2. 检测方法
为了检测此类潜在的信息泄露,我们提供了一种全自动的方法。具体操作步骤如下:
1. 代码编译 :将源代码编译为 LLVM 中间代码。
2. 语义解释 :根据非标准的推测执行语义解释中间代码,将程序转换为转换系统的形式。这种非标准语义允许我们在设置一个表示当前处于推测执行模式的标志后,忽略条件语句。
3. 构建泄漏模型 :为转换系统配备一个泄漏模型,该模型表示攻击者可能的观察结果。例如,任何内存访问的地址都会泄露给攻击者,模拟攻击者通过侧信道攻击获取信息的能力。
4. 分析检测 :使用污点分析和安全模型检查相结合的方法,在转换
超级会员免费看
订阅专栏 解锁全文
3061

被折叠的 条评论
为什么被折叠?



