跨平台物联网漏洞挖掘算法评估框架与实现结题报告 附录 项目工作原始记录 文献综述 静态分析技术

3、静态分析技术

通用静态程序分析技术的分析对象是源代码或二进制代码。然而, 由于物联网设备程序是商业程序, 很少有厂商公开源代码和文档, 通常只能获取固件以用于静态分析。固件是物联网设备中的软件系统, 实现对设备特定硬件底层的控制。固件通常包含操作系统、文件系统、用户程序, 或者本身就是一个可执行程序。而本项目中,我们所采用的是有奇安信所提供的一百个固件数据集。

因此, 静态程序分析技术从物联网设备固件开始, 通过逆向设备固件, 建立漏洞模型, 并利用程序分析技术完成漏洞挖掘。在物联网设备数量和种类呈爆炸式增长的趋势下, 静态漏洞挖掘方法对设备固件代码采用统一的中间表达, 能够有效规避硬件复杂性、架构多样性带来的挑战。

根据当前的静态分析工作, 我们总结分析流程如图 1 所示。

整个分析流程可以分为两个步骤: 目标程序提取与信息恢复和基于程序分析的漏洞发现。 步骤一是从固件中提取出待分析的目标程序, 并恢复出目标程序的语法、结构信息。步骤二是建立漏洞分析规则, 基于已获得的程序信息, 通过程序分析技术, 实现漏洞的发现。此外, 符号执行技术能够有效辅助静态分析。

3.1 目标程序提取与信息恢复技术

从固件获取开始, 根据固件的不同类型, 需要选择性的完成程序集提取、目标程序提取、程序表示、执行信息恢复等分析步骤。

固件获取: 该步骤通过多种方式获得固件以用于后续分析。获取方式主要分为两大类: 直接从物联网设备中提取, 或是从厂商的官网进行下载。对于第一大类, Vasile 等[2]总结了两种方式。第一种是通过UART 或 JTAG 硬件调试接口登入系统并读取内存, 从而恢复出固件内容; 第二种是直接利用读写器完成 flash 芯片内固件的直接提取。

固件格式分析: 该步骤分析固件的组织形式和数据内容。固件按照组织形式通常分为两类: 包含操作系统的固件和不包含操作系统的固件。在包含操作系统的固件中, 大部分设备功能由用户程序完成, 系统调用操作、程序加载过程、库函数调用均有规范的定义。其中, 操作系统可以是通用操作系统(如定制化的 Linux), 也可以是特定嵌入式操作系统(如实时操作系统 VxWorks)。在不包含特定操作系统的固件中, 固件直接工作在设备上, 包含了简单的任务调度等类操作系统功能。无论是哪一类型的固件, 首先需要判断固件是否被压缩。若固件压缩, 需先解压, 然后再进一步分析。

固件程序提取技术: 该步骤是从包含操作系统的固件中提取所有的文件和程序。对包含操作系统的固件, 由于操作系统和文件系统通常都在头部含有特征码或特征字符串, 因此可以通过基于签名匹配的方式识别出操作系统镜像和文件系统, 并进一步对文件系统进行解压, 提取出所有文件和程序。目前 Binwalk 工具[3]可以很好地支持固件格式识别, 操作系统、文件系统的识别与分离, 文件系统的解析和提取, 并且允许特定格式分析插件的加载与使用。Firmware Mod Kit 工具[4]可以支持 Sasquash 和Jefferson 等嵌入式文件系统的解析提取。此外, Binary Analysis Toolkit[5]也能很好地支持通用操作系统固件的解析。当前工具可以支持大部分包含操作系统固件的程序提取, 但对于自定义的文件系统, 以及厂商在标准实现上做了修改的文件系统, 当前工具将无能为力。文献[6]对因 SquashFS 头部特征修改导致Firmware-Mod-Kit 不可用的问题做了深入分析, 并实现对修改后 SquashFS 文件系统的解析。

目标程序分析提取: 对含有操作系统的固件, 该步骤对提取出的所有程序和文件集合, 进一步提取出待分析的目标程序。当前, 目标程序的提取主要是通过搜寻特定文件名实现。若目标程序是 Web 服务程序, 只需搜索文件名包含 http 的文件, 即可找到目标程序。这种方法通常直接且有效, 但对于大规模固件的目标程序提取, 具有较低的召回率。Thomas等[7]提出基于半监督学习的固件中二进制程序功能的分类器, 能够对 cron、dhcp、ftp、ntp-client、nvramget-set、ping、tcp、telnet、upnp、web-server 十类服务程序在零误报率的条件下实现96.45%的识别精确率。

程序表示技术: 该步骤是将二进制代码以中间语言或汇编等形式表示。无论是对于无操作系统的固件或是待分析的目标服务程序, 均需将二进制转换成汇编代码。有时为了屏蔽汇编指令格式的差异性, 需进一步转化为统一的中间语言。此外, 还需提取出程序的控制流、函数调用、字串常量信息等信息。目前IDA pro[8]可以支持 X86、ARM、MIPS、PowerPC等多种指令格式二进制汇编代码的转换, 涵盖大量物联网设备的指令集。同时可以恢复出物联网设备服务程序和无操作系统固件的控制流, 提取函数调用关系、字符串引用、地址访问等信息。Shoshitaishvili等提出的Angr工具[9], 可以将目标程序转化为统一的 VEX 中间语言用于进一步分析。

