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