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

陈千  等:函数级数据依赖图及其在静态脆弱性分析中的应用                                                    3429


                 的情形,即所谓的漏报和误报.由表 1 可知,脆弱性分析的结果与包含的有效信息量和漏洞分析函数 M 这两个因
                 素有关.在脆弱性分析函数 M 相同的前提下,基于数据依赖图进行脆弱性分析的结果只取决于图中所蕴含的有
                 效信息量.

                             Table 1    Relationship between the results of vulnerability analysis and information
                                            表 1   脆弱性分析结果与信息的对应关系

                                      M(θ)                有效信息 A               无效信息 B
                                   检测出漏洞                    M(A)               M(Θ)−M(B)
                                   检测不出漏洞                 M(Θ)−M(A)              M(B)

                    在进行脆弱性分析时,以“污点类”漏洞为例,当对脆弱点处的变量进行回溯时,需要分析与其存在依赖关系
                 的相关变量,获取相关变量的取值、大小、约束以及是否来自非可信的数据源等信息,这些信息构成了有效信
                 息.由函数级数据依赖图的定义和构建方法可知,函数级数据依赖图是对传统数据依赖图进行进一步精简与抽
                 象.两者的主要区别在于:DDG 中的节点表示指令,而 FDDG 中的节点表示函数.在进行依赖分析时,无论是指令
                 还是函数,主要关注其中包含的变量及其依赖关系.根据 FDDG 节点的定义,其节点既可以表示系统函数如
                 strcpy(⋅),也可以表示用户自定义函数(即非系统函数)如 custom_copy(⋅).在对程序进行分析时,针对系统函数,由
                 于其为一个最小单元,FDDG 中的处理方式与 DDG 中的一致,故不存在信息损失.而针对用户自定义函数,在构
                 建 FDDG 时可能会将其当作一个整体而忽略函数内部的信息.同样,由 FDDG 节点的定义可知,当某个函数能够
                 用节点表示时,说明该函数参数或返回值之间的依赖关系是明确的.因而没有必要对函数内部进行分析以获取
                 这种依赖关系,损失的函数内部信息对参数依赖关系分析的影响很小.总的来说,FDDG 中包含了变量的信息及
                 “精简”的依赖关系,通过这种“精简”的依赖关系能够获取到相关变量的信息,故 FDDG 包含的有效信息量与
                 DDG 相近.
                 4.2   固件脆弱性静态分析系统

                    为验证 FDDG 在程序脆弱性静态分析中的效能,本文在开源框架 angr                    [22,23] 的基础上,结合污点分析、符号
                 执行等技术,实现了一个固件脆弱性静态分析原型系统 FFVA.
                    固件通常是对嵌入式设备软件系统的一种称谓,其由固件头、启动引导程序、操作系统内核、根文件系统
                 以及附加数据等组成.与传统软件类似,固件中也存在安全缺陷或漏洞.由于很难获取固件源码,因此,嵌入式设
                 备脆弱性分析的重点研究对象是固件文件系统中的二进制应用程序.
                    在固件二进制程序中,常见的程序漏洞包括缓冲区溢出、格式化字符串漏洞、命令注入、认证缺失、硬编
                 码/弱密钥等.通常,缓冲区溢出、格式化字符串漏洞和命令注入这 3 类漏洞的形成原因主要是与不安全函数调
                 用有关,可以尝试基于 FDDG 对这 3 类漏洞进行检测.以 strcpy 函数为例,如果源缓冲区的大小超过目的缓冲区,
                 且源缓冲区的内容为外部可控,将导致缓冲区溢出漏洞.这里,源缓冲区的大小及内容来源是评判是否存在漏洞
                 的关键,适用于 FDDG 分析.
                    表 2 所示为 OWASP 嵌入式应用安全项目          [24] 提供的 Top 10 清单.

                           Table 2    Top 10 best practices for embedded application security provided by OWASP
                                         表 2   OWASP 嵌入式应用安全 Top 10 实践清单
                                   序号                                名称
                                    1                      Buffer and stack overflow protection
                                    2                            Injection  prevention
                                    3                   Firmware updates and cryptographic signatures
                                    4                        Securing  sensitive information
                                    5                           Identity  management
                                    6                    Embedded framework and C-based hardening
                                    7                       Usage of debug code and interfaces
                                    8                          Transport layer security
                                    9                    Data collection usage and storage—Privacy
                                    10                      Third party code and components
   108   109   110   111   112   113   114   115   116   117   118