一种基于符号执行的RustCrate缺陷检测方法

文档序号:34641237发布日期:2023-06-29 16:58阅读:24来源:国知局
一种基于符号执行的RustCrate缺陷检测方法

本发明属于软件测试领域,具体是一种基于符号执行的rust crate缺陷检测方法。


背景技术:

1、对于现代编程语言而言,安全系统编程与执行性能通常是关键的技术要求。rust因其既可以提供像高级语言一样的内存安全保障,又可以提供像低级语言一样的执行效率,而成为了流行的编程语言解决方案。rust也被广泛用于各种软件工程的开发,如操作系统、游戏引擎、区块链项目等。

2、然而rust语言本身也存在着其自身的缺陷。rust语言通过严格的编译时检查来为rust软件提供静态的安全证明。然而采用严格安全规则意味着更多的限制,开发人员在部分情境下需要绕开rust的安全规则。rust允许程序员通过在代码中添加一个unsafe标签来绕过主要的编译器安全检查,但也因此不可避免的引入了安全问题。

3、常见的安全问题包括悬空指针、缓冲区溢出、未初始化读取、双重释放、无效释放等。这些安全问题轻则导致程序异常、系统内存浪费、程序运行速度减慢,重则导致程序崩溃甚至被黑客利用进行远程代码执行或窃取程序数据,相关的cve(通用漏洞披露)报道也层出不穷。

4、符号执行技术通过采用符号值替代程序所使用的真实值,可以探索程序可行的执行路径以及与输入符号值相关联的符号表达式约束,并在此基础上根据预定义的检测规则进行软件工程的缺陷检测。

5、rust语言所编译的webassembly字节码相较于传统的c、c++以及solidity语言的编译目标有着其自身的特点。rust语言由于其独特的错误处理机制,在其函数调用之间往往会采用内存作为中转,同时辅之以大量的条件判断。这样的特点会为符号执行引入大量的程序分支,并放大符号执行的路径爆炸效应,增加符号执行的时间与空间开销。


技术实现思路

1、本发明针对现有技术中存在的rust crate缺陷检测方法不成熟,符号执行技术扩展性差的问题,提出了一种基于符号执行的rust crate缺陷检测方法。

2、本发明提供的一种基于符号执行的rust crate缺陷检测方法,包括如下步骤:

3、步骤一、接收待分析的rust crate为输入,判断该rust crate的输入格式是否为二进制webassembly字节码格式,如果是,则不作处理,进入步骤二;否则,该rust crate为标准rust源代码格式,利用rust编译工具将该rust crate编译为webassembly字节码;

4、步骤二、读取webassembly字节码文件,进行合法性验证,判断该字节码文件是否符合二进制webassembly字节码格式,如果是,进入步骤三;否则,终止本次rust crate缺陷检测;

5、步骤三、根据webassembly字节码文件构建控制流图并生成对应的webassembly实例,将该webassembly实例输入符号执行引擎进行符号执行,探索该rust crate的所有可行的程序执行分支以及对应的路径约束条件,同时使用求解器进行剪枝,并收集路径约束信息;

6、步骤四、符号执行期间对字节码中的指令进行逐条解析,判断该指令是否属于分支指令,如果是则采用基于共享的轻拷贝分支方案对该指令进行符号执行,否则,根据该指令的类型对其进行符号执行;

7、所述的基于共享的轻拷贝分支方案是指,将遇到该指令时收集的程序分支的路径约束信息分为可变数据集与不可变数据集,仅深度拷贝可变数据集,不可变数据集由不同路径分支共享;其中,是将可变数据集拷贝两份存入内存中分别供后续左右分支程序使用,将不可变数据集存储一份在内存中,供后续不同路径分支程序共享使用;

8、步骤五、符号执行完成后,获得rust crate所有的可行的程序执行分支以及对应的路径约束信息。使用预先定义的缺陷检测规则来对路径分支信息进行可满足性匹配。

9、所述的步骤五中,预先定义的缺陷检测规则包括如下:

10、rust panic缺陷:此缺陷即rust程序运行时发生的运行时异常,其检测方法是检测是否存在可行的程序执行分支,执行至rust panic族系统函数;

11、panic safety缺陷:此缺陷即rust处理panic释放资源时因资源的不一致性带来了内存安全问题,其检测方法即检测unsafe rust下生成的对象的生命周期是否可以覆盖至rust panic的产生;

12、参数可变性缺陷:此缺陷即函数的不可变参数在函数内部发生了改变,其检测方法即检测函数的不可变参数是否在函数执行过程中内容被改变;

