一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

面向实时操作系统设备的漏洞检测系统及方法与流程

2022-02-20 14:49:35 来源:中国专利 TAG:


1.本发明涉及计算机网络空间安全的技术领域,具体地,涉及面向实时操作系统设备的漏洞检测系统及方法。


背景技术:

2.实时操作系统(rtos)已成为嵌入式系统的主要类别之一。它广泛用于支持需要实时响应的任务,如打印机、交换机、路由器等小型设备,以及大型的工业控制设备。过去很长的一段时间中,实时操作系统往往在与攻击者隔离的特殊环境中运行时,因此其安全性一直被忽视。然而,随着物联网设备的迅速普及,大量的实时操作系统设备开始暴露在公共网络中。由于过去缺乏有效的安全机制,这些rtos设备极易受到各种攻击。
3.在公开号为cn112182588a的专利文献中公开了一种基于威胁情报的操作系统漏洞分析检测方法及系统,本发明方法包括根据漏洞信息发布平台提供的安全漏洞信息更新安全漏洞信息数据库;结合被检测的操作系统所安装并使用的产品及其版本信息,将其与安全漏洞信息数据库中记录的安全漏洞信息进行对比,分析出被检测的操作系统存在的安全隐患。
4.针对上述中的相关技术,发明人认为实时操作系统的单片设计,其往往将操作系统内核和各种任务服务合并成一个执行体文件,导致当前分析rtos设备的安全问题时往往存在分析效率和分析能力上的不足。因此,需要提出一种技术方案以改善上述技术问题。


技术实现要素:

