静态软件分析中的增量式虚假路径消除
1. 引言
在大型工业软件包中查找漏洞的一种技术是静态程序分析。虽然它已被证明具有可扩展性和快速性,但通常会在不同程度上受到潜在误报的影响。主要原因在于,与软件模型检查不同,静态程序分析通常在相当抽象的层面上进行,例如没有任何数据抽象的控制流图(CFG)。因此,程序的语法模型是一种粗略的抽象,报告的错误路径可能是虚假的,即它们可能与具体程序中的实际运行情况不对应。
本文提出了一种增量算法,该算法会自动调查错误路径并检查它们是否不可行。为此,以区间方程形式存在的语义信息会自动添加到之前纯粹的语法模型中。这种语义信息仅在检测到潜在漏洞(即生成反例)后才会被纳入。这既确保了程序无漏洞部分的可扩展性和速度,又允许在发现漏洞后进行更深入的挖掘。
反例的可行性通过在区间域上进行约束求解来分析,即给定路径内所有变量的可能范围。如果相应方程系统的最小解为空,则反例路径是虚假的。导致空解的方程子集称为冲突。在第二步中,我们通过一个有限观察器来细化语法模型,该观察器排除所有产生相同冲突的路径。这些步骤会迭代应用,直到找不到新的反例,或者找到一个无法证明为虚假的反例。
2. 基本定义和概念
2.1 标记转换系统
本文使用标记转换系统(LTS)来描述抽象程序的语义。LTS 由 (S, S0, A, R, F) 定义,其中 S 是状态集,S0 ⊆ S 是初始状态的子集,A 是动作集,R ⊆ S×A×S 是转换关系,每个转换都用动作 a ∈ A 标记,F ⊆ S 是最终状态集。如果对于每个状态 s ∈ S 和动作 a ∈ A,最多只有一个后继状态使得 (s, a, s′) ∈ R,则该 LTS 是确定性的
超级会员免费看
订阅专栏 解锁全文
1117

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



