Page 117 - 《软件学报》2020年第11期
P. 117
陈千 等:函数级数据依赖图及其在静态脆弱性分析中的应用 3433
Table 7 Results of vulnerability analysis on binary samples
表 7 二进制样本脆弱性分析结果
名称 大小(k) 设备型号 分析函数个数 耗费时间(min) 发现脆弱点数量 发现漏洞数量
wlancmd 38 HG532e 86 0.52 9 4
stupid-ftpd 53 DIR882_A1 56 0.46 6 0
upnp 90 HG532e 298 3.32 1 1
jjhttpd 118 DIR820LB1 281 3.25 1 0
lighttpd 145 HIVDC-F100V 327 2.42 0 0
cgibin 150 DIR-890L 445 2.77 5 2
cgibin 155 DIR-645 318 2.30 7 4
miniupnpd 165 DIR-882_A1 229 2.03 2 0
upnpd 213 DGN2200 268 4.47 7 0
setup.cgi 324 DGN1000 732 11.54 19 5
httpd 993 DGN2200 796 30.72 14 2
ipc_server* 2 048 B18EN 383 3.62 11 5
mwareserver* 4 812 IPC_6201 430 5.67 10 1
注:针对二进制样本 ipc_server 和 mwareserver,仅选取了部分函数进行分析.
由表 7 可知,采用 FFVA 系统对二进制程序进行静态脆弱性分析时,其结果同样存在误报.从代码分析的角
度,存在误报的主要原因是由于函数回调机制和间接调用的存在,导致进行数据依赖分析时会出现“断链”现象,
即从潜在脆弱点无法直接回溯到外部输入点如 recv/recvfrom 等,进而无法判断参数的来源,造成对潜在脆弱点
安全评估的不准确.此外,函数内由于不同的执行路径可能会对应不同返回值,对多个返回值的处理不当,也会
对数据依赖分析造成影响.
在表 7 中,分析二进制程序所耗费的时间包括程序分析和结果可视化两部分.以 NETGEAR httpd 为例,由于
该程序内部函数较多且流程比较复杂,整体耗费时间约为 30min,但真正进行程序分析所耗费的时间大约为
7min,占比为 23.3%.二进制程序分析所耗时间占比如图 10 所示,其中大部分分析样例的整体耗费时间低于
5min,而对于耗时超过 5min 的分析样例,真正进行程序分析所耗费的时间在整体中的占比均低于 35%.
Fig.10 Proportion of time consumed in analyzing vulnerability of binary samples
图 10 二进制样本脆弱性分析所耗时间占比
目前,在实验部分没有提供基于两种数据依赖图进行漏洞挖掘的对比结果,原因如下:(1) 针对部分二进制
程序样本,构建 DDG 的时间与空间复杂度过高(单个程序样本耗费的分析时间超过 13 个小时,内存消耗高达
84G),而构建 FDDG 耗费的时间在数分钟内,内存消耗在 5G 左右;(2) 基于 DDG 对与脆弱点相关的变量进行回
溯的效率很低.以图 5 为例,在对图 5(a)中,strcpy(⋅)函数的参数 buf 和 argv[1]进行溯源时,在 DDG(图 5(c))中的查
找路径包括“11→10”和“9→8→7→6→2”,而在 FDDG(图 5(d))中则不用进行回溯,因为函数参数中已经包含了所
需的信息.在对真实程序样例进行分析时,由于 DDG 的规模约为 FDDG 的 1 000 倍,两者之间的差距会更加明显.