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 倍,两者之间的差距会更加明显.
   112   113   114   115   116   117   118   119   120   121   122