基于静态符号执行的嵌入式软件分析方法、装置及存储介质

文档序号:37057239发布日期:2024-02-20 21:04阅读:13来源:国知局
基于静态符号执行的嵌入式软件分析方法、装置及存储介质

本发明涉及嵌入式软件分析,更具体涉及一种基于静态符号执行的嵌入式软件分析方法、装置及存储介质。


背景技术:

1、嵌入式软件(embedded software)是一种专门设计和编程用于嵌入式系统的软件。嵌入式系统是一种特殊类型的计算机系统,它通常被嵌入到其他设备或系统中,以执行特定的功能或任务。这些系统通常被设计成在固定的硬件平台上运行,并且其功能和软件通常针对特定应用领域进行了优化。随着我国卫星、运载火箭和载人航天等技术的发展,嵌入式软件的规模和复杂程度日益增大,系统并发性不断增强,软件系统中潜在的缺陷也越来越难以检测、定位和控制。因此,嵌入式软件的缺陷检测是非常重要和关键的。

2、国内外学术界和工业界开始将程序分析技术应用于嵌入式软件的缺陷检测。目前嵌入式软件的缺陷检测大多采用动态程序分析方法。模糊测试是一种动态程序分析方法,可以自动检测软件漏洞,近年来,国内外致力于将模糊测试技术应用于具有强硬件依赖性的嵌入式设备中,但模糊测试通常是对二进制固件进行仿真运行并测试。其主要测试过程为:使用模糊器生成随机数据,并将其发送给虚拟仿真环境中正在运行的固件,致使其触发不可预见的异常,尝试触发固件崩溃,进而发现嵌入式软件中的缺陷。为了提高模糊测试的效果,通常对固件二进制进行插桩,通过收集覆盖率信息,指导模糊器生成更高效的种子数据。

3、程序静态分析是一种在编译时通过分析程序源代码来推断程序运行时性质的程序分析技术,其目标是在程序运行前尽可能多地发现其中隐含的错误,以提高程序的可靠性和安全性。但现有的静态分析工具几乎都不支持对嵌入式软件的缺陷检测。例如,静态分析工具satc利用静态污染分析,根据前端和后端文件共享的关键字定位后端文件中的污染源,以便在物联网设备上自动化挖掘漏洞。静态分析工具astreé是一种基于抽象解释的代码分析工具,其缺点是误报率高以及无法支持嵌入式常用c/c++语言关键字等。静态分析工具csa(clang static analyzer,clang静态分析器)也同样不支持对嵌入式软件的缺陷检测。

4、上述可知,现有的静态分析工具无法支持嵌入式软件的源代码分析和缺陷检测,如何利用静态分析来实现对嵌入式软件的缺陷检测,且减少漏报和误报,是当前亟需解决的问题。


技术实现思路

1、有鉴于此,本发明提出了一种基于静态符号执行的嵌入式软件分析方法和装置,以解决现有技术中存在的至少一个技术问题。

2、本发明的一个方面提供了一种基于静态符号执行的嵌入式软件分析方法,所述方法采用静态分析工具,所述静态分析工具包括执行引擎和缺陷检测器,所述执行引擎配置有嵌入式语法识别模块、配置文件生成模块和嵌入式关键字识别模块,该方法包括预处理阶段和分析阶段:

3、所述预处理阶段包括:输入待测嵌入式程序,基于嵌入式语法识别模块预先构建的嵌入式语法、语法扩展和宏定义的识别逻辑来识别嵌入式指令,并基于识别的嵌入式指令和嵌入式项目构建方式生成嵌入式项目配置文件,并进而生成包含嵌入式指令信息、所述配置文件和语法节点在内的预处理文件,所述嵌入式项目配置文件包含编译命令执行的目录、编译命令参数、源文件及其路径;

4、所述分析阶段包括:

5、根据所述预处理文件和待测嵌入式程序源代码生成抽象语法树,通过关键字识别模块识别程序源代码中的嵌入式关键字,在所述抽象语法树上添加识别的嵌入式关键字并生成关键字语法节点,进而构建控制流图;

