设备安全检测方法、装置、计算机设备和可读存储介质



1.本发明涉及物联网安全技术领域,尤其涉及一种设备安全检测方法、装置、计算机设备和可读存储介质。


背景技术:



2.物联网是由各类物理对象组成的网络,这些物理对象嵌入了传感器、软件和其他技术,使得这些设备可以与其他设备和系统建立连接并交换数据。物联网设备也即上述物理对象,具体指可从远程位置控制的任何独立设备,物联网设备种类繁多,既有普通家庭用品,也有复杂工业用具,例如网络摄像头、无线路由等。
3.物联网近年迅速发展,在ai、云计算、5g等前沿it技术的助推下,各种不同形态的物联网设备层出不穷,承载iot应用的嵌入式系统碎片化严重,导致缺乏统一的安全应用标准,带来各种各样的安全性问题。目前的物联网设备安全漏洞分析技术由于设备类型的多样化、设备底层cpu架构的多样化等问题,很难对各类设备进行统一、高效地安全检测。
4.现有技术存在如下的三类安全检测方法,第一类为依赖于人工的方法,这类方法依赖于专业人员对二进制程序的审计,因此无法对大量物联网设备进行成体系的检测,效率低;第二类为动态模糊测试方法,模拟设备程序一次或多次执行的过程与结果,分析代码在时间、性能等方便所展现的性质,需要硬件支持或者模拟各类不同的硬件中断,受限于设备固件行为模拟技术的可用性,使得测试方法可行性受到较大限制;第三类为静态分析方法,具体是指在不运行设备程序的情况下,对二进制程序或者代码进行扫描,校验代码是否满足规范性、安全性和可靠性等指标的一种代码分析技术,从固件的安全性分析着手,脱离了终端物理设备的限制,能够快速的完成大规模的安全性测试,这类型方法解决了上述第一类和第二类检测方法存在的问题。
5.但是发明人研究发现:对于以基于angr符号执行框架的研究为代表的静态分析方法,通过将固件解压后的二进制程序转换中间语言,以便在模拟程序执行时跟踪变量和路径执行条件变化,获得外部输入的污点变量在系统内部的传播途径,得到触发安全漏洞的程序输入条件。其缺乏程序确切的执行状态,数据流分析结果精确性下降,存在较多的误报和漏报。
6.karonte通过静态分析方法,构建了嵌入式系统多个模块之间的通信模型,并将其应用于安全漏洞挖掘,得到了一定的效果。但由于缺乏程序执行中的上下文语意信息,导致了较高的漏报率。
7.综上所述,目前的静态检测方法检测结果中通常会包含大量的误报和漏报,准确率有待提高。因此,如何提升物联网设备安全检测的准确性,成为本领域亟需解决的技术问题。


技术实现要素:



