APP下载

一种基于无害处理识别的嵌入式设备漏洞检测方法

2023-10-11周建华湛蓝蓝杜跃进

信息安全研究 2023年10期
关键词:污点漏洞嵌入式

周建华 李 丰 湛蓝蓝 杜跃进 霍 玮

1(中国科学院信息工程研究所 北京 100093)2(中国科学院大学网络空间安全学院 北京 100049)3(中国科学院网络测评技术重点实验室 北京 100195)4(网络安全防护技术北京市重点实验室 北京 100195)5(三六零科技集团有限公司 北京 100015)

物联网设备在国民经济中发挥着日益重要的作用,然而,设备厂商对网络安全的忽视导致物联网设备的安全问题严重突出.根据公开安全研究报告显示[1],57%的物联网设备存在中、高危安全漏洞,给互联网带来巨大的安全威胁.其中,家用路由器、网络摄像头等嵌入式设备由于开放了多种服务(如Web服务、DNS服务),因此,近年来这些嵌入式设备的安全漏洞频频暴露.

污点分析是检测嵌入式设备漏洞的重要手段,而无害处理操作(sanitizer)又是污点分析的重要组成部分[2].污点分析的无害处理操作是指检查程序是否对污点数据进行了安全操作或者过滤,使污点数据不再具有安全风险.现有方法通常依赖符号执行或者简单模式匹配识别无害处理操作,然而,前者存在路径爆炸和耗时的约束求解问题;后者没有判断约束表达式中的变量和污点变量的关联关系,导致识别结果存在漏报.

为了解决上述问题,本文分析了无害处理操作的代码特征,在此基础上设计并实现了一种基于无害处理识别的嵌入式设备漏洞检测方法(approach based on sanitizer identification, ASI).该方法首先通过建立污点变量及其长度变量的关联关系,识别基于路径条件约束的无害处理操作;同时通过启发式方法检测攻击字符过滤函数,从而识别基于函数的无害处理操作;最后,检查传入危险函数的关键变量是否经过无害处理,如果不满足,则报告存在疑似缓冲区溢出或者命令注入漏洞.

1 相关工作与挑战

在嵌入式设备固件程序中,污点传播过程中的无害处理主要涉及2类操作,分别为基于路径条件约束对用户输入数据的长度限制和基于无害处理函数对用户输入数据的有效性检查.当用户输入传递到数据访问类的危险函数时,如果缺少对输入数据的长度约束,则可能导致缓冲区溢出漏洞;当用户输入传递到命令执行类的危险函数时,如果缺少对输入数据的有效性检查(如是否过滤特殊字符或字符串),则可能存在命令注入的风险.

为了准确识别无害处理操作,现有方法在以下2方面进行了尝试[3-9]:一种是基于符号执行的路径约束收集,代表性工作为Karonte[10]和SaTC[11].然而,基于符号执行的方法存在路径爆炸和耗时的约束求解问题,导致漏洞检测时间开销高.另一种无害处理识别方法为基于简单的模式匹配方法,其中代表性工作为Dtaint[12]和EmTaint[13].Dtaint和EmTaint通过检查传入危险函数的关键变量是否经过指定模式的约束表达式,从而确认路径条件约束是否存在,如Dtaint重点关注“n

通过变量关联关系进行识别是识别无害处理操作的有效手段,然而嵌入式设备固件程序以二进制形态呈现,程序通过寄存器和堆栈对变量进行存储和访问,因此代表变量类型和名称的语义信息丢失,使得分析人员无法直观获取某变量对应的长度变量信息.

2 方法设计与实现

2.1 总体框架

本文通过分析无害处理操作的特征,设计并实现了基于无害处理识别的嵌入式设备漏洞检测方法ASI.ASI通过识别基于路径条件约束的无害处理操作和基于函数的无害处理操作,提升污点分析技术的精度,降低漏洞检测结果的误报.如图1所示,ASI主要包含基于长度约束的变量关联关系识别、启发式的攻击字符过滤函数识别、基于无害处理识别的漏洞检测3个阶段.

2.2 基于长度约束的变量关联关系识别

在嵌入式设备固件程序中,基于路径条件约束的无害处理操作主要是对污点变量的长度进行约束.因此,基于路径条件约束的无害处理识别需要检查污点变量在传入危险函数之前是否进行了长度约束.本文基于路径条件约束的无害处理识别,重点识别变量之间的“内容-长度”关系,并基于这种关联关系推断路径条件约束表达式中的变量是否为污点变量的长度变量.