5.针对现有技术中的缺陷,本发明的目的是提供一种面向实时操作系统设备的漏洞检测系统及方法。
6.根据本发明提供的一种面向实时操作系统设备的漏洞检测系统,包括基本信息提取模块、静态分析模块和动态分析模块;
7.所述基本信息提取模块对实时操作系统设备固件进行初步的解析和各关键数据的分离提取,包括对设备运行的运行环境提取,静态数据提取和代码数据提取;
8.所述静态分析模块对实时操作系统设备的代码数据进行解析,恢复其中的函数语义,并对外部服务的关键代码进行数据流依赖分析和提取;
9.所述动态分析模块对提取的关键服务代码进行模拟执行和模糊测试,并对发现的潜在安全问题进行分析验证。
10.优选地,所述基本信息提取模块包括运行环境提取、静态数据提取和代码数据提取;
11.所述运行环境提取使用统计学方式分析固件中包含的设备代码,获得设备的cpu架构信息;使用代码中数据引用指令中包含的绝对地址引用信息推断设备在运行时实际的镜像的加载基地址;
12.所述静态数据提取指通过可见字符提取和文件格式特征正则匹配的方式,对固件
中的html、js、xml代码数据,以及配置文件数据进行模式匹配和提取,并针对提取出的代码数据进行语法树解析,得到具体的服务参数的名称特征字符串;
13.所述代码数据提取指在确定cpu架构信息后,解析固件中包含的对应架构字节码并判断是否符合代码数据逻辑,圈定提取出实时操作系统设备运行的实际代码数据。
14.优选地,所述静态分析模块包括函数语义分析、风险数据流分析和风险代码提取;
15.所述函数语义分析包括基于静态数据恢复数据引入函数语义的方式和基于模拟执行来恢复安全风险函数语义的方式,对代码数据进行静态扫描,提取代码中的函数并分析函数所表达的语义信息;
16.所述风险数据流分析指对于经数据引入函数所引入的服务数据输入,针对数据的复制、赋值、截取、变换操作对其他数据变量产生影响的过程进行分析,从代码数据中提取受影响的变量集合和对应的代码片段集合的过程;
17.所述风险代码提取指针对风险数据流相关的代码片段,从原有的固件代码数据中分离提取出来的过程,排除其他和当前关注的风险数据流无关的代码影响。
18.优选地,所述动态分析模块包括模拟执行、模糊测试和安全分析验证;
19.所述模拟执行指基于对固件的基本信息提取所确定的cpu架构信息、运行基本环境等信息,将提取的风险代码使用unicorn模拟框架对设备运行时的代码和数据的情况进行模拟的过程;
20.所述模糊测试指基于模拟执行的状态模拟,在上层接入自动化的服务数据生成和模拟执行程序状态和执行状态的检测,对不同数据输入对程序造成的影响的自动化大规模分析手段,对实时操作系统设备中的潜在安全隐患进行定位并提供可触发问题的验证输入;
21.所述安全分析验证指对于模糊测试所发现的安全隐患和对应输入,应用符号执行技术针对风险代码提取中损失的代码信息进行恢复,并最终确认相应的安全隐患能否在实际的代码数据中触发的过程。
22.优选地,通过解析静态资源文件中的参数名称并同代码中相应的同名参数引用进行比对,来判断固件代码中的特定函数是否和获取服务参数有关。
23.优选地,所述函数为能够造成内存破坏的一些函数,包括内存拷贝、内存移动、格式化字符串功能函数。
24.优选地,所述代码片段的提取包括函数间的代码提取和函数内的代码提取。
25.优选地,函数间的代码提取通过分析数据流图的程序切片完成,对特定输入参数最终能够影响到的安全风险函数调用,构造从数据输入位置到所有调用安全风险函数位置的函数调用图,从代码数据中提取出该函数调用图。
26.优选地,函数内的代码提取通过分析并剪裁函数内的代码块完成,对特定输入参数在函数内的数据依赖过程,有对应代码块,通过修改代码块间的跳转指令为跳转至在数据依赖路径上的代码块,屏蔽不相关代码块的执行来完成函数内的代码剪裁和提取;针对特定的数据,得到一个裁剪后的固件代码片段数据。
27.本发明还提供一种面向实时操作系统设备的漏洞检测方法,所述方法应用上述中的面向实时操作系统设备的漏洞检测系统,所述方法包括如下步骤:
28.步骤s1:通过官网下载、硬件提取方式获得设备固件;
29.步骤s2:解压固件并根据文件大小、格式确定设备镜像;
30.步骤s3:对固件的基本信息进行解析,使用统计学方式分析固件中包含的设备代码,获得设备的cpu架构信息;使用代码中数据引用指令中包含的绝对地址引用信息推断设备在运行时实际的镜像的加载基地址;
31.步骤s4:扫描镜像,提取其中的关键信息,包括静态资源数据和程序代码数据;
32.步骤s5:对静态资源数据进行解析,提取出代码中可能使用到的服务前端参数名,用于之后分析和设备服务相关的函数语义信息的恢复;
33.步骤s6:使用确定的cpu架构以及加载基地址信息对程序代码数据进行完整扫描,提取出固件代码中的所有函数,函数间的调用图程序控制流信息,提取完成的代码数据信息;
34.步骤s7:结合静态资源数据的解析结果、以及函数的执行流特征,将读取服务输入数据的函数标记为数据引入函数;
35.步骤s8:采用模拟执行的方式,根据设定的函数执行特征,对导致内存破坏的安全问题的函数进行标记,将其标记为安全风险函数;
36.步骤s9:对数据引入函数所引入的风险数据,进行数据依赖性分析,形成程序中针对该输入数据的数据流图;
37.步骤s10:针对该数据流图,分析并提取与之相对应的代码片段;
38.步骤s11:对该代码片段进行模拟执行,并在对应的安全风险函数的位置插桩代码,当程序模拟执行到该位置时检查安全风险函数执行前后的程序内存是否遭到破坏,如有,则上报风险警报,否则退出程序模拟执行;
39.步骤s12:将以上的步骤接入现有的混合模糊测试框架,进行自动化的风险数据生成和程序状态检测,对导致内存破坏程序安全问题的风险数据输入进行分析,并依此对实时操作系统的代码安全风险进行大规模自动化排查。
40.与现有技术相比,本发明具有如下的有益效果:
41.1、本发明能够针对嵌入式实时操作系统设备的潜在安全隐患进行有效分析,解决其他方案无法分析或效果不佳的问题;
42.2、本发明创新性提出一系列语义恢复的方式,针对实时操作系统的特点设计了程序语义的恢复方式,能够为后续准确高效的数据流提取和分析打下基础;
43.3、本发明针对用户数据在系统服务中的风险数据流所涉及到的代码片段进行针对性的提取,高效实现在特定的代码片段上的模糊测试并发现潜在的代码中的安全隐患;
44.4、本发明能够进一步推广至其他非实时操作系统的设备环境,实现更大的应用场景。
附图说明
45.通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
46.图1为本发明面向实时操作系统设备的漏洞检测方法的结构和流程图。
具体实施方式
47.下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
48.针对现有技术的不足,本发明提出了一种面向实时操作系统设备的漏洞检测系统及方法,本方法结合设备固件二进制语义分析,在恢复固件中外部服务的关键函数语义信息基础上,跟踪设备运行时的用户数据输入、处理的流程,从而对固件中各个任务进行数据流重建,并基于数据流依赖关系对固件代码进行裁剪,最后在裁剪后的切片代码范围内进行指令模拟和漏洞检测。本方法可以让安全研究人员避免复杂、低效的全系统设备模拟,直接对设备上运行的各种关键服务代码进行切片,并开展针对性测试,从而极大提高测试效率和实际漏洞的发现量。
49.本发明提供了一种面向实时操作系统设备的漏洞检测方法的结构图如图1所示。本发明的面向实时操作系统设备的漏洞检测方法由多个模块组成,模块依照具体功能分为基本信息提取模块、静态分析模块和动态分析模块三类,模块之间通过消息通道交换数据从而协同工作。基本信息提取模块对实时操作系统设备固件进行解析,提取各部分需要的消息数据并交由静态分析模块进行固件代码层面的静态分析,静态分析通过确定关键服务的风险数据流定位提取关键代码数据并交由动态分析模块进行输入生成和漏洞检测。
50.所述面向实时操作系统设备的漏洞检测方法中的模块包括:
51.基本信息提取模块,对实时操作系统设备固件进行初步的解析和各关键数据的分离提取,包括对设备运行的运行环境提取,静态数据提取和代码数据提取;运行环境提取使用统计学方式分析固件中包含的设备代码,获得设备的cpu架构信息;使用代码中数据引用指令中包含的绝对地址引用信息推断设备在运行时实际的镜像的加载基地址;静态数据提取指通过可见字符提取和文件格式特征正则匹配的方式,对固件中的html、js、xml代码数据,以及配置文件数据等进行模式匹配和提取,并针对提取出的代码数据进行语法树解析,得到具体的服务参数的名称特征字符串;代码数据提取指在确定cpu架构信息后,解析固件中包含的对应架构字节码并判断是否符合代码数据逻辑,从而圈定提取出实时操作系统设备运行的实际代码数据。
52.静态分析模块,对实时操作系统设备的代码数据进行解析,恢复其中的函数语义,并对外部服务的关键代码进行数据流依赖分析和提取;静态分析模块所包括的流程有函数语义分析、风险数据流分析和风险代码提取,函数语义分析包括基于静态数据恢复数据引入函数语义的方式和基于模拟执行来恢复安全风险函数语义的方式,能够对代码数据进行静态扫描,提取代码中的函数并分析函数所表达的语义信息;风险数据流分析,指对于经数据引入函数所引入的服务数据输入,针对数据的复制、赋值、截取、变换操作对其他数据变量产生影响的过程进行分析,从代码数据中提取受影响的变量集合和对应的代码片段集合的过程;风险代码提取,指针对风险数据流相关的代码片段,从原有的固件代码数据中分离提取出来的过程,能够排除其他和当前关注的风险数据流无关的代码影响。
53.动态分析模块,对提取的关键服务代码进行模拟执行和模糊测试,并对发现的潜在安全问题进行分析验证;模拟执行指基于对固件的基本信息提取所确定的cpu架构信息、
运行基本环境等信息,将提取的风险代码使用unicorn模拟框架对设备运行时的代码和数据的情况进行模拟的过程;模糊测试指基于模拟执行的状态模拟,在上层接入自动化的服务数据生成和模拟执行程序状态和执行状态的检测,从而对不同数据输入对程序造成的影响的自动化大规模分析手段,能够对实时操作系统设备中的潜在安全隐患进行定位并提供可触发问题的验证输入;安全分析验证,指对于模糊测试所发现的安全隐患和对应输入,应用符号执行技术针对风险代码提取中可能损失的代码信息进行恢复,并最终确认相应的安全隐患能否在实际的代码数据中触发的过程。
54.对使用模拟执行来恢复安全风险函数语义方法,有安全风险函数在本方法中一般指能够造成内存破坏的一些函数,如常见的内存拷贝、内存移动、格式化字符串功能函数,代表性的函数有memcpy,strcpy,sprintf等等,根据这一特征,可以对待分析的函数做如下的分析流程:
55.a)对memcpy,strcpy,sprintf等若干特定的安全风险函数,准备相应特定的若干组参数组。以及相应的函数执行完后参数组的特定变化特征。如对于内存拷贝函数memcpy(dst,src,len),拷贝前参数中的数据源src中的数据会在拷贝后将数据内容根据复制长度len在数据拷贝的目标地址dst上创建一份指定长度的内容拷贝,该特征则可作为判断函数是否为memcpy函数的标准。因此可针对memcpy函数的执行特征设置参数(“aaaaa”,”123”,3),则相应的输出为(“123aa”,”123”,3),将[(“aaaaa”,”123”,3),(“123aa”,”123”,3)]称为memcpy的特征参数组。
[0056]
b)将待分析函数的代码,以及函数所调用到的子函数代码进行完整提取。
[0057]
c)根据a)中准备的若干参数组,依次布置好调用该函数的相关参数并尝试对该函数进行模拟执行。
[0058]
d)若函数的模拟执行失败或超时,则认为该函数无法判断语义,退出。
[0059]
e)若成功模拟执行,则判断执行完后布置的参数是否符合该参数组的预期输出,若符合,则认为该函数表达了相应函数的语义,退出。
[0060]
f)若成功模拟执行,但执行后的参数不符合预期输出,则认为当前特征参数组不符合该函数,则尝试下一组特征参数组。
[0061]
g)重复c)、d)、e)、f)直到针对该函数的分析退出或遍历完全部特征参数组,并依该流程逐个尝试恢复固件代码中的全部函数语义。
[0062]
对数据依赖性分析的方法,有服务的运行往往伴随着数据的传递和复制,服务数据经由数据引入函数读入后,往往会在程序执行的过程中受程序具体逻辑而影响到其他多个变量的值,受输入数据影响的数据也会进一步迭代影响到其他数据。将受输入数据影响的其他变量以及迭代受影响的所有变量称为依赖变量,将数据迭代影响的过程称为数据依赖。因此数据依赖性分析方法则是针对特定的服务输入数据,迭代归纳出全部的依赖变量的过程。通过对数据依赖过程的分析,得到该输入数据所对应的数据流图,即特定的输入数据最终能影响到的全部变量的集合及依赖路径的集合所构成的图。
[0063]
对代码片段提取的方法介绍,有针对数据依赖性分析所得到的数据流图,提取出数据依赖过程的路径,该路径实际与相应的程序代码有一一对应关系,因此从固件代码中剔除与当前关注的数据依赖过程无关的代码,保留和数据依赖过程相关的代码,从而对关注的输入数据能否产生安全问题进行进一步分析。考虑到效率和数据针对性两个方面,代
码片段的提取分为两个层次:函数间的代码提取和函数内的代码提取。
[0064]
函数间的代码提取通过分析数据流图的程序切片完成:对特定输入参数最终能够影响到的安全风险函数调用,构造从数据输入位置到所有调用安全风险函数位置的函数调用图,从代码数据中提取出该函数调用图。通过修改调用其他不再调用图上的函数调用指令由call修改为nop指令,屏蔽不相关函数的调用来完成函数间的代码剪裁和提取;并对在函数调用图上的每个函数再进行进一步的函数内的代码提取。
[0065]
函数内的代码提取通过分析并剪裁函数内的代码块完成:对特定输入参数在函数内的数据依赖过程,有对应代码块,通过修改代码块间的跳转指令为跳转至在数据依赖路径上的代码块,屏蔽不相关代码块的执行来完成函数内的代码剪裁和提取。
[0066]
最终针对特定的数据数据,得到一个裁剪后的固件代码片段数据,这一代码片段能够排除其他数据的处理流程对安全问题分析的影响,同时能够专注于对数据的处理流程,能够避免嵌入式设备系统复杂的数据读写过程的模拟难题。
[0067]
对模拟执行进行安全分析的方法,有通过基本信息提取获得的cpu架构和加载基地址信息,将代码片段数据加载至unicorn模拟框架并设置相应的数据段,并让框架从指定的代码位置开始模拟执行对应架构下固件中的汇编指令。通过框架的代码插桩功能,我们可以在固件代码的安全风险函数执行完毕后的第一条指令处添加插桩,在插桩代码中检查函数栈帧中的返回地址值是否被破坏,来判断是否发生了缓冲区溢出的内存破坏漏洞。因此当模拟框架加载指定的模糊测试输入数据后,从数据引入函数被调用的位置开始模拟执行固件代码,当成功执行到安全风险函数后,触发我们的插桩代码并检查是否触发了安全漏洞,如果有则返回警告。
[0068]
本发明较佳实施例提供的一种面向实时操作系统设备的漏洞检测方法的流程图1所示。所述方法的具体流程如下:
[0069]
步骤一,通过官网下载、硬件提取等方式获得设备固件。
[0070]
步骤二,解压固件并根据文件大小、格式等信息确定设备镜像。
[0071]
步骤三,对固件的基本信息进行解析,使用统计学方式分析固件中包含的设备代码,获得设备的cpu架构信息;使用代码中数据引用指令中包含的绝对地址引用信息推断设备在运行时实际的镜像的加载基地址。
[0072]
步骤四,扫描镜像,提取其中的关键信息,包括:
[0073]
静态资源数据,如html、js、xml代码数据、以及配置文件数据等。
[0074]
程序代码数据,包括实时操作系统内核代码及其搭载运行的服务代码。
[0075]
步骤五,对静态资源数据进行解析,提取出代码中可能使用到的服务前端参数名,用于之后分析和设备服务相关的函数语义信息的恢复。
[0076]
步骤六,使用确定的cpu架构以及加载基地址信息对程序代码数据进行完整扫描,提取出固件代码中的所有函数,函数间的调用图等程序控制流信息,提取完成的代码数据信息。
[0077]
步骤七,结合静态资源数据的解析结果、以及函数的执行流特征,将读取服务输入数据的函数标记为数据引入函数。
[0078]
步骤八,采用模拟执行的方式,根据设定的函数执行特征,对可能导致内存破坏等安全问题的函数进行标记,将其标记为安全风险函数。
[0079]
步骤九,对数据引入函数所引入的风险数据,进行数据依赖性分析,形成程序中针对该输入数据的数据流图。
[0080]
步骤十,针对该数据流图,分析并提取与之相对应的代码片段。
[0081]
步骤十一,对该代码片段进行模拟执行,并在对应的安全风险函数的位置插桩代码,当程序模拟执行到该位置时检查安全风险函数执行前后的程序内存是否遭到破坏,如有,则上报风险警报,否则退出程序模拟执行。
[0082]
步骤十二,将以上的步骤接入现有的混合模糊测试框架,进行自动化的风险数据生成和程序状态检测,从而对可能导致内存破坏等程序安全问题的风险数据输入进行分析,并依此对实时操作系统的代码安全风险进行大规模自动化排查。
[0083]
对使用静态资源数据来恢复数据引入函数方法,有实时操作系统上的服务和其他操作系统上的服务类似,其功能的运行往往也伴随着服务数据的读入、处理、以及可能的数据输出,数据的读入和处理往往伴随着数据名称的使用(如“username”、“passwd”等等),而数据名称往往可以通过静态资源文件中的参数名称来获得,因此通过解析静态资源文件中的参数名称并同代码中相应的同名参数引用进行比对,来判断固件代码中的特定函数是否和获取服务参数有关。常见的静态资源数据中参数名的获取来源包括html数据中的action,name,id属性名称、javascript数据中的name,value属性名称、xml数据中的方法名称以及配置文件中的配置项名称。通过提取参数名称,可以得到若干特征字符串的集合,若一个函数的每次调用均伴随上述特征字符串集合中的字符串作为调用参数,且返回数据指针,则认为该函数与数据引入相关,标记为数据引入函数。
[0084]
本发明能够针对嵌入式实时操作系统设备的潜在安全隐患进行有效分析,解决其他方案无法分析或效果不佳的问题;创新性提出一系列语义恢复的方式,针对实时操作系统的特点设计了程序语义的恢复方式,能够为后续准确高效的数据流提取和分析打下基础;针对用户数据在系统服务中的风险数据流所涉及到的代码片段进行针对性的提取,高效实现在特定的代码片段上的模糊测试并发现潜在的代码中的安全隐患;能够进一步推广至其他非实时操作系统的设备环境,实现更大的应用场景。
[0085]
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
[0086]
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本技术的实施例和实施例中的特征可以任意相互组合。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献