Page 116 - 《软件学报》2020年第11期
P. 116

3432                                Journal of Software  软件学报 Vol.31, No.11, November 2020

                 内对变量进行数据依赖更新的频度.本文对比了两种数据依赖图中节点与边的规模,如表 6 所示,节点与边的数
                 量分别相差约 3 个数量级.
                             Table 5    Comparison of time consumed in constructing the data dependence graph
                                               表 5   数据依赖图构建时间对比
                                                                    耗费时间(min)
                            名称     大小(k)    设备型号      分析函数个数                       时间性能提升(倍)
                                                                 CFG   DDG   FDDG
                          wlancmd   38      HG532e        7      0.07  0.03  0.002       15
                          stupid-ftpd  53  DIR-882_A1     24     0.16  6.99  0.005      1 500
                            upnp    90      HG532e        56     0.43  113.54  0.038    3 000
                           jjhttpd  118    DIR820LB1      45     0.47  120.14  0.027    4 400
                           lighttpd  145  HIVDC-F100V    136     0.98  468.02  0.091    5 100
                           cgibin   150     DIR-890L     356     1.24  600.72  0.115    5 600
                           cgibin   155     DIR-645       88     0.90  53.21  0.038     1 400
                          miniupnpd  165   DIR-882_A1    147     1.02  728.91  0.080    9 100
                           upnpd    213     DGN2200      114     0.65  346.93  0.108    3 200
                          setup.cgi  324    DGN1000       39     0.92  17.17  0.016     1 050
                            httpd   994     DGN2200      168     1.59  831.41  0.138    6 000
                         注:(1) DDG 对应 angr 框架中的方法,FDDG 对应本文提出的方法;(2)  时间性能提升结果为取整后的结果.
                                       Table 6    Comparison of the data dependence graph scale
                                                 表 6   数据依赖图规模对比
                                                                       节点数            边数
                             名称     大小(k)    设备型号      分析函数个数
                                                                    DDG    FDDG    DDG    FDDG
                           stupid-ftpd   53   DIR-882_A1   24      102 037   57   120 825   12
                             upnp     90     HG532e        56      494 854  372   585 385  266
                            jjhttpd  118    DIR820LB1      45      544 243  198   612 616  157
                            lighttpd   145   HIVDC-F100V   136     2 318 991  428   2 646 642   491
                            cgibin   150     DIR-890L      356     2 845 062  1 223  3 132 910   742
                            cgibin   155     DIR-645       88      634 415  502   766 330  205
                           miniupnpd   165   DIR-882_A1    147     3 184 594  697   3 490 395   505
                            upnpd    213     DGN2200       114     1 850 608  1 291  2 047 508   1 242
                            setup.cgi  324   DGN1000       39      157 698  458   185 527  177
                             httpd   994     DGN2200       168     2 517 499  801   2 795 711   566
                           注:DDG 对应 angr 框架中的方法,FDDG 对应本文提出的方法.
                    总的来说,本文提出的 FDDG 构建方法极大地降低了分析所需的时间和空间开销,实现在相同计算资源条
                 件下分析更大规模的程序,同时适用于对批量固件的快速分析.
                 5.2   固件脆弱性分析系统有效性评估
                    在前面分析中强调函数级数据依赖图保留了关键变量等有效信息,但能否在固件静态脆弱性分析中发挥
                 效用,需要通过实验进行评估.
                    本文首先利用 FFVA 系统对表 4 中的二进制程序样本进行分析,然后借助逆向分析工具如 IDA Pro                          [27] ,对系
                 统的分析结果进行人工审查,利用真实设备或 QEMU 模拟器                  [28,29] 对脆弱点进行验证.实验结果如表 7 所示,共发
                 现漏洞 24 个,14 个属于未知漏洞.部分未知漏洞已经提交给厂商并得到确认,剩余的未知漏洞则利用真实设备
                 或通过固件仿真的方式进行了验证.
                    在表 7 中,以 Honeywell 摄像头固件中的 lighttpd 程序为例,其主要负责处理与 HTTP 协议相关的请求,在其
                 中发现的脆弱点数量为 0.借助 IDA Pro 工具对该程序进行逆向分析,发现程序中几乎没有使用 strcpy(⋅),
                 sprintf(⋅)等不安全函数,大部分的拷贝操作使用 memcpy(⋅)函数进行完成,并且对拷贝长度进行校验.通过对
                 stupid-ftpd 和 miniupnpd 程序进行逆向分析,发现其很可能是直接来源于开源软件,对脆弱点进行人工验证后没
                 有发现漏洞.
   111   112   113   114   115   116   117   118   119   120   121