该阶段首先根据长度变量被获取时的3种代码特征,识别变量之间的长度关联关系.其次,基于识别出的污点变量及其长度变量,采取2种形式对变量关联关系进行标记.最后,进行变量关联关系的传播.

2.2.1 关联关系识别

为了识别变量“内容-长度”之间的关联关系,本文总结了长度变量被获取时的3种代码特征:1)根据常见污点源函数(如recvmsg)接收数据报文并指定报文长度;2)通过特定内存访问模式建立关联关系,如通过strlen-malloc-memcpy等函数建立原始变量长度与新申请变量之间的关联关系;3)根据长度获取函数(如strlen)获取关联关系.

根据上述3种代码特征,本文采用3种方式识别变量之间的“内容-长度”关联关系.

首先,基于标准污点源函数原型确定参数变量之间的关联关系.本文通过内置4种库函数的变量关联关系规则(如表1所示),标记数据及其长度的对应关系.

表1 常见的报文接收函数及其参数关联关系

其次,根据内存访问模式识别变量关联关系.通过识别“长度获取-内存申请-内存赋值”访问模式,检查程序是否获取了污点变量的长度(记为taintLen),并将其和新申请的内存变量taintVar进行关联.

最后,基于标准化的长度获取函数识别变量关联关系.本文根据标准长度获取操作,包括sizeof(),strlen()等获取污点变量的长度信息.

2.2.2 关联关系标记

基于初始识别出的“内容-长度”关联关系,本文采取2种方式进行关联关系的标记:

第1种标记方式是在污点状态中进行关联关系标记,即直接在污点状态信息中标记污点变量对应的长度变量;

第2种标记方式是利用特定结构标记存储具有长度关联关系的变量结构体信息.即如果污点变量和长度变量存储在具备相同基地址和不同偏移的栈空间,则判定2个变量位于该基地址所指向的结构体,并标记结构体的偏移信息.

2.2.3 关联关系传播

对于标记在污点状态中的关联关系,随着污点传播实现对长度关系的传播即可.对于标记在特定结构体中的关联关系,如果后续存在对结构中偏移信息的访问,则进行关联关系传播.

2.3 启发式的攻击字符过滤函数识别

当污点数据传入命令执行类危险函数时,为了防止命令注入漏洞的发生,嵌入式设备厂商常通过无害处理函数对用户输入数据的有效性进行检查.无害处理函数的使用主要体现在2个方面:一是通过对特殊字符串的过滤;二是调用常见无害处理函数的包装函数.

对于特殊字符串过滤函数,ASI基于以下启发式方法进行识别:1)识别函数中是否存在对可导致命令执行的7种特殊字符或者字符串的过滤,包括“;,.sh,iptables,telnetd,|,’,&”;2)识别函数体是否包含对字符串匹配后的分支处理;3)函数功能是否单一.由于过滤函数的目的是对参数中出现的特殊字符或者字符串进行检查,因此函数中包含的基本块数量和所调用的函数数量相对较少.根据经验,本文设置函数基本块数量上限为7,所调用的函数数量上限为5.

对于无害处理包装函数识别,ASI内置了6个常见的无害处理函数列表,如表2所示.ASI将上述函数及其包装函数识别为无害处理函数.

表2 常见无害处理函数列表

2.4 基于无害处理识别的漏洞检测

该过程以获取的变量关联关系和攻击字符过滤函数为基础,实现基于路径条件约束的无害处理识别和基于函数的无害处理识别,并同步完成漏洞检测.当用户输入传递到数据访问类的危险函数时,如果不存在对输入数据的长度约束,则报告存在疑似缓冲区溢出漏洞;当用户输入传递到命令执行类的危险函数时,如果缺少对输入数据的有效性检查,则报告存在疑似命令注入漏洞.

