基于Linux系统的嵌入式设备漏洞自动化挖掘方法及装置

文档序号:31698775发布日期:2022-10-01 06:59阅读:121来源:国知局
基于Linux系统的嵌入式设备漏洞自动化挖掘方法及装置
基于linux系统的嵌入式设备漏洞自动化挖掘方法及装置
技术领域
1.本发明涉及linux系统的漏洞挖掘,具体为基于linux系统的嵌入式设备漏洞自动化挖掘方法及装置。


背景技术:

2.随着物联网产业的扩大与智能设备的普及,数以亿计的基于linux系统的嵌入式设备逐渐融入到人们的生活当中。然而数量巨大、类型多、计算能力薄弱的嵌入式设备非常容易出现各种安全漏洞,这些安全漏洞一旦被攻击者恶意利用会造成严重损失。
3.与传统个人电脑相比,基于linux的嵌入式设备具有硬件资源受限、运行环境复杂、处理器架构种类多、进程间通信频繁等特点,导致传统的漏洞挖掘工具无法直接应用于基于linux系统的嵌入式设备中。
4.因此,现有技术无法发现基于linux的嵌入式设备中的命令执行、缓冲区溢出漏洞。


技术实现要素:

5.针对现有技术中存在的问题,本发明提供基于linux系统的嵌入式设备漏洞自动化挖掘方法及装置,可高效、快速地发现基于linux的嵌入式设备中的安全漏洞。
6.本发明是通过以下技术方案来实现:
7.一方面的,本发明一实施提供一种基于linux系统的嵌入式设备漏洞自动化挖掘方法,包括:
8.获取linux文件系统;
9.对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢
10.的边界二进制和引用字符串,所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;
11.根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。
12.进一步的,所述对所述linux文件系统进行处理,确定引用字符串和边界二进制,包括:
13.获取前端引用字符串以及预设边界二进制;
14.根据所述预设边界二进制,确定进程间通信写函数对应的参数字符串;
15.确定进程间通信读函数是否引用所述参数字符串,所述进程间通信读函数是对应所述进程间通信写函数的读函数;
16.若是,则确定所述参数字符串为所述引用字符串,所述预设边界二进制为边界二进制。
17.进一步的,所述根据所述引用字符串和所述边界二进制对动态链接库中路径进行
探索,确定危险路径,包括:
18.对所述边界二进制进行路径探索,确定危险函数的路径以及外部函数的路径;
19.根据所述外部函数,获取所述外部函数对应的动态链接库,并确定在所述动态链接库中调用危险函数的路径;
20.将所述路径做为所述危险路径。
21.进一步的,所述根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定调用危险函数的路径之后,还包括:
22.将所述边界二进制与动态链接库分别进行处理,确定所述危险路径中的无效路径。
23.进一步的,所述获取linux文件系统之后,还包括:
24.根据所述linux文件系统,确定linux启动脚本;
25.将所述linux启动脚本进行正则逐行解释,确定shell调用树,所述shell调用树包括将程序、函数、脚本名作为的树节点;
26.遍历所述shell调用树,确定自启动程序列表;
27.根据所述自启动程序列表,确定自启动程序存在异常;
28.若是,则所述自启动程序为后门程序;
29.若否,则所述自启动程序不为后门程序。
30.一方面的,本发明一实施提供一种基于linux系统的嵌入式设备漏洞自动化挖掘装置,包括:
31.获取模块,用于获取linux文件系统;
32.处理模块,用于对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串,所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;
33.确定模块,用于根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。
34.进一步的,所述处理模块,具体用于获取前端引用字符串以及预设边界二进制;根据所述预设边界二进制,确定进程间通信写函数对应的参数字符串;确定进程间通信读函数是否引用所述参数字符串,所述进程间通信读函数是对应所述进程间通信写函数的读函数;若是,则确定所述参数字符串为所述引用字符串,所述预设边界二进制为边界二进制。
35.进一步的,所述确定模块,具体用于对所述边界二进制进行路径探索,确定危险函数的路径以及外部函数的路径;根据所述外部函数,获取所述外部函数对应的动态链接库,并确定在所述动态链接库中调用危险函数的路径;将所述路径做为所述危险路径。
36.进一步的,所述确定模块,还用于将所述边界二进制与动态链接库分别进行处理,确定所述危险路径中的无效路径。
37.进一步的,所述处理模块,还用于根据所述linux文件系统,确定linux启动脚本;将所述linux启动脚本进行正则逐行解释,确定shell调用树,所述shell调用树包括将程序、函数、脚本名作为的树节点;遍历所述shell调用树,确定自启动程序列表;根据所述自启动程序列表,确定自启动程序存在异常;若是,则所述自启动程序为后门程序;若否,则所
述自启动程序不为后门程序。
38.与现有技术相比,本发明具有以下有益的技术效果:
39.本发明实施例提供的基于linux系统的嵌入式设备漏洞自动化挖掘方法及装置,通过获取linux文件系统;对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串,所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。由于本发明还关注了基于linux的嵌入式设备中的动态链接库,因此可以发现基于linux的嵌入式设备中的命令执行、缓冲区溢出漏洞。
附图说明
40.图1是本发明一实施例基于linux系统的嵌入式设备漏洞自动化挖掘方法的流程示意图;
41.图2是本发明一实施例不安全的路径的示意图;
42.图3是本发明一实施例边界二进制污点汇聚点示意图示意图;
43.图4是本发明一实施例执行时间对比的示意图;
44.图5是本发明一实施例基于linux系统的嵌入式设备漏洞自动化挖掘装置的结构示意图。
具体实施方式
45.下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。
46.如图1所示,本发明实施例提供的一种基于linux系统的嵌入式设备漏洞自动化挖掘方法,包括:
47.步骤1、获取linux文件系统;
48.举例来讲,对固件的自动化解压与文件识别、分类。首先根据固件的类型,利用zip、binwalk等工具进行递归解压,获取完整的linux文件系统。然后,将整个嵌入式系统的文件进行分类,提取出shell脚本、前端静态文件(包括html、js、xml)、后端可执行二进制以及共享动态链接库。
49.步骤2、对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串。
50.本实施例中的所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;
51.具体的,获取前端引用字符串以及预设边界二进制;
52.根据所述预设边界二进制,确定进程间通信写函数对应的参数字符串;
53.确定进程间通信读函数是否引用所述参数字符串,所述进程间通信读函数是对应所述进程间通信写函数的读函数;
54.若是,则确定所述参数字符串为所述引用字符串,所述预设边界二进制为边界二进制。
55.举例来讲,该步骤根据预处理模块得到的文件系统,获取需要分析命令注入、缓冲区溢出的边界二进制(本发明将直接或间接参与到处理用户数据的可执行二进制称为边界二进制),以及获取定位控制流分析起点位置的引用字符串。具体步骤如下:
56.(3a)利用文献“chen l,wang y,cai q,et al.sharing more and checking less:leveraging common input keywords to detect bugs in embedded systems[c]//30th usenix security symposium(usenix security 21).2021:303-319”中的satc工具,获取前端引用字符串以及边界二进制。
[0057]
(3b)从得到的边界二进制中得到进程间通信“写”函数与对应的参数字符串。
[0058]
(3c)从预处理得到的linux文件系统的可执行二进制中找到上一步获取的进程间通信“写”函数相对应的进程间通信“读”函数,若上一步获取的参数字符串被这些“读”函数引用,则将其加入到新的引用字符串集合中,并且将这些可执行二进制加入到边界二进制中。
[0059]
步骤3、根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径;
[0060]
所述危险路径包括调用危险函数的路径。
[0061]
具体的,对所述边界二进制进行路径探索,确定危险函数的路径以及外部函数的路径;
[0062]
根据所述外部函数,获取所述外部函数对应的动态链接库,并确定在所述动态链接库中调用危险函数的路径;
[0063]
将所述路径做为所述危险路径。
[0064]
举例来讲,该步骤利用上一步获取的边界二进制以及引用字符串,通过路径探索来生成调用危险函数的路径。具体步骤如下:
[0065]
(4a)从调用引用字符串的代码位置处开始,对边界二进制进行路径探索,找到存在危险函数以及外部函数的路径(在实现时,为避免外部函数数量过多而做无用分析,本发明硬编码了一个外部函数黑名单,包括了各种常见库、标准库函数,比如open、close,这些黑名单里的函数在路径生成阶段不作为外部函数输出)。
[0066]
(4b)根据(4a)得到的外部函数,找到该外部函数所实现的动态链接库,然后进入到动态链接库中的该函数实现位置进行路径探索,找到调用危险函数的路径。
[0067]
即:4a在可执行二进制里面找危险函数的路径以及外部函数路径,4b在4a的基础上(根据4a得到的外部函数)在相应的动态链接库里面去找危险路径的路径。
[0068]
(4c)根据第二步生成的危险路径,将产生该危险路径的外部函数标记为危险别名函数,将存在该外部函数的路径加入到第一步生成的危险路径中作为最后的危险路径返回。
[0069]
最终得到的不安全的路径如图2所示,不仅包括了危险函数在边界二进制中的路径1
→2→
5,也包括危险函数位于动态链接库的危险路径1
→3→
6。
[0070]
本发明实施例通过获取linux文件系统;对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串,所述边界二进制包括用户直接
接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。由于本发明还关注了基于linux的嵌入式设备中的动态链接库,因此可以发现基于linux的嵌入式设备中的命令执行、缓冲区溢出漏洞。
[0071]
本发明实施例提供的一种基于linux系统的嵌入式设备漏洞自动化挖掘方法,在图1所示实施例的基础上,还包括:
[0072]
所述根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定调用危险函数的路径之后,还包括:
[0073]
将所述边界二进制与动态链接库分别进行处理,确定所述危险路径中的无效路径。
[0074]
举例来讲,上一步的不安全路径生成阶段会生成大量危险路径,需要从这些危险路径中剔除掉无效路径。本发明目前主要支持arm架构与mips架构的漏洞挖掘,针对mips架构的嵌入式设备,本发明实现了一个新的静态污点分析引擎,用于过滤危险路径中的无效路径;对arm架构的嵌入式设备,则通过调用修改后的satc污点分析引擎。
[0075]
本发明中的污点分析对象包括两个,即可执行边界二进制与动态链接库。当污点分析对象是动态链接库时,污点源被定义为入口函数的参数,汇聚点是预定义的危险函数,若污点源能没有限制地到达汇聚点则将入口函数当作危险函数的“别名函数”。边界二进制的污点分析则是建立在动态链接库的污点分析之上,污点源被定义为调用引用字符串的代码位置,而汇聚点是预定义的危险函数以及对动态链接库污点分析后的得出的“别名函数”,边界二进制的污点汇聚点如图3所示。
[0076]
可选的,所述获取linux文件系统之后,还包括:
[0077]
根据所述linux文件系统,确定linux启动脚本;
[0078]
将所述linux启动脚本进行正则逐行解释,确定shell调用树,所述shell调用树包括将程序、函数、脚本名作为的树节点;
[0079]
遍历所述shell调用树,确定自启动程序列表;
[0080]
根据所述自启动程序列表,确定自启动程序存在异常;
[0081]
若是,则所述自启动程序为后门程序;
[0082]
若否,则所述自启动程序不为后门程序。
[0083]
举例来讲,后门漏洞发现,包括以下步骤:
[0084]
(2a)从linux文件系统中找到linux启动脚本,利用正则逐行解释启动脚本调用的程序或脚本,将程序、函数、脚本名作为树节点以构建shell调用树。具体步骤为:
[0085]
(2a1)通过inittab文件或/etc/init.d/等目录,找到利用linux设备在启动过程中自动运行的shell脚本。
[0086]
(2a2)对shell脚本进行逐行翻译,将shell调用的命令加入到shell脚本的子节点中。具体地,首先以“&|;”等特殊符号进行分割以得到执行的每一条语句;然后对每一条语句再以空格作为分隔符提取第一个字符串视为调用的命令。
[0087]
(2a3)若所得的命令为新shell脚本或函数,则找到该shell脚本,递归进行第二步。直至所有自启动脚本被分析,获取到shell调用树。
[0088]
(2b)遍历该shell调用树,获取到自启动程序列表,判断自启动程序是否为后门。若程序在黑名单中,或程序不在白名单中却存在异常可疑行为(程序调用listen等网络相关的函数、system等执行系统命令的函数),则将该程序视为后门。
[0089]
本实施例利用linux启动脚本构建shell调用图来挖掘后门漏洞,未在启动脚本中的后门(如telnet)将不再视为后门,因此具有有着较低的假阳性。
[0090]
本发明的效果可以通过一下仿真实验做进一步的说明。
[0091]
1、仿真条件
[0092]
本发明是在中央处理器为intel(r)core(tm)i7-10750h,内存大小为16gb,操作系统为ubuntu20.04的计算机上。其中开发所需的工具ida pro版本为7.0,python版本为3.8。另外,在漏洞验证时使用文献kim m,kim d,kim e,et al.firmae:towards large-scale emulation of iot firmware for dynamic analysis[c]//annual computer security applications conference.2020:733-745中的firmae工具进行模拟仿真,并对输出漏洞警告进行手动分析,判断漏洞是否为真。实验数据集包括satc中的固件数据集以及自收集的固件数据集,如表1与表2。
[0093]
表1 satc固件数据集
[0094][0095][0096]
表2本发明收集的固件数据集
[0097]
供应商设备类型设备序列号固件数量架构tenda路由器/无线apac/g/w15arm/mipsblink路由器bl5mipstrendnet路由器/无线aptew5arm/mipsnetgear路由器r/wnr/mr3mipsd-link路由器dir/dap5mipslinksys路由器ea/e3mipsnetcore路由器power2arm/mips
[0098]
实验中所对比的方法为satc,参考文献为chen l,wang y,cai q,et al.sharing more and checking less:leveraging common input keywords to detect bugs in embedded systems[c]//30th usenix security symposium(usenix security 21).2021:303-319。
[0099]
仿真内容
[0100]
根据本发明具体实施方式所诉,运行本发明来挖掘固件中的漏洞,记录挖掘漏洞数、运行时间与误报率,并与satc方法进行比较。
[0101]
其中,挖掘漏洞数量对比如表3与表4所示。
[0102]
表3 satc固件数据集的漏洞数量对比表
[0103]
供应商设备类型设备序列号固件数量satc漏洞数本发明漏洞数netgear路由器r/xr/wnr1955d-link路由器dir/dsr51215tenda路由器ac/w/g71013totolink路由器a/t221motorola路由器c1/m2232axis摄像头p/q200
[0104]
表4本发明收集的固件数据集的漏洞数量对比表
[0105][0106][0107]
从上述数据集中抽取不同厂家、不同架构的9个固件,统计的其执行时间,如图4所示。
[0108]
从上述数据库中抽取9个固件,利用firmae模拟设备,并通过人工验证来检验输出结果的真假性,得出的误报率对比如表5所示。
[0109]
表5误报率对比
[0110][0111]
可以发现,虽然本发明目前误报率稍高,但本发明方法相比较于satc能挖掘出更多的命令执行、缓冲区溢出漏洞,另外,本发明方法的执行时间在mips架构上的执行时间相比较于satc有明显的下降,验证了本发明的先进性。
[0112]
图5是本发明一实施例基于linux系统的嵌入式设备漏洞自动化挖掘装置的结构示意图;如图5所示,本发明实施例提供的基于linux系统的嵌入式设备漏洞自动化挖掘装置,包括:获取模块51、处理模块52和确定模块53,其中,
[0113]
获取模块51,用于获取linux文件系统;
[0114]
处理模块52,用于对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串,所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;
[0115]
确定模块53,用于根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。
[0116]
本发明实施例通过获取linux文件系统;对所述linux文件系统进行处理,确定用于分析命令注入、缓冲区溢出的边界二进制和引用字符串,所述边界二进制包括用户直接接参与到处理用户数据的可执行二进制,或间接参与到处理用户数据的可执行二进制,所述引用字符串包括用于定位控制流分析起点位置的引用字符串;根据所述引用字符串和所述边界二进制对动态链接库中路径进行探索,确定危险路径,所述危险路径包括调用危险函数的路径。由于本发明还关注了基于linux的嵌入式设备中的动态链接库,因此可以发现基于linux的嵌入式设备中的命令执行、缓冲区溢出漏洞。
[0117]
本发明实施例提供的所述处理模块52,具体用于获取前端引用字符串以及预设边界二进制;根据所述预设边界二进制,确定进程间通信写函数对应的参数字符串;确定进程间通信读函数是否引用所述参数字符串,所述进程间通信读函数是对应所述进程间通信写函数的读函数;若是,则确定所述参数字符串为所述引用字符串,所述预设边界二进制为边界二进制。
[0118]
进一步的,所述确定模块53,具体用于对所述边界二进制进行路径探索,确定危险函数的路径以及外部函数的路径;根据所述外部函数,获取所述外部函数对应的动态链接库,并确定在所述动态链接库中调用危险函数的路径;将所述路径做为所述危险路径。
[0119]
进一步的,所述确定模块53,还用于将所述边界二进制与动态链接库分别进行处理,确定所述危险路径中的无效路径。
[0120]
进一步的,所述处理模块52,还用于根据所述linux文件系统,确定linux启动脚本;将所述linux启动脚本进行正则逐行解释,确定shell调用树,所述shell调用树包括将程序、函数、脚本名作为的树节点;遍历所述shell调用树,确定自启动程序列表;根据所述自启动程序列表,确定自启动程序存在异常;若是,则所述自启动程序为后门程序;若否,则所述自启动程序不为后门程序。
[0121]
本发明实施例提供的一种基于linux系统的嵌入式设备漏洞自动化挖掘装置的工作原理及技术效果与上述方法的类似,在此不再赘述。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1