执行信息恢复技术: 该步骤将恢复程序的加载地址、入口地址等执行信息。对于包含操作系统的固件, 其目标服务程序的文件格式(如广泛采用Linux 下的 ELF 可执行文件格式)通常是标准、公开的, 逆向技术已经相当成熟。而对于无操作系统的固件程序, 由于缺少固件执行的描述信息, 导致程序信息恢复不完整, 无法进一步实现精准的程序分析。缺失的信息包括: (1)固件运行时的加载地址。这将导致很多跳转无法被解析; 即使已恢复出指令信息, 控制流信息仍不完整。(2)程序入口地址。这将导致无法深入分析。Shoshitaishvili等[10]针对该问题提出了基本的解决方案。在加载地址分析部分, 由于间接跳转表具有数值连续特征, 通过识别间接跳转表, 再根据间接跳转指令寻址与表之间的关系, 推断出较为准确的程序加载地址。对于程序入口地址, 首先根据特定指令架构的函数入口、返回指令特征, 识别出所有的函数, 并构造函数调用关系。对于没有被调用的函数(可能是中断处理函数), 将其入口地址识别为整个程序可能的入口地址。

目前, 目标程序提取与信息恢复技术能够有效解决包含操作系统的物联网设备固件的分析。从固件解压, 文件系统解析, 可执行程序解析到可执行程序的逆向, 技术基本上已经成熟。而对于无操作系统设备固件分析, 整个固件就是特殊的可执行程序, 对该类固件的分析仍处于起步阶段。

3.2 基于程序分析的漏洞发现技术

在目标程序提取与信息恢复之后, 通过建立漏洞分析规则, 并结合静态程序分析技术, 实现漏洞的挖掘。除了通用漏洞类型(如污点类漏洞), 物联网设备漏洞挖掘更关注特定漏洞类型和模块, 如硬编码、认证绕过等后门漏洞。该漏洞类型属于物联网设备特定漏洞, 通常为了方便设备调试人员进入系统或进行特权操作。其在物联网设备上普遍存在, 而在通用程序上较为少见。

针对硬编码漏洞类型, Thomas[11]等提出基于静态数据分析的漏洞挖掘方法。该工作首先识别出程序中的静态数据比对函数, 通过提取函数特征并对静态数据比对函数进行建模来识别。接着通过程序控制流分析技术来判定静态数据比对的重要性(根据它影响代码块的独特性), 之后进一步评估出函数的重要性。通过进一步对重要性函数的静态分析, 发现了硬编码的认证后门漏洞, 并恢复出 FTP、SOAP 协议的重要指令集。该工作具有很强的实用性, 然而在后门漏洞挖掘与基于文本的协议指令恢复的这两个应用中, 均不能保证准确性和召回率。因此, 该方案在大规模测试中的适用性无法得到保证。为了进一步识别物联网设备固件程序中的后门, Thomas[11]利用半监督学习的方法, 构造了识别固件中二进制功能的分类器。并通过自定义二进制函数功能描述语言, 识别二进制中的非预期功能(后门)。实验表明有96.45%的二进制功能的识别准确率, 并在Tenda设备中挖掘出后门漏洞。

针对认证绕过漏洞类型, Shoshitaishvili等[10]提出基于程序分析的物联网设备认证绕过漏洞的挖掘方法。首先, 该工作人为定义程序特权点(包括未认证的情况下不能输出的数据、未认证情况下不可执行的系统操作、对内存绝对地址的访问、人工分析出的相关特权函数)。在此基础上, 构建固件代码的控制流、数据依赖、控制依赖图, 然后基于切片技术生成到特权点的路径, 并采用符号执行技术求解路径条件, 从而发现物联网设备认证绕过漏洞。该工作采用切片技术对程序路径进行简化, 使符号执行分析有较高的分析性能。然而, 该工作无法解决程序被混淆之后的分析难题。

针对通用污点类漏洞类型, Cheng等[12]提出物联网设备固件污点类漏洞的检测方法, 主要通过函数分析提取变量描述、定义对、数据类型等信息, 并解决函数数据流分析、指针别名分析、数据结构恢复等难题。该工作发现了8个已知漏洞和13个 0day漏洞, 且在时间开销上优于Angr。

针对协议解析模块, Cojocar等[13]首次提出基于协议解析模块识别的物联网设备漏洞挖掘方法。该工作通过协议解析模块离散特征的提取以及分类器的构造, 实现协议解析模块的精确识别, 并聚焦于该类模块的漏洞挖掘, 发现 GPS 接收器、电表、硬盘驱动、程序逻辑控制器(PLC)多类型物联网设备的漏洞。在此基础上, Zheng 等[14]提出基于多维度特征的应用层协议解析模块的识别技术, 并与基于二进制属性图的可疑脆弱点推断技术相结合, 实现污点类漏洞的快速发现。

目前基于程序分析的漏洞发现技术能够有效的针对特定漏洞类型(硬编码、认证绕过、污点类)和模块(协议解析模块)。然而这些研究工作大多需要人工辅助, 自动化程度不足。此外, 研究工作的分析对象仍然是用户程序。在针对物联网设备特定实时操作系统方面, 仍然缺少相应的漏洞挖掘工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值