8.本发明的目的是提供一种设备安全检测方法、装置、计算机设备和可读存储介质,
用于解决现有技术中的上述技术问题。
9.一方面,为实现上述目的,本发明提供了一种设备安全检测方法。
10.该备安全检测方法包括:获取设备固件中的前端文件和后端程序;提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配所述后端程序与所述字符串集合中的字符串;根据匹配到的所述字符串确定污点引入点;以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。
11.进一步地,提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合的步骤包括:提取所述前端文件中的api接口名称和参数名称。
12.进一步地,根据匹配到的所述字符串确定污点引入点的步骤包括:按照匹配到的字符串数量,确定所述后端程序是否为边界程序,其中,匹配到的字符串数量越大,所述后端程序被确定为边界程序的概率越大;以及根据所述边界程序中匹配到的所述字符串确定污点引入点。
13.进一步地,以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞的步骤包括:以所述污点引入点为分析起始点,仅对所述边界程序进行污点分析,以检测所述设备固件中是否存在安全漏洞。
14.进一步地,所述前端文件包括html文件、js文件和/或xml文件,提取所述前端文件中的api接口名称和参数名称的步骤包括:使用正则表达式匹配所述html文件中各个标签的“action”属性、“name”属性和“id”属性的值;将所述js文件解析成抽象语法树,遍历抽象语法树,获得类型属性为literal的子树,并提取所述子树属性为“name”包含“/”的值、“value”包含“/”的值、“name”的值和“value”的值;解析所述xml文件,提取在body节点下的第一级标签和所述第一级标签下级节点标签。
15.进一步地,提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合之后,匹配所述后端程序与所述字符串集合中的字符串之前,所述设备安全检测方法还包括:去除所述字符串集合中长度小于p或大于q的参数名称,q大于p,q和p均为自然数;去除所述字符串集合中在n个或n个以上不同前端文件出现的参数名称,n为自然数;去除所述字符串集合中包含特殊字符的参数名称;去除所述字符串集合中长度小于或等于m的api接口名称,m为自然数;去除所述字符串集合中包含“/”和/或“?”之外的其他特殊字符的api接口名称;去除所述字符串集合中不包含“/”字符的api接口名称;和/或去除所述api接口名称中“?”字符后的字符。
16.进一步地,根据匹配到的所述字符串确定污点引入点的步骤包括:确定匹配到的所述字符串在所述后端程序中引用指令的位置,得到直接引用点;将所述直接引用点作为所述污点引入点。
17.进一步地,所述设备固件中包括多个后端程序,根据匹配到的所述字符串确定污点引入点的步骤还包括:判断所述后端程序中所述直接引用点的数据内容是否被传递至操作磁盘的第一set函数的变量中;若所述直接引用点的数据内容被传递至所述第一set函数的变量中,则在所述多个后端程序中查所述第一set函数对应的操作磁盘的第一get函数;确定所述第一get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。
18.进一步地,所述直接引用点用于将所述字符串作为参数传入至使用函数,根据匹
配到的所述字符串确定污点引入点的步骤还包括:在所述后端程序中遍历所述使用函数的函数调用点;查所述函数调用点的字符串参数的传参位置,得到间接引用点;以及将所述间接引用点作为所述污点引入点。
19.进一步地,所述设备固件中包括多个后端程序,根据匹配到的所述字符串确定污点引入点的步骤还包括:判断所述后端程序中所述间接引用点的数据内容是否被传递至操作磁盘的第二set函数的变量中;若所述间接引用点的数据内容被传递至所述第二set函数的变量中,则在所述多个后端程序中查所述第二set函数对应的操作磁盘的第二get函数;确定所述第二get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。
20.进一步地,以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件中是否存在安全漏洞的步骤包括:以所述污点引入点为根节点,提取所述污点引入点位置处的函数的子函数调用树,其中,在所述子函数调用树中,以所述后端程序中call指令作为连结父子节点的边,以预设目标函数作为叶节点;根据所述子函数调用树对所述后端程序进行污点执行,其中,所述污点执行的策略包括:判断当前子函数是否在所述子函数调用树上,若存在,则直接跟进执行,若不存在,则判断所述当前子函数的参数是否被污点扩散所污染到,若所述当前子函数的参数未被污染到,则不做处理跳过所述当前子函数执行,若所述当前子函数的参数被污染到,则当所述当前子函数的参数有返回值时,将污点扩散到所述返回值,当所述当前子函数的参数没有返回值时,将污点扩散到所述当前子函数的其他可写地址参数上;当污点执行到所述预设目标函数时,根据所述预设目标函数的参数是否被污染确定所述设备固件是否存在安全漏洞,其中,根据所述预设目标函数的参数是否被污染确定所述设备固件是否存在安全漏洞的步骤具体包括:当所述预设目标函数为可造成缓冲区溢出的函数时,判断所述预设目标函数的长度参数是否被污染,若所述长度参数不存在时,判断所述预设目标函数的数据源是否被污染,其中,当所述长度参数被污染,或所述预设目标函数的数据源被污染时,确定所述设备固件存在安全漏洞;当所述预设目标函数为可导致命令注入函数,判断所述预设目标函数的调用参数中是否存在被污染的字节内容,若所述调用参数中存在被污染的字节内容,则确定所述设备固件存在安全漏洞。
21.另一方面,为实现上述目的,本发明提供了一种设备安全检测装置。
22.该设备安全检测装置包括:获取模块,用于获取设备固件中的前端文件和后端程序;提取模块,用于提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配模块,用于匹配所述后端程序与所述字符串集合中的字符串;确定模块,用于根据匹配到的所述字符串确定污点引入点;分析模块,用于以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。
23.为实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时实现上述方法的步骤。
24.为实现上述目的,本发明还提供计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述方法的步骤。
25.本发明提供的设备安全检测方法、装置、计算机设备和可读存储介质,获取设备固
件中的前端文件和后端程序,在前端文件中提取用于标记用户输入数据的字符串,得到字符串集合,然后将字符串集合中的字符串与后端程序匹配,通过匹配到的字符串确定后端程序污点引入点,最终以污点引入点为分析起始点,对后端程序进行污点分析,以检测设备固件是否存在安全漏洞,通过本发明,基于前端文件确定标记外部用户输入数据的字符串,再在后端程序中匹配到这类型字符串,根据匹配到的字符串在后端程序中精确定位到外部用户输入,也即在污点分析时污点引入点的位置,能够快速而准确的进行污点分析,检测固件安全漏洞,有效提升漏洞挖掘准确性,同时也能够缩短污点分析的过程,提升漏洞挖掘效率。
26.进一步地,本发明实施例提供的设备安全检测方法、装置、计算机设备和可读存储介质,还具有以下技术效果:能够识别出固件内各类后端程序中用以标记用户输入的字符串,进而能够准确定位网络服务后端程序中对用户输入数据的解析位置,基于识别的污点引入点,通过污点分析能够自动探测外部输入可能影响到的程序路径,并分析可造成的危害,能够有效缩短污点分析流程,优化符号执行的路径便利过程,提升针对物联网设备固件的漏洞挖掘效率和准确性。
附图说明
27.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
28.图1为本发明实施例一提供的设备安全检测方法的流程图;
29.图2为本发明实施例二提供的设备安全检测装置的框图;
30.图3为本发明实施例三提供的计算机设备的硬件结构图。
具体实施方式
31.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.为了提升物联网设备安全检测的准确性,发明人对现有技术中的设备安全检测方法进行研究发现,设备安全分析漏报率和误报率高的原因包括:无法在程序分析过程中快速、有效地识别出与用户可控输入相关的代码片段。基于此,本发明提供了一种设备安全检测方法、装置、计算机设备和可读存储介质,在本发明提供的设备安全检测方法中,首先获取设备固件中的前端文件和后端程序,提取前端文件中用于标记用户输入数据的字符串,得到字符串集合,也即通过前端文件获得外部用户输入的语意,然后匹配后端程序与字符串集合中的字符串,根据匹配到的字符串确定污点引入点,并以污点引入点为分析起始点,对后端程序进行污点分析,以检测设备固件是否存在安全漏洞,使得在对后端程序的静态分析过程中,精确定位到外部用户输入,也即污点引入点的位置,有效提升漏洞挖掘准确性,同时也能够缩短污点分析的过程,提升漏洞挖掘效率。
33.关于本发明提供的设备安全检测方法、装置、计算机设备和可读存储介质的具体
实施例,将在下文中详细描述。
34.实施例一
35.本发明实施例提供了一种设备安全检测方法,利用前端文件和后端程序确定后端程序静态分析过程中的污点引入点,通过该方法,能够提升漏洞挖掘准确性和挖掘效率,具体地,图1为本发明实施例一提供的设备安全检测方法的流程图,如图1所示,该实施例提供的设备安全检测方法包括如下的步骤s101至步骤s105。
36.步骤s101:获取设备固件中的前端文件和后端程序。
37.固件是物联网设备的核心部件,含有设备运行的操作系统、协议栈、配置文件、可执行脚本和应用组件等各类信息和程序。用户在物联网设备入网使用前,对设备固件开展安全检测、发现安全漏洞并做相应防范,可显著降低设备运行期间被攻破的可能性。
38.固件通常支持一个以上的网络服务,而网络服务需要前后端文件的配合来提供用户配置或者设备间的通信服务。前端文件主要包括html、xml、javascript、php等资源文件,后端文件主要包括各类可执行程序及功能链接库。前端文件主要负责接收用户输入,并将输入组成网络数据包传至后端。后端程序通常为常驻进程,通过监听和接收前端传输的数据包,解析并处理用户输入。
39.物联网设备可以基于固件进行安全性检测,通过固件元信息提取、固件自动解压缩、固件文件安全分析、组件漏洞关联分析等功能,发现固件在文件、组件和函数层面的安全漏洞及隐患。
40.在该步骤s101中,可通过解压物联网设备固件得到固件的文件系统,通过扫描解压到的文件系统,得到文件,并对文件进行分类,得到前端文件和后端程序。
41.步骤s102:提取前端文件中用于标记用户输入数据的字符串,得到字符串集合。
42.前端文件作为资源文件,能够体现语义表达,因此,在该步骤s102中,可基于不同类型的前端文件的语义规则,对不同类型的前端文件采用不同的提取策略,通过自动提取方法,例如采用正则表达式的提取方法,进行字符串的提取,将前端文件中用于标记用户输入数据的字符串提取出来,形成字符串集合。
43.其中,可选地,在一种实施例中,提取前端文件中用于标记用户输入数据的字符串,得到字符串集合的步骤包括:提取前端文件中的api接口名称和参数名称,其中,参数名称是指该api接口对应请求的参数的名称,api接口名称可标记污点接口函数所引入的位置,参数名称可标记污点参数所引入的位置。因此,通过提取api接口名称和参数名称,能够准确得到用于标记用户输入数据的字符串。
44.步骤s103:匹配后端程序与字符串集合中的字符串。
45.通过上述步骤s102得到由标记用户输入数据的字符串组成的字符串集合,在该步骤s103中,将字符串集合中的字符串与后端程序进行匹配。
46.可选地,后端程序为二进制程序,在匹配后端程序于字符串时,将字符串转换为二进制序列,然后与二进制程序进行匹配。一个后端程序可匹配到若干个字符串。
47.步骤s104:根据匹配到的字符串确定污点引入点。
48.具体地,根据匹配到的字符串确定污点引入点时,可将匹配到的字符串在后端程序中的引用位置或该引用位置的相关文件,作为污点引入点。
49.步骤s105:以污点引入点为分析起始点,对后端程序进行污点分析,以检测设备固
件是否存在安全漏洞。
50.污点分析是一种数据流分析方法,其可以被抽象成一个三元组《sources,sinks,sanitizers》的形式,sources为污点引入点,代表直接引入不受信任的数据或者机密数据到系统中;sink为污点汇聚处,代表直接产生安全敏感操作或者泄漏隐私数据到外界;sanitizer代表通过数据加密或者移除操作等手段使数据传播不再对软件系统的信息安全产生危害。污点分析就是分析程序中由污点引入点引入的数据是否能够不经过无害处理,而直接传播到污点汇聚处。如果不能,说明数据的传播是安全的;如果能,说明数据流的传输处理过程产生了隐私数据泄漏或危险操作等问题。
51.因此,在对后端程序进行污点分析时,首先要确定污点引入点。在该实施例中,后端程序匹配到的字符串是标记用户输入数据的字符串,因此,根据匹配到的字符串确定污点引入点,再以该污点引入点作为分析起始点,对后端程序进行污点分析时,也就是以用户输入数据的位置及用户输入数据的相关位置作为分析起始点进行污点分析,能够快速而精确定位到外部用户输入的位置。
52.在该实施例提供的设备安全检测方法中,获取设备固件中的前端文件和后端程序,在前端文件中提取用于标记用户输入数据的字符串,得到字符串集合,然后将字符串集合中的字符串与后端程序匹配,通过匹配到的字符串确定后端程序污点引入点,最终以污点引入点为分析起始点,对后端程序进行污点分析,以检测设备固件是否存在安全漏洞,采用该实施例提供的设备安全检测方法,基于前端文件确定标记外部用户输入数据的字符串,再在后端程序中匹配到这类型字符串,根据匹配到的字符串在后端程序中精确定位到外部用户输入,也即在污点分析时污点引入点的位置,能够快速而准确的进行污点分析,检测固件安全漏洞,有效提升漏洞挖掘准确性,同时也能够缩短污点分析的过程,提升漏洞挖掘效率。
53.可选地,在一种实施例中,根据匹配到的字符串确定污点引入点的步骤包括:按照匹配到的字符串数量,确定后端程序是否为边界程序,其中,匹配到的字符串数量越大,后端程序被确定为边界程序的概率越大;以及根据边界程序中匹配到的字符串确定污点引入点。
54.具体地,解压固件可得到多个后端程序,在根据匹配到的字符串确定污点引入点时,先根据各个后端程序匹配到的字符串的数量来确定边界程序,然后根据边界程序中匹配到的字符串确定污点引入点。其中,边界程序是指固件中用来做用户输入接收、处理和任务分发的后端程序,在确定边界程序时,一个后端程序匹配到的字符串数量越大,其被确定为边界程序的概率越大,例如,可按照匹配到的字符串数量多少对后端程序进行排序,取前n个后端程序作为边界程序,n为大于1的自然数;又如,可设置字符串数量阈值,当后端程序匹配到的字符串数量大于该字符串数量阈值时,确定该后端程序为边界程序,其中,字符串数量阈值可根据实际分析性能测试而定。
55.采用该实施例提供的设备安全检测方法,先根据匹配到的字符串数量,在后端程序中确定出边界程序,再以边界程序中包括的字符串确定污点引入点,从而在能够准确定位到外部用户输入位置的基础上,进一步缩小污点引入点的数量,减少冗余分析,提升污点分析的执行效率,提升设备安全检测效率。
56.可选地,在一种实施例中,以污点引入点为分析起始点,对后端程序进行污点分
析,以检测设备固件是否存在安全漏洞的步骤包括:以污点引入点为分析起始点,仅对边界程序进行污点分析,以检测设备固件中是否存在安全漏洞。
57.具体地,在该实施例中,并不对所有的后端程序进行污点分析,而是仅针对边界程序进行污点分析,边界程序作为固件中用来做用户输入接收、处理和任务分发的后端程序,是污点数据传输的主要程序,仅对边界程序进行分析,能够减小污点分析程序的数量,进一步减少冗余分析,提升污点分析的执行效率,提升设备安全检测效率。
58.可选地,在一种实施例中,前端文件包括html文件、js文件和/或xml文件,提取前端文件中的api接口名称和参数名称的步骤包括:使用正则表达式匹配html文件中各个标签的“action”属性、“name”属性和“id”属性的值;将js文件解析成抽象语法树,遍历抽象语法树,获得类型属性为literal的子树,并提取子树属性为“name”包含“/”的值、“value”包含“/”的值、“name”的值和“value”的值;解析xml文件,提取在body节点下的第一级标签和第一级标签下级节点标签。
59.具体地,使用正则表达式匹配html文件中各个标签的“action”属性的值,可得到html文件中的api接口名称,使用正则表达式匹配html文件中各个标签的“name”属性和“id”属性的值,可得到html文件中的参数名称。
60.js文件,也即javascript文件,可按照现有技术中的任意方法将js文件解析成抽象语法树,然后遍历抽象语法树,获得类型属性为literal的子树,也即type=“literal”,最后提取该子树属性为“name”和“value”包含“/”的值,可得到js文件中的api接口名称,提取“name”和“value”的值,可得到js文件中的参数名称。
61.对于xml文件,提取在body节点下的第一级标签即为api接口名称,在提取api接口名称的基础上,在第一级标签的下级节点标签,也即api接口节点的下级节点标签,都为该请求的相关参数。其中,xml文件包括hnap协议和upnp协议传输数据时使用的模版文件
62.可选地,在一种实施例中,提取前端文件中用于标记用户输入数据的字符串,得到字符串集合之后,匹配后端程序与字符串集合中的字符串之前,设备安全检测方法还包括:去除字符串集合中长度小于p或大于q的参数名称,q大于p,p和q均为自然数;去除字符串集合中在n个或n个以上不同前端文件出现的参数名称,n为自然数;去除字符串集合中包含特殊字符的参数名称;去除字符串集合中长度小于或等于m的api接口名称,m为自然数;去除字符串集合中包含“/”和/或“?”之外的其他特殊字符的api接口名称;去除字符串集合中不包含“/”字符的api接口名称;和/或去除api接口名称中“?”字符后的字符。
63.具体地,在该实施例中,提取前端文件中相应的字符串形成字符串集合之后,采用字符串集合中的字符串与后端程序匹配之前,先对字符串集合进行过滤,过滤掉无效的字符串,提升字符串集合的有效性。具体地,对api接口名称和参数名称使用不同的过滤方法。
64.针对api接口名称,去除长度小于或等于m的字符串,m为自然数,也即保留长度大于m的字符串,例如m=5,保留5《len(str),作为api接口名称,发明人研究发现,通常长度会大于一定值,因此,将长度过小的字符串作为无效的api接口名称从字符串集合中去除;除包含“/”和/或“?”之外,还包含其他特殊字符的字符串被去除;去除不包含“/”字符的字符串,也即api接口名称中必须包括“/”字符。发明人研究发现,api接口名称中通常会包括“/”,因此将不包含“/”的字符串作为无效的api接口名称从字符串集合中去除,对于包含“?”的字符之外,保留“?”字符前的字符,去除“?”字符后的字符。
65.针对参数名称,从字符长度的角度进行筛选时,对于过长或过短的字符进行过滤,去除字符串集合中长度小于p或大于q的参数名称,也即保留长度大于等于p且小于等于q的字符,例如,保留长度大于等于5且小于等于25的字符,5《=len(str)《=25。发明人研究发现,当一个参数名称在多个前端文件中出现时,其实际上并不属于标记用户输入的字符串,因此,去除字符串集合中在n个或n个以上不同前端文件出现的参数名称,例如一个参数名称出现在10个不同文件中就去除,此外,常规的参数名称中不包括特殊字符,因此,将字符串集合中包含特殊字符的参数名称去除。
66.在根据匹配到的字符串确定污点引入点时,可以采用以下的一种或多种方法进行确定,各种方法具体描述如下。
67.可选地,在一种实施例中,根据匹配到的字符串确定污点引入点的步骤包括:确定匹配到的字符串在后端程序中引用指令的位置,得到直接引用点;将直接引用点作为污点引入点。
68.具体地,后端程序在字符串集合中匹配到字符串后,进一步确定该字符串在该后端程序的引用指令的地址位置,定义为直接引用点,以将该直接引用点作为后续污点分析的入口位置。
69.可选地,在一种实施例中,直接引用点用于将字符串作为参数传入至使用函数,根据匹配到的字符串确定污点引入点的步骤还包括:在后端程序中遍历使用函数的函数调用点;查函数调用点的字符串参数的传参位置,得到间接引用点;以及将间接引用点作为污点引入点。
70.具体地,根据直接引用点定位出的字符串所对应的使用函数,在后端程序中遍历这些使用函数所有的调用位置,查这些函数调用点的字符串参数的传参位置(指令地址),作为间接引用点,以将该间接引用点作为后续污点分析的入口位置。进一步可选地,在得到前述传参位置后,与直接引用点进行比对,仅将未在直接引用点中出现的地址作为间接引用点,减少冗余分析。
71.可选地,在一种实施例中,设备固件中包括多个后端程序,在根据匹配到的字符串确定污点引入点时,以上述直接引用点或间接引用点为基础,进一步确定跨进程引用点。具体地,判断后端程序中直接引用点(或间接引用点)的数据内容是否被传递至操作磁盘的set函数的变量中;若直接引用点(或间接引用点)的数据内容被传递至set函数的变量中,则在多个后端程序中查set函数对应的操作磁盘的get函数;确定get函数的变量赋值位置,得到跨进程引用点;以及将跨进程引用点作为污点引入点。
72.具体地,有些用户数据在进入后端程序的处理解析流程后,会在不同进程间传递,因此,在进行后端程序分析时,会增加后续分析的难度,为了简化这类数据流的分析难度,通过该实施例能够实现跨进程数据传递关系的恢复,以快速实现数据流的分析。在得到上述直接引用点(或间接引用点)后,针对该直接引用点(或间接引用点)位置处的数据内容做数据流分析,判断这部分数据是否在后续的处理中将数据内容传递至操作磁盘的set函数中,通过该set函数将此数据内容写入系统或文件,如果存在这类型的函数对数据内容进行操作,则在获取到的各个后端程序中分别查对应该set函数的get函数,查到后,确定该get函数的变量赋值位置,作为跨进程引用点,以将该点作为后续污点分析的入口位置。
73.例如,在得到直接引用点(或间接引用点)后,判断该直接引用点(或间接引用点)
位置处的数据内容是否被传递至类似nvram_safe_set("url_filter_mode",pcvar1)的变量pcvar1中,如果满足该条件,则在当前后端程序和其他后端程序中查对应的类似s1=(char*)nvram_safe_get("url_filter_mode")的函数,通过这两类函数特征,以及这两类函数引用参数中字符串的一致性,可以建立起两者的关系,并将类似这里变量s1的赋值位置作为跨进程引用点,作为新的一类数据流分析入口。
74.可选地,在一种实施例中,以污点引入点为分析起始点,对后端程序进行污点分析,以检测设备固件中是否存在安全漏洞的步骤包括:以污点引入点为根节点,提取污点引入点位置处的函数的子函数调用树,其中,在子函数调用树中,以后端程序中call指令作为连结父子节点的边,以预设目标函数作为叶节点;根据子函数调用树对后端程序进行污点执行;当污点执行到预设目标函数时,根据预设目标函数的参数是否被污染确定设备固件是否存在安全漏洞。
75.进一步地,在根据子函数调用树对后端程序进行污点执行时,污点执行的策略包括:判断当前子函数是否在子函数调用树上,若存在,则直接跟进执行,若不存在,则判断当前子函数的参数是否被污点扩散所污染到,若当前子函数的参数未被污染到,则不做处理跳过当前子函数执行,若当前子函数的参数被污染到,则当当前子函数的参数有返回值时,将污点扩散到返回值,当当前子函数的参数没有返回值时,将污点扩散到当前子函数的其他可写地址参数上。
76.进一步地,根据预设目标函数的参数是否被污染确定设备固件是否存在安全漏洞的步骤具体包括:当预设目标函数为可造成缓冲区溢出的函数时,判断预设目标函数的长度参数是否被污染,若长度参数不存在时,判断预设目标函数的数据源是否被污染,其中,当长度参数被污染,或预设目标函数的数据源被污染时,确定设备固件存在安全漏洞;当预设目标函数为可导致命令注入函数,判断预设目标函数的调用参数中是否存在被污染的字节内容,若调用参数中存在被污染的字节内容,则确定设备固件存在安全漏洞。
77.具体而言,在得到所有待分析的后端程序和污点引入点后,针对每个污点引入点,以该地址为根节点,提取出当前函数的子函数调用树(call trace),该子函数调用树以后端程序中call指令作为连结父子节点的边构建条件,以预先定义的目标函数作为叶节点,例如,以可能造成缓冲区溢出和命令注入的危险函数作为目标函数。对于无法最终调用到目标函数的子函数,直接将该节点及子树从函数调用树中除去。
78.其中,危险函数主要包括下面两类:
79.1)可能造成缓冲区溢出的危险函数包括类memcpy函数各种可能由于输入长度限制存在缺陷导致溢出的危险函数;也包括类似strcpy或带%s参数的sprintf等不限制输入长度所导致的潜在内存破坏的危险函数。
80.2)可能造成命令注入的危险函数包括system、popen以及在一些嵌入式环境中独有的dosystemcmd这类函数。
81.在构建子函数调用树,以此进行基于angr的指向性符号执行:以字符串被交叉引用的函数为污点执行的污点引入点进行符号执行,当遇到call指令引入的子函数时,依据执行策略判断是否需要跟进执行,并最终执行到目标函数上。对于目标函数制定相应的污点判断策略,当目标函数的若干参数符合被污点污染的条件时,输出相关告警提示。
82.上述中针对子函数的污点执行策略具体为:首先判断当前要调用的子函数是否在
提取的函数调用树上,若存在,则直接跟进执行,来确保符号执行最终能执行到目标函数;若不存在,则执行如下的污点扩散策略:若该函数的参数未被污点扩散所污染到,则不做处理直接跳过该子函数执行;若有参数被污染,则根据该子函数是否有返回值来决定是将污点直接扩散到返回值或扩散到该函数的其他可写地址参数上。
83.对于可能导致缓冲区溢出的危险函数,当污点分析执行到这类函数时,通常判断该函数的长度参数是否被污染,当长度参数不存在时,判断数据源是否被污染来判断是否可能造成缓冲区溢出漏洞。
84.对于可能导致命令注入的危险函数,当污点分析执行到这类函数时,通常判断该函数的调用参数中的每字节内容是否被污染,若存在被污染的字节则认为可能造成命令注入漏洞。
85.采用该实施例提供的设备安全检测方法,在前端资源文件中获得外部输入的语意,进而在静态分析后端程序的过程中,定位污点参数和接口函数引入的位置,能够缩短污点分析的过程,优化符号执行的路径选择,在执行输入敏感的污点分析基础上,大幅缩短了符号执行的求解空间,有效提升漏洞挖掘效率和准确性。
86.实施例二
87.对应于上述实施例一,本发明实施例二提供了一种设备安全检测装置,相应地技术特征细节和对应的技术效果可参考上述实施例一,在该实施例中不再赘述。图2为本发明实施例二提供的设备安全检测装置的框图,如图2所示,该装置包括:获取模块201、提取模块202、匹配模块203、确定模块204和分析模块205。
88.其中,获取模块201用于获取设备固件中的前端文件和后端程序;提取模块202用于提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配模块203用于匹配所述后端程序与所述字符串集合中的字符串;确定模块204用于根据匹配到的所述字符串确定污点引入点;分析模块205用于以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。
89.可选地,在一种实施例中,提取模块202在提取所述前端文件中用于标记用户输入数据的字符串时,提取所述前端文件中的api接口名称和参数名称。
90.可选地,在一种实施例中,确定模块204包括:第一确定单元,用于按照匹配到的字符串数量,确定所述后端程序是否为边界程序,其中,匹配到的字符串数量越大,所述后端程序被确定为边界程序的概率越大;以及第二确定单元,根据所述边界程序中匹配到的所述字符串确定污点引入点。
91.可选地,在一种实施例中,分析模块205以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞时,仅对所述边界程序进行污点分析。
92.可选地,在一种实施例中,所述前端文件包括html文件、js文件和/或xml文件,提取模块202提取所述前端文件中的api接口名称和参数名称时,具体执行的步骤包括:使用正则表达式匹配所述html文件中各个标签的“action”属性、“name”属性和“id”属性的值;将所述js文件解析成抽象语法树,遍历抽象语法树,获得类型属性为literal的子树,并提取所述子树属性为“name”包含“/”的值、“value”包含“/”的值、“name”的值和“value”的值;解析所述xml文件,提取在body节点下的第一级标签和所述第一级标签下级节点标签。
93.可选地,在一种实施例中,该设备安全检测装置还包括过滤模块,用于在提取模块提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合之后,匹配模块匹配所述后端程序与所述字符串集合中的字符串之前,执行以下步骤:去除所述字符串集合中长度小于p或大于q的参数名称,q大于p,q和p均为自然数;去除所述字符串集合中在n个或n个以上不同前端文件出现的参数名称,n为自然数;去除所述字符串集合中包含特殊字符的参数名称;去除所述字符串集合中长度小于或等于m的api接口名称,m为自然数;去除所述字符串集合中包含“/”和/或“?”之外的其他特殊字符的api接口名称;去除所述字符串集合中不包含“/”字符的api接口名称;和/或去除所述api接口名称中“?”字符后的字符。
94.可选地,在一种实施例中,确定模块204包括:第三确定单元,用于确定匹配到的所述字符串在所述后端程序中引用指令的位置,得到直接引用点,将所述直接引用点作为所述污点引入点。
95.可选地,在一种实施例中,所述设备固件中包括多个后端程序,确定模块204还包括:第四确定单元,用于判断所述后端程序中所述直接引用点的数据内容是否被传递至操作磁盘的第一set函数的变量中;若所述直接引用点的数据内容被传递至所述第一set函数的变量中,则在所述多个后端程序中查所述第一set函数对应的操作磁盘的第一get函数;确定所述第一get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。
96.可选地,在一种实施例中,所述直接引用点用于将所述字符串作为参数传入至使用函数,确定模块204还包括:第五确定单元,用于在所述后端程序中遍历所述使用函数的函数调用点;查所述函数调用点的字符串参数的传参位置,得到间接引用点;以及将所述间接引用点作为所述污点引入点。
97.可选地,在一种实施例中,所述设备固件中包括多个后端程序,确定模块204还包括:第六确定单元,用于判断所述后端程序中所述间接引用点的数据内容是否被传递至操作磁盘的第二set函数的变量中;若所述间接引用点的数据内容被传递至所述第二set函数的变量中,则在所述多个后端程序中查所述第二set函数对应的操作磁盘的第二get函数;确定所述第二get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。
98.可选地,在一种实施例中,分析模块205包括:提取单元,用于以所述污点引入点为根节点,提取所述污点引入点位置处的函数的子函数调用树,其中,在所述子函数调用树中,以所述后端程序中call指令作为连结父子节点的边,以预设目标函数作为叶节点;执行单元,用于根据所述子函数调用树对所述后端程序进行污点执行,其中,所述污点执行的策略包括:判断当前子函数是否在所述子函数调用树上,若存在,则直接跟进执行,若不存在,则判断所述当前子函数的参数是否被污点扩散所污染到,若所述当前子函数的参数未被污染到,则不做处理跳过所述当前子函数执行,若所述当前子函数的参数被污染到,则当所述当前子函数的参数有返回值时,将污点扩散到所述返回值,当所述当前子函数的参数没有返回值时,将污点扩散到所述当前子函数的其他可写地址参数上;判断单元,用于当污点执行到所述预设目标函数时,根据所述预设目标函数的参数是否被污染确定所述设备固件是否存在安全漏洞,其中,判断单元具体执行的步骤包括:当所述预设目标函数为可造成缓冲区溢出的函数时,判断所述预设目标函数的长度参数是否被污染,若所述长度参数不存在
时,判断所述预设目标函数的数据源是否被污染,其中,当所述长度参数被污染,或所述预设目标函数的数据源被污染时,确定所述设备固件存在安全漏洞;当所述预设目标函数为可导致命令注入函数,判断所述预设目标函数的调用参数中是否存在被污染的字节内容,若所述调用参数中存在被污染的字节内容,则确定所述设备固件存在安全漏洞。
99.实施例三
100.本实施例三还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集)等。如图3所示,本实施例的计算机设备01至少包括但不限于:可通过系统总线相互通信连接的存储器012、处理器011,如图3所示。需要指出的是,图3仅示出了具有组件存储器012和处理器011的计算机设备01,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
101.本实施例中,存储器012(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器012可以是计算机设备01的内部存储单元,例如该计算机设备01的硬盘或内存。在另一些实施例中,存储器012也可以是计算机设备01的外部存储设备,例如该计算机设备01上配备的插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)等。当然,存储器012还可以既包括计算机设备01的内部存储单元也包括其外部存储设备。本实施例中,存储器012通常用于存储安装于计算机设备01的操作系统和各类应用软件,例如实施例二的设备安全检测装置的程序代码等。此外,存储器012还可以用于暂时地存储已经输出或者将要输出的各类数据。
102.处理器011在一些实施例中可以是中央处理器(central processing unit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器011通常用于控制计算机设备01的总体操作。本实施例中,处理器011用于运行存储器012中存储的程序代码或者处理数据,例如设备安全检测方法等。
103.实施例四
104.本实施例四还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘、服务器、app应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储设备安全检测置,被处理器执行时实现实施例一的设备安全检测方法。
105.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
106.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
107.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方
法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
108.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

技术特征:


1.一种设备安全检测方法,其特征在于,包括:获取设备固件中的前端文件和后端程序;提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配所述后端程序与所述字符串集合中的字符串;根据匹配到的所述字符串确定污点引入点;以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。2.根据权利要求1所述的设备安全检测方法,其特征在于,提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合的步骤包括:提取所述前端文件中的api接口名称和参数名称。3.根据权利要求1或2所述的设备安全检测方法,其特征在于,根据匹配到的所述字符串确定污点引入点的步骤包括:按照匹配到的字符串数量,确定所述后端程序是否为边界程序,其中,匹配到的字符串数量越大,所述后端程序被确定为边界程序的概率越大;以及根据所述边界程序中匹配到的所述字符串确定污点引入点。4.根据权利要求3所述的设备安全检测方法,其特征在于,以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞的步骤包括:以所述污点引入点为分析起始点,仅对所述边界程序进行污点分析,以检测所述设备固件中是否存在安全漏洞。5.根据权利要求2所述的设备安全检测方法,其特征在于,所述前端文件包括html文件、js文件和/或xml文件,提取所述前端文件中的api接口名称和参数名称的步骤包括:使用正则表达式匹配所述html文件中各个标签的“action”属性、“name”属性和“id”属性的值;将所述js文件解析成抽象语法树,遍历抽象语法树,获得类型属性为literal的子树,并提取所述子树属性为“name”包含“/”的值、“value”包含“/”的值、“name”的值和“value”的值;解析所述xml文件,提取在body节点下的第一级标签和所述第一级标签下级节点标签。6.根据权利要求2所述的设备安全检测方法,其特征在于,提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合之后,匹配所述后端程序与所述字符串集合中的字符串之前,所述设备安全检测方法还包括:去除所述字符串集合中长度小于p或大于q的参数名称,q大于p,q和p均为自然数;去除所述字符串集合中在n个或n个以上不同前端文件出现的参数名称,n为自然数;去除所述字符串集合中包含特殊字符的参数名称;去除所述字符串集合中长度小于或等于m的api接口名称,m为自然数;去除所述字符串集合中包含“/”和/或“?”之外的其他特殊字符的api接口名称;去除所述字符串集合中不包含“/”字符的api接口名称;和/或去除所述api接口名称中“?”字符后的字符。7.根据权利要求2所述的设备安全检测方法,其特征在于,根据匹配到的所述字符串确定污点引入点的步骤包括:
确定匹配到的所述字符串在所述后端程序中引用指令的位置,得到直接引用点;将所述直接引用点作为所述污点引入点。8.根据权利要求7所述的设备安全检测方法,其特征在于,所述设备固件中包括多个后端程序,根据匹配到的所述字符串确定污点引入点的步骤还包括:判断所述后端程序中所述直接引用点的数据内容是否被传递至操作磁盘的第一set函数的变量中;若所述直接引用点的数据内容被传递至所述第一set函数的变量中,则在所述多个后端程序中查所述第一set函数对应的操作磁盘的第一get函数;确定所述第一get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。9.根据权利要求7所述的设备安全检测方法,其特征在于,所述直接引用点用于将所述字符串作为参数传入至使用函数,根据匹配到的所述字符串确定污点引入点的步骤还包括:在所述后端程序中遍历所述使用函数的函数调用点;查所述函数调用点的字符串参数的传参位置,得到间接引用点;以及将所述间接引用点作为所述污点引入点。10.根据权利要求9所述的设备安全检测方法,其特征在于,所述设备固件中包括多个后端程序,根据匹配到的所述字符串确定污点引入点的步骤还包括:判断所述后端程序中所述间接引用点的数据内容是否被传递至操作磁盘的第二set函数的变量中;若所述间接引用点的数据内容被传递至所述第二set函数的变量中,则在所述多个后端程序中查所述第二set函数对应的操作磁盘的第二get函数;确定所述第二get函数的变量赋值位置,得到跨进程引用点;以及将所述跨进程引用点作为所述污点引入点。11.根据权利要求1所述的设备安全检测方法,其特征在于,以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件中是否存在安全漏洞的步骤包括:以所述污点引入点为根节点,提取所述污点引入点位置处的函数的子函数调用树,其中,在所述子函数调用树中,以所述后端程序中call指令作为连结父子节点的边,以预设目标函数作为叶节点;根据所述子函数调用树对所述后端程序进行污点执行,其中,所述污点执行的策略包括:判断当前子函数是否在所述子函数调用树上,若存在,则直接跟进执行,若不存在,则判断所述当前子函数的参数是否被污点扩散所污染到,若所述当前子函数的参数未被污染到,则不做处理跳过所述当前子函数执行,若所述当前子函数的参数被污染到,则当所述当前子函数的参数有返回值时,将污点扩散到所述返回值,当所述当前子函数的参数没有返回值时,将污点扩散到所述当前子函数的其他可写地址参数上;当污点执行到所述预设目标函数时,根据所述预设目标函数的参数是否被污染确定所述设备固件是否存在安全漏洞,
其中,根据所述预设目标函数的参数是否被污染确定所述设备固件是否存在安全漏洞的步骤具体包括:当所述预设目标函数为可造成缓冲区溢出的函数时,判断所述预设目标函数的长度参数是否被污染,若所述长度参数不存在时,判断所述预设目标函数的数据源是否被污染,其中,当所述长度参数被污染,或所述预设目标函数的数据源被污染时,确定所述设备固件存在安全漏洞;当所述预设目标函数为可导致命令注入函数,判断所述预设目标函数的调用参数中是否存在被污染的字节内容,若所述调用参数中存在被污染的字节内容,则确定所述设备固件存在安全漏洞。12.一种设备安全检测装置,其特征在于,包括:获取模块,用于获取设备固件中的前端文件和后端程序;提取模块,用于提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配模块,用于匹配所述后端程序与所述字符串集合中的字符串;确定模块,用于根据匹配到的所述字符串确定污点引入点;分析模块,用于以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。13.一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至11任一项所述方法的步骤。14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至11任一项所述方法的步骤。

技术总结


本发明提供了一种设备安全检测方法、装置、计算机设备和可读存储介质。该方法包括:获取设备固件中的前端文件和后端程序;提取所述前端文件中用于标记用户输入数据的字符串,得到字符串集合;匹配所述后端程序与所述字符串集合中的字符串;根据匹配到的所述字符串确定污点引入点;以所述污点引入点为分析起始点,对所述后端程序进行污点分析,以检测所述设备固件是否存在安全漏洞。通过本发明,能够提升物联网设备安全检测的准确性。物联网设备安全检测的准确性。物联网设备安全检测的准确性。


技术研发人员:

王衍豪 令狐甲琦 陈力波 蔡洤朴 侯勤胜 刘跃

受保护的技术使用者:

网神信息技术(北京)股份有限公司 上海交通大学

技术研发日:

2021.06.23

技术公布日:

2022/12/22

本文发布于:2024-09-22 03:46:53,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/46428.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   污点   字符串   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议