【论文阅读】基于符号执行的软件缓存侧信道脆弱性检测技术
电子学报 2019 杨超
本文提出基于符号执行的缓存侧信道脆弱性检测技术,通过符号化敏感信息的数据传播过程定位潜在的脆弱点,并通过比较其可能的不同缓存访问地址,判断上述代码在缓存攻击中的可利用性. 本文开发了原型系统 CSCVulDiscover,并针对 RSA 等 3 种密码算法的 12 类实现代码进行测试,总共发现了 125 个脆弱点.
cacheD缺点:
( 1) 只关注 secret 依赖的访存操作地址,未考虑 secret 依赖的访存行为( 见图 2) ;
( 2) 判断脆弱性的符号条件往往无法包含 secret 的所有约束,仅用求解结果作为判断依据将降低其准确性( 见 4. 3 节的示例程序) ;
( 3) 未研究依赖于 secret 的程序控制流的脆弱性
根据缓存的不同利用方式,可以将缓存侧信道脆弱性分为以下两类.
1、基于差分代码执行逻辑的脆弱点 ( 指令缓存 )
2、基于差分数据内存访问的脆弱点 ( 数据缓存 )
本文的检测代码脆弱性的方法:
本文提出一种基于符号执行的软件缓存侧信道脆弱性检测技术,整体思路如图 3 所示:
1、首先基于动态符[7 ]号执行技术获取程序 traces( 执行轨迹) ,然后符号化secret,针对每条 trace 应用符号执行技术,定位所有依赖于 secret 的分支代码或访存操作为可疑的脆弱点,
2、结合这些 traces 判断基于差分代码执行逻辑的脆弱点的可利用性,同时利用可疑脆弱点的符号约束求解技术和具体执行技术,判断基于差分数据内存访问的脆弱点的可利用性.
该技术有以下三个关键阶段:
- 可疑脆弱点定位
采用 PosVulLocator 算法定位可疑脆弱点 - 基于差分代码执行逻辑脆弱点可利用性判断
需要定位分支汇聚点。本文提出一种基于路径比较的分支汇聚点定位法,改进了 BranchTailLocator 算法,提出基于同一函数层面的 trace 比较法,在比对 trace 时,仅考虑其在分支开始的函数层面内的部分,不对比被调用函数的代码细