对于缓冲区溢出漏洞检测,本文关注路径约束表达式中是否存在对传入危险函数关键变量的长度变量的判断,如果满足则说明存在无害处理操作;否则报告存在疑似缓冲区溢出漏洞.例如,对于if(n

对于命令注入漏洞检测,本文主要检查传入命令执行类函数的关键变量是否经过攻击字符过滤函数的无害处理,如果满足则说明存在无害处理操作;否则认为不存在无害处理,并报告存在疑似命令注入漏洞.

3 实验与分析

3.1 实验配置

本文在已有嵌入式设备漏洞检测原型系统ITS[14]的基础上,设计并实现了基于无害处理识别的嵌入式设备漏洞检测系统ASI@VARAS.为了验证本文方法的有效性,本文分析了基于无害处理识别的嵌入式设备漏洞检测的精度和效率.

本文采用与ITS相同的实验测试集,包括5个主流的嵌入式设备厂商的10款设备固件(如表3所示).本文实验均在英特尔i7处理器上运行,内存为32GB的64位的Ubuntu18.04系统.

表3 无害处理识别测试集

3.2 漏洞检测结果分析

本节利用表3所示测试集进行了漏洞检测实验.实验主要对比在加入基于无害处理识别的嵌入式设备漏洞检测技术前后的漏洞检测结果.由于该测试集选取的是ITS全部测试集,且本文方法也是在ITS基础上进行实现的,因此加入ASI前的漏洞检测数据可以直接采信ITS的结果.

采用ASI前后的漏洞检测结果如表4所示.其中,前3列为选取的测试集信息,第5,6列为采信的ITS的实验结果,第7,8列为加入无害处理识别后的漏洞检测结果.ASI生成检测报告中包含可能引入用户输入的污点源变量所在位置,以及可能出现缓冲区溢出、命令注入的漏洞位置.本文对ASI生成的检测报告逐一进行人工审计,采用与ITS相同的误报判定方式,将从污点源到漏洞位置(汇聚点)之间不存在可达路径的漏洞报告标识为误报.

表4 漏洞检测结果

通过表4中的统计数据可以看出,加入基于无害处理识别的嵌入式设备漏洞检测技术前,针对10款设备固件,系统累计报告了201个漏洞,其中59个经人工分析确认为误报,误报率为29.35%((总结果-正确结果)/总结果).加入无害处理识别技术后,ASI累计报告了177个漏洞,其中35个经人工分析确认为误报,误报率为19.77%.经比较,ASI的误报率相对于ITS降低了9.58%(从29.35%降低到19.77%).

从实验数据可以看出,Netgear R8300,Tenda W20E等大部分设备固件在加入基于无害处理识别的嵌入式设备漏洞检测技术后,报告的漏洞均有一定数量的减少,漏洞检测结果的准确性有所提高.但是对于D-Link DIR859和Tenda AC9固件,漏洞检测结果和之前没有变化.通过人工分析,由于该固件之前的误报主要是由于将输入进行类型转换后,将字符串类型转为int类型,导致漏洞无法触发,所以加入无害处理识别后并没有影响系统对该固件漏洞检测的准确率.

3.3 漏洞检测性能分析

表5统计了加入ASI技术之后,本文系统在表3所示固件测试集上的时间开销.原有工作ITS在进行性能分析时,对嵌入式设备固件中的所有二进制文件进行了实验分析.与ITS不同的是,本文通过人工提取了可能会导致漏洞的二进制程序进行分析.可以看出,对于10款嵌入式设备固件,在加入ASI技术之前,本文系统的平均时间开销为36.05min,加入ASI技术之后,系统的平均时间开销为38.73min.即在加入ASI技术之后,本文系统的平均分析时间增加了2.68min,占原有系统总时间的7.43%.

表5 漏洞检测性能分析 min

4 结 语

本文通过分析嵌入式设备服务程序中基于路径条件约束的无害处理以及基于函数的无害处理操作的代码特征,实现了基于无害处理识别的嵌入式设备漏洞检测方法ASI,通过对主流厂商的10款设备固件的实验结果显示,相较于已有嵌入式设备漏洞检测方法ITS,ASI的误报率降低9.58%(从29.35%降低到19.77%),而检测时间开销仅增加7.43%.同时,获取的变量关联关系信息可以支持为嵌入式设备厂商提供漏洞修补[15]解决方案.

猜你喜欢

污点漏洞嵌入式
漏洞
基于代码重写的动态污点分析
搭建基于Qt的嵌入式开发平台
使用Lightroom污点去除工具清理照片中的瑕疵
嵌入式软PLC在电镀生产流程控制系统中的应用
三明:“两票制”堵住加价漏洞
漏洞在哪儿
高铁急救应补齐三漏洞
我国“污点证人”刑事责任豁免制度的构建
Altera加入嵌入式视觉联盟