基于硬件行为的嵌入式系统固件漏洞检测方法
2017-06-02侯金炳李彤常成武卉敏
侯金炳 李彤 常成 武卉敏
摘要:针对嵌入式系统固件权限高、资源有限、硬件相关性强的特点,提出了基于硬件行为的嵌入式系统固件漏洞检测方法。硬件行为是固件执行最直接的表现,本方法结合嵌入式系统固件和系统自身独特的硬件资源进行分析,以系统的攻击点和数据格式为基础有针对性的构造测试用例,设计嵌入式系统行为规则,通过判定嵌入式系统行为,检测系统固件漏洞。通过利用该方法,主要对路由器进行实验,实验结果证明该方法有效可行。
关键词:嵌入式系统;固件漏洞;硬件行为;行为异常
中图分类号:TP368.1 文献标识码:A 文章编号:1007-9416(2017)04-0111-02
1 引言
固件指存放在ROM/FLASH存储器中的只读代码和数据[1],嵌入式固件是固件在嵌入式设备中的应用。嵌入式固件处于特殊的位置,连接了上层应用与底层硬件,所以固件具有极高的权限,因此固件漏洞也具有极大的危害。由于嵌入式设备本身硬件的限制和嵌入式设备的大规模推广,并且嵌入式系统固件漏洞修复周期长,嵌入式系统固件的安全形势更加严峻。嵌入式设备漏洞已呈逐年上升的趋势,其漏洞影响的领域巨大,因此及早地发现嵌入式系统漏洞并进行补救,已经是刻不容缓之态。
嵌入式设备往往工作在不同的地方,其运行环境差异大,并且其固件代码大部分是非开源的,获取难度大,目前针对嵌入式系统固件漏洞的检测仍然是以传统的检测方法为主,比如模糊测试、静态分析、符号执行等。Costin A等人[2]基于强大的云计算对32000个固件和1700000个文件进行分析,实现了大范围的静态固件漏洞在线检测。忽朝俭等人[3]针对嵌入式无文件系统固件提出了一种基于库函数识别的后门检测技术。Drew Davidson等[4]基于选择符号执行建立了名为FIE的针对小型嵌入式系统固件的漏洞检测系统。戴忠华等[5]基于污点分析提出了了针对嵌入式系统固件漏洞的模糊测试方法,提出危险权重的概念,设计与危险权重相联系的测试用例集合。
上述方法主要对嵌入式系统固件进行静态分析,或是结合固件进行仿真,对漏洞具有较好的检测效果。但是嵌入式系统固件与硬件紧密结合,静态分析和仿真不能完全考虑到嵌入式系统实际硬件情况。由于嵌入式系统硬件与固件紧密结合,本文提出基于系统硬件行为分析的固件漏洞检测方法。
2 嵌入式系统硬件行为
行为分析可以基于系统行为对系统漏洞进行有效检测,已经在安全领域被广泛应用。嵌入式系统的行为分析要考虑系统平台、硬件资源的特殊性,因此不同于一般的行为分析。嵌入式系统有丰富的硬件资源,固件通过对这些硬件资源进行访问实现设备的各种功能,硬件行为是固件代码执行最直接的体现。
固件代码执行过程中也会执行到漏洞,并通过硬件的一些异常行为表现出来。所谓的硬件异常行为是不同于用户期望的系统功能或者超出用户期望的系统功能,因此需要对异常行为进行判定,判定依据主要是由用户期望所设计的行为规则。分析固件和数据协议格式,构造嵌入式系统的输入,对嵌入式系统的硬件模块进行监测,对比行为规则,可判定异常行为。因为固件和硬件行为的关联性,可以通过判定硬件行为的异常来检测固件漏洞。
3 基于硬件行为的检测方法
攻击者对固件漏洞的攻击要通过攻击路径,该路径一般为设备与外界交互的输入输出接口,通过对输入输出接口的数据协议进行分析,可以获得构造攻击输入的协议格式。固件漏洞最终操作的是硬件资源,所以对易受攻击的敏感硬件模块进行分析,可以有针对性的分析固件,如果笼统地对系统行为进行分析,会增加工作量,并且会降低漏洞检测的准确性和命中率。
本文固件漏洞检测系统分为嵌入式系统易攻击点分析、行为规范设计、嵌入式系统数据协议的测试用例生成、行为分析判定四个模块。
(1) 嵌入式系统易攻击点分析。可以从硬件中提取固件,或者从网上下载固件,主要对固件结构、函数调用进行分析。对系统硬件模块的分析,主要分析系统的敏感硬件资源。将硬件资源分析与固件分析相结合,根据固件模块对硬件行为的控制关系,得到嵌入式系统的易攻击点,减小检测范围。以车载系统为例,车载系统所控制整辆车的硬件资源,其中敏感的硬件模块如刹车、油门、方向盘、车门以及信息存储模块等,这些模块关系到车内人员生命、车辆数据等的安全,是被攻击的主要部位。
(2)行为规范设计。通过收集系统功能说明,可以得到系统的正常功能,以这些正常功能为参考,可以对比得出系统的隐藏功能或者与描述不相符的功能,即在说明手册中没有出现的功能或者与手册所描述不相符的功能,这些功能有极大可能是由于系统漏洞、后门所产生。在系统正常功能之上,用户可以对嵌入式系统具体的一些敏感资源进行限制访问,在没有得到用户权限的情况下对这些资源进行访问,即可被判定为存在漏洞。
(3)嵌入式系统数据协议的测试用例生成。只有对数据协议有一定了解,才能生成有效的测试用例,对数据协议的分析是生成测试用例的基本条件。如果只是针对系统大范围的、没有针对性的生成测试用例,会增加测试用例生成的负担,增加目标设备的检测时间,降低检测的命中率和检测效率。
在通过分析系统固件、硬件的出系统攻击点的基础上,对数据协议主要部分进行分析,可以减少协议分析的工作量,并且针对特定的目标地址、源地址生成测試用例,增加了测试用例的针对性。
(4)行为分析判定。将生成的测试用例输入系统,对嵌入式系统的数据进行采集,对敏感硬件模块实时监测。比如扫描路由器是否开启有隐藏端口,监测车载系统是否在非正常情况下访问刹车模块,分析嵌入式系统是否传输敏感数据等。将监测到的系统行为与行为规则进行对比,判定该行为是否超出行为规则,进而判定系统固件是否存在漏洞,进而后期可以根据对应的数据进行漏洞定位。
4 实验验证
路由器是最常见的嵌入式系统,可以从官网直接下载得到固件,且路由器的硬件资源相对简单,易于分析,本文以D-Link的DIR-605L路由器为例对上述方法进行实验验证。
路由器是主要用于网络间的数据传输,本身敏感硬件模块较少,易攻击点主要存在网络模块中,所以重点分析路由器的Web服务器程序boa。在Ubuntu12.0系统下,以Binwalk工具提取dir605L_FW_113.bin固件,找到boa所在目录。提取boa后,用IDA Pro工具对boa进行逆向分析,根据路由器功能和固件特征设计行为规范。
由上述的分析得出路由器的Web服务器使用Http协议,由于是使用Http协议,所以对协议分析难度大大降低,根据Http协议格式构造路由器的测试输入点如下所示:
[fuzzable][fuzzabla] HTTP/1.1 (CRLF)
User-Agent:[fuzzable] (CRLF)
Host:[fuzzable] (CRLF)
Connection:[fuzzable] (CRLF)
以此协议格式生成数据对路由器进行测试,并用wireshark工具抓取数据包,实时对路由器状态进行检测。经过一段时间会发现路由器Web服务器崩溃,此行为明显超出用户的期望,可以判定该固件存在漏洞,数据抓包的记录可以用于后期的漏洞分析与利用。
以此方法继续对另外几款路由器以及一款开源灯控系统进行检测,检测路由器也存在Web服务器崩溃现象,检测灯控系统的数据传输模块、灯控制模块出现异常,因此可以判定对应的固件boa、USart、Lightctr部分存在漏洞。实验证明本方法能够有针对性的检测出嵌入式系统固件漏洞,并可以结合反汇编对漏洞进行分析。
5 结语
嵌入式系统成本和资源的限制,使嵌入式系统在设计之时难免存在各种漏洞,并且随着嵌入式系统应用的推广,嵌入式系统的安全问题影响颇广。本文以行为分析为基础,结合嵌入式系统自身硬件特点,提出了基于行为分析的嵌入式系统固件漏洞检测模型。但是由于嵌入式系统平台不同、工作环境不同、源码和通信协议不公开,限制了该模型的使用范围。针对开源的嵌入式系统固件,会有较好的效果,对于大部分商业嵌入式系统,需要在固件逆向和分析通信协议的工作上花费更多的精力。
参考文献
[1]张翠艳.固件代码安全缺陷分析技术研究[D].郑州:解放军信息工程大学,2011.
[2]Costin A, Zaddach J, Francillon A. A large-scale analysis of the security of embedded firmwares [C]. USENIX Security Symposium. San Diego,USA:USENIX Association.2014:95-110.
[3]忽朝儉,薛一波.无文件系统嵌入式后门检测[J].通信学报,2013,34(8):140-154.
[4]Drew Davidson, Benjamin Moench. FIE on Firmware: Finding Vulnerabilities in Embedded Systems using Symbolic Execution[C]. USENIX Security Symposium. San Diego,USA:USENIX Association.2013:463-478.
[5]戴忠华,赵波,王婷.基于污点分析的嵌入式设备固件模糊测试方法[J].四川大学学报,2016,(48):125-131.