13、外部函数交互缺陷:此缺陷即rust程序与其他语言程序通过外部函数调用交互时移交对象的所有权却并未进行后续处理,其检测方法即检测是否利用rust系统函数遗忘了对象的所有权并通过外部函数调用将对象移交至外部语言程序。

14、所述的步骤五中,如果有缺陷检测规则匹配成功,则报告当前rust crate存在的安全缺陷;否则报告当前rust crate安全。

15、与现有技术相比,本发明的优点和积极效果在于;

16、1)本发明的基于符号执行的rust crate缺陷检测方法,通过预定义一组rustcrate缺陷检测规则,能够在对rust crate的webassembly字节码进行符号执行的同时,探索rust crate所有可行的程序执行分支,进而检测rust crate内潜在的各种缺陷;

17、2)本发明的基于符号执行的rust crate缺陷检测方法,通过基于共享的轻拷贝分支方案,能够针对rust crate的webassembly的代码特点,进行了特定优化,减少了符号执行的时间和空间开销,进而提高整体的缺陷检测效果。



技术特征:

1.一种基于符号执行的rust crate缺陷检测方法,其特征在于,包括如下步骤:

2.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(2)中,构建控制流图时,将基本执行指令程序代码作为块,控制指令作为边,根据指令类别将webassembly字节码划分为块和边,形成控制流图并生成相应的webassembly实例。

3.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(2)中,收集的路径约束信息包括函数调用关系、全局变量、内存当前状态、以及关注的变量和常量值。

4.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(3)中,将内存区域划分为两种,分别为共享路径信息区和独有信息区,独有信息区内存储可变数据集,共享路径信息区存储不可变数据集,所有程序分支对应的可变数据集均存在独有信息区内;符号执行引擎判断数据为可变数据还是不可变数据,对应从独有信息区或共享路径信息区进行数据交互。

5.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(4)中,rust panic缺陷是指rust程序运行时发生运行时异常。

6.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(4)中,panic safety缺陷是指rust处理panic释放资源时因资源的不一致性带来内存安全问题;预先对待分析的rust crate进行预处理,判断crate中的函数是否需要传入闭包函数作为参数,若有标记并记录传入闭包函数作为参数的函数;在对标记的函数进行符号执行时,检查是否从该函数调用开始时存在利用unsafe rust创建了一个绕过所有权检查的对象,并且该对象一直存活至core::panic函数的调用发生,如果是则检测到panicsafety缺陷,否则未检测到panic safety缺陷。

7.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(4)中,参数可变性缺陷是指函数的不可变参数在函数内部发生了改变;预先对待分析的rust crate进行预处理,获取接口的函数签名,并记录函数所接受的参数是否为不可变参数,标记不可变参数;对函数进行符号执行时,检测该函数所接受的参数是否被标记为不可变参数,若是,跟踪该参数值在该函数调用过程中是否被改变,若有则发生了参数可变性缺陷。

8.如权利要求1所述的一种基于符号执行的rust crate缺陷检测方法,其特征在于,所述的(4)中,外部函数交互缺陷是指rust程序与其他语言程序通过外部函数调用交互时移交对象的所有权却并未进行后续处理;预先对待分析的rust crate或webassembly字节码中所有函数进行可满足性检查,检测函数是否满足调用了std::mem::forget和box::into_raw,对满足检查的函数进行标记;在对标记的函数进行符号执行时,记录该函数内部调用了std::mem::forget和box::into_raw的对象,判断所记录的对象是否通过外部函数调用传递至其他语言,若是,存在外部函数交互缺陷。


技术总结
本发明是一种基于符号执行的Rust Crate缺陷检测方法,属于软件测试领域。本发明包括:将待分析的Rust Crate编译为WebAssembly字节码文件并进行合法性检测;对合法文件构建控制流图并生成对应实例,将实例进行符号执行,探索所有可行的程序执行分支及对应的路径约束信息;在符号执行过程中对分支指令采用基于共享的轻拷贝分支方案,仅对可变路径信息进行深度拷贝;使用预先定义的缺陷检测规则对路径分支信息进行可满足性匹配,检测潜在的缺陷。本发明支持检测Rust Panic缺陷、崩溃安全缺陷、参数可变性缺陷及外部函数交互缺陷四种缺陷,减少了符号执行的时间与空间开销,提高了整体缺陷检测效果。

技术研发人员:姜博,陈一飞,王世海,高小鹏,刘斌
受保护的技术使用者:北京航空航天大学
技术研发日:
技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1