Part 01 固件获取
对固件进行研究的整个流程图大致如图1所示,包括固件提取、固件分析、固件解析和程序提取、固件逆向、固件仿真/硬件调试、漏洞挖掘等几部分。
图1 固件安全研究流程
进行固件分析的前提条件就是固件的获取,常用的固件提取方式有:
1、从相关品牌的厂商网站进行下载;
2、在设备进行固件更新时进行截获;
3、直接使用串口调试读取芯片的方式进行固件读取。
固件中包含了很多研究人员感兴趣的内容,研究人员使用各种方式来对固件进行研究,比如查看厂家对固件的保护,是否封闭了UART及JTAG等引脚,是否从硬件物理上进行了固件内容防护;固件是否加密;固件文件系统是怎么组织的,是否存在直接提取敏感信息的可能性,固件中的各个组件使用的某些通用库是否存在漏洞;固件所支持的某些协议库,例如物联网的一些协议,是否存在漏洞;固件所支持的web服务,密码是否可窃取,是否存在漏洞,例如远程执行,信息泄露等。研究人员对这部分信息进行研究,获取基本的固件信息,对之后的固件安全分析工作来说很有必要,多数情况下,通过对固件分析的前期操作,能获得许多重要的息甚至是发现漏洞。
Part 02 固件脆弱性风险分析
2.1 蓝牙mesh固件自动化分析风险评估
因为不同品牌、不同架构的厂商,为了设备安全,会对自己出厂的固件进行不同的设置,那么在分析时获取到的固件信息也不同,但总体差别不是很大。
在对固件初步分析时可以使用自动化平台进行固件分析,自动化的固件平台能够很好的对固件组件、固件架构、文件系统等进行深层次分析,包含此系列产品的历史漏洞,漏洞时间、漏洞类型、补丁信息、文件目录、组件信息等,查看固件存在哪些组件(通用组件包括u-boot、busybox、ntp、lighttpd、openssl、json-c、 libgcrypt、hostapd等),分析开源组件是否存在已知漏洞,进行组件层面的脆弱性分析。通过使用固件自动化安全分析平台,得到包含以下信息的固件分析报告:
① 设备web代码漏洞。基于通用web技术如PHP、Javascript等开发web应用导致了潜在的web漏洞风险。
② 软件供应链漏洞。开源基础软件包不及时更新,具有相似软件供应链,不同厂商的固件存在高度重合的产品厂商、型号。
③ 证书与秘钥泄露
④ 不安全配置
⑤ Nday漏洞
开发人员在固件开发过程中会引用第三方软件和库提供功能开发的基础,比如busybox组件为固件系统中提供Linux命令操作基础;lighttpd组件为一款轻量级WebServer组件,为负责提供固件中的Web服务;openssl组件为固件提供安全及数据完整的安全协议。但它们也被爆出过影响深远的历史漏洞如busybox中的权限许可和访问控制漏洞,lighttpd中目录遍历漏洞,openssl中的心脏滴血漏洞等。
对固件进行分析,能够获取整个固件的风险感知。图二是使用固件自动化安全分析平台对某品牌路由器固件进行分析时,得到的固件分析结果。在获取这部分固件信息后,结合手工分析时关注的重点信息可以建立此固件的风险分析信息库。
图2 某路由器固件自动化安全分析结果-图片来源于某品牌固件分析平台
图3 某品牌路由器固件分析风险信息库-图片来源于某品牌固件分析平台
2.2 建立固件脆弱性风险分析方式
本文从常见的家用路由器品牌入手,总结了物联网固件脆弱性分析方式,主要从产品基本配置信息和基础组件脆弱性分析两种方式入手。
(1)产品基本配置信息主要包括表1所包括的部分。
表1 产品基本配置信息
(2)基础组件脆弱性分析主要从硬件风险分析和软件风险分析入手。
硬件风险分析包括:
① 探测路由器的telnet,ssh,ftp等服务的相应端口是否开放;
② 利用UART调试口访问设备,使用OpenWrt调试运行程序;
③ 尝试破解shadow文件密码,查看运行进程和服务;
④ 开放服务攻击面。是否存在不安全配置,例如ssh配置允许root远程登录等。
软件风险分析主要重点关注口令,API Token,API Endpoint(URL),存在漏洞的服务,后门账户,配置文件,源代码,私钥,数据的存储方式等敏感性内容。
对于固件的软件风险分析,首先需要进行固件文件系统提取,通常使用binwalk/firmware-mod-kit等固件分析工具查看固件的架构类型,并提取对应的固件文件系统。在此基础上可以使用手工分析和自动化分析两种方式对固件进行软件风险分析。
手工分析主要是遍历文件系统中不同的目录,所有配置文件,查看Web目录及开源软件信息。明确web子目录下确定开发语言和特征,关注http,tddp,upnp等网络协议,尤其是自定义协议相关的二进制文件,设备厂商自己开发的特定服务往往是被发现问题最多的地方。还可以运行busybox二进制文件,获取运行程序和symlink等固件信息。
对于自动化分析,主要使用自动化分析工具进行辅助分析,比如使用Firmwalker在固件文件系统中搜索敏感的文件,进行已知脆弱性组件识别。对与SSL相关的文件,配置文件,脚本文件,二进制文件,admin,password和remote 等关键字,常用的web服务等进行已知脆弱性组件识别检查是否使用弱口令或者已被公开的默认账号等;
通过固件自动化分析风险评估结合固件脆弱性风险分析,可以针对固件进行综合性风险评估,形成风险评估规范性模板,建立当前固件的风险信息表,输出风险报告,从而对当前所分析固件有更清楚更直观的了解。
Part 03 总结
本文从物联网(路由器)固件入手,将研究重点放在固件分析及脆弱性风险评估方式上。固件分析使用自动化固件平台分析结合手工分析关注的重点信息,建立包含固件常用组件、固件组件历史漏洞、固件版本号、固件文件系统、固件敏感信息等信息的固件分析风险信息库。与此同时,本文从产品基本配置信息分析和基础组件脆弱性分析两种分析方式入手,总结形成了物联网固件脆弱性分析方式,可以对固件的总体风险情况形成直观感受。本文总结的固件脆弱性风险分析方式对于物联网设备的安全研究来说具备实际意义。