[发明专利]一种基于共享不可行路径池的代码并行验证方法和装置在审
申请号: | 202010344638.2 | 申请日: | 2020-04-27 |
公开(公告)号: | CN111444112A | 公开(公告)日: | 2020-07-24 |
发明(设计)人: | 卜磊;闾乐成;谢准一;郭育鲲;赵建华;李宣东 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/41 |
代理公司: | 江苏银创律师事务所 32242 | 代理人: | 孙计良 |
地址: | 210001 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 共享 可行 路径 代码 并行 验证 方法 装置 | ||
本发明公开了一种基于共享不可行路径池的代码并行验证方法和装置。该方法分为初始化过程、找出潜在路径过程和对潜在路径分析过程。在初始化过程中,输入的源程序和验证目标被构建成相应的SAT约束编码G。然后通过对不可行路径池中路径和SAT约束编码G的SAT求解,得到其SAT解对应的路径作为潜在路径存入并行任务池。再以多线程并行方式对并行任务池各个潜在路径进行SMT求解,若SMT无解,则抽取不可满足的最小集合X对应的不可行程序路径片段加入至不可行路径池。由此通过迭代,最终得到验证目标是否可达。为提高验证效率,本发明还增加了对不可行路径剪枝步骤。相比于现有技术,本发明大大提高代码验证效率。
技术领域
本发明涉及软件安全领域,特别涉及通过模型验证软件代码安全性的技术。
背景技术
随着计算机技术的不断发展,计算机软件在人们的日常生活中扮演着越来越重要的角色。在此情况下,软件的安全性和正确性保障已经成为当前至关重要的问题。
模型检验方法是新近所提出的用于检验软件安全性的方法。该方法利用现代编译器将代码转化为中间代码,在中间代码的基础上建模进行约束抽取,并对约束求解得到验证结果。模型检验方法由于易于自动化和提供反例而成为软件安全领域的热门。
在最初的模型检验方法中,将程序代码作为一个整体,通过对整体代码行为进行编码求解以判断代码的安全性。但在实际应用的环境中,由于现实所使用的软件规模通常都非常庞大,程序代码作为一个整体进行建模,抽取约束,再进行约束求解验证所需要耗费的资源非常庞大,耗时也非常长,因此很难实际应用。
为降低模型检验方法的复杂度,现有技术提出了面向路径进行模型检验的方法,也就是每次模型检验单独验证一条执行路径而非程序代码整体。但这种面向路径进行模型检验存在程序路径数过于庞大的问题,也就是若程序路径数目非常大,需要验证的路径也非常多,该方法进行约束求解验证所需要耗费的资源同样非常庞大,耗时非常长。
发明内容
本发明所要解决的问题:提高面向路径进行模型检验的效率。
为解决上述问题,本发明采用的方案如下:
根据本发明的一种基于共享不可行路径池的代码并行验证方法,包括如下步骤:
S1:获取用户输入的源代码和验证目标,所述验证目标为用户所输入的源代码中指定位置在所指定的步数内是否可达;
S2:将用户输入的源代码转换成流程控制状态图,并初始化并行任务池T为空,共享不可行路径池I为空以及所述并行任务池T的最大路径数K;
S3:根据流程控制状态图和验证目标构建SAT约束编码G;
S4:将所述共享不可行路径池I中的各个路径片段取反编码后与所述SAT约束编码G输入至SAT求解器进行求解;若SAT求解器有解,则将SAT求解器所求的解对应至程序路径生成相应的潜在程序路径加入至所述并行任务池T,并将该组解取反加入所述SAT约束编码G以避免重复路径;若SAT求解器无解,则说明用户所输入的源代码指定位置在所指定的步数内不可达,结束代码验证;
S5:持续步骤S4直到所述并行任务池T中的潜在程序路径数达到最大路径数K;
S6:根据并行任务池T的最大路径数K构建包含K个线程的线程组,然后将所述并行任务池T中的每个潜在程序路径分别输入至线程组的各个线程中,由对应的线程进行SMT求解;所述SMT求解包括如下步骤:
S61:根据所输入的潜在程序路径和所述流程控制状态图构建SMT约束编码W;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010344638.2/2.html,转载请声明来源钻瓜专利网。