6、将缺陷检测器加载至执行引擎,置于所述待测嵌入式程序的控制流入口,由执行引擎通过路径敏感方式遍历所述控制流图,逐路径符号化地执行待测嵌入式程序,以获得变量或表达式的约束范围并收集程序中的语义信息;所述缺陷检测器中含有基于多种缺陷定义设定的缺陷检测逻辑,所述缺陷检测逻辑包含预先建立的嵌入式相关缺陷检测逻辑,所述嵌入式相关缺陷检测逻辑包括嵌入式语法缺陷检测逻辑和嵌入式关键字相关缺陷检测逻辑;

7、在执行待测嵌入式程序的过程中,由缺陷检测器探索所述待测嵌入式程序中的可达路径,基于多种缺陷定义设定的缺陷检测逻辑,检测待测嵌入式程序的缺陷并生成缺陷检测结果。

8、在本发明一些实施例中,所述基于识别的嵌入式指令和嵌入式项目构建方式生成嵌入式项目配置文件包括:通过基于动态库加载环境变量的拦截技术,捕获执行项目构建命令过程中对嵌入式编译器命令的系统调用,获取嵌入式编译器编译命令行参数;以及对捕获的编译命令行参数进行自动汇总,生成所述嵌入式项目配置文件。

9、在本发明一些实施例中,所述编译命令参数包括编译器名称、编译命令选项、宏定义以及编译命令路径。

10、在本发明一些实施例中,所述通过关键字识别模块识别程序源代码中的嵌入式关键字,在所述抽象语法树上添加识别的嵌入式关键字并生成关键字语法节点,包括:通过关键字识别模块识别程序源代码中的嵌入式关键字,并在执行引擎的词法分析模块加入各个关键字的词法标记;由执行引擎的语法分析器从词法分析器接收词法标记流,基于词法标记流和预处理文件生成抽象语法树,使得生成的抽象语法树上含有嵌入式关键字;以及在抽象语法树的节点上加入嵌入式关键字对应的语法解析方式,形成抽象语法树上的嵌入式关键字语法节点。

11、在本发明一些实施例中,所述执行引擎还含有支持浮点类型的部分,所述支持浮点类型的部分包括支持浮点类型的符号值表示、支持浮点类型操作的表达式表示、支持浮点类型的内存表示、支持浮点类型的约束求解器和数学函数建模模块,所述数学函数建模模块用于对数学函数进行建模以使得数学函数能够被所述符号执行引擎识别;所述缺陷检测器中的缺陷检测逻辑还包括基于浮点缺陷定义设定的浮点缺陷检测逻辑;所述方法还包括:逐路径符号化地执行待测嵌入式程序过程中,生成用于记录待测嵌入式程序的每个节点的状态的扩展图;在当前分支路径的输入含有数学函数的情况下,将数学函数与符号值进行绑定,并在数学函数的输入参数为浮点类型参数的情况下,基于函数输出属性对输入的数学函数进行分类,基于分类结果计算输入参数对应的输出值域范围,将该值域范围作为约束范围与数学函数的符号值进行绑定,并基于绑定的值域范围生成分支路径的新的状态,并将生成的新状态添加至扩展图中。

12、在本发明一些实施例中,所述基于函数输出属性对输入的数学函数进行分类,基于分类结果计算输入参数对应的输出值域范围包括:基于数学函数的单调性、周期性、奇偶性、渐近性、极值性和/或恒等性对数学函数进行分类,根据分类结果确定输入参数的输出值域范围作为约束范围。

13、在本发明一些实施例中,所述嵌入式关键字相关缺陷检测逻辑包括以下关键字的相关缺陷检测逻辑:const,static,volatile,extern和interrupt。

14、在本发明一些实施例中,所述预处理文件包括嵌入式指令信息、所述配置文件和语法节点。

15、本发明的另一方面提供了一种基于静态符号执行的嵌入式软件分析系统,该系统包括:处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法的步骤。

16、本发明的另一方面还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。

17、本发明的基于静态符号执行的嵌入式软件分析方法和装置,能够采用静态分析技术实现对嵌入式软件的缺陷检测,且可以有效防止嵌入式软件缺陷的漏报,提高了静态分析工具的检测能力。

18、本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在说明书以及附图中具体指出的结构实现到并获得。

19、本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1