20201206 -
1. 引言
机缘巧合,自己居然有生之年又接触到了这个东西。但是多学点东西也没什么坏处,就当扩宽视野了;不过,以前这种事情,都没有记录,挺可惜的,所以这次记录一下。
关于物联网固件的分析,涉及的东西还是很多的,可能某个领域的小伙伴会专门去攻击他web方面的漏洞,通过这个角度来找到信息泄露,远程执行的一些漏洞。但是完整的固件分析并不是这么片面,涉及的东西还是很广的。
所以,这里简单记录一些,学习到的一些东西,不是专业认识,仅仅是在看了几篇文章,几篇论文,记录下自己的学到的东西。
2. 固件分析的目的
那么首先来分析一下,固件分析有什么目的呢?本质上,不管是geek自己有兴趣想玩一玩这个固件,或者安全人员为了分析这个产品是否存在漏洞,我觉得都是固件分析的目的。当然,作为安全的从业人员,分析固件是否安全,上层的应用程序是否存在漏洞,这些是主要的目的。
但是这种笼统的分析太概念化了,我们都是知道是为了安全,即使是有人为了破解某些功能,这也应该算是厂商对自己的产品限制的一种安全;所以,单单说是为了安全,还是不够的;应该再进行细分。这里,我就我了解的东西,来列举一下,当然肯定是不全的,后续再看到有关的内容的时候(有生之年),再继续添加上,这里按照从底层到上层的角度来进行划分。
- 查看厂家对固件的保护,是否封闭了UART及JTAG等引脚,这部分从硬件物理上防护了固件内容
- 固件是否加密,例如使用了简单的XOR加密方式
- 固件文件系统是怎么组织的,是否可以直接提取一些敏感信息,例如密码等
- 固件使用的某些通用库,例如openssl是否存在漏洞;Telnet
- 固件所支持的某些协议库,例如物联网的一些协议,是否存在漏洞,例如通过fuzz测试可以发现一些拒绝服务的漏洞
- 固件所支持的web服务,密码是否可窃取,是否存在漏洞,例如远程执行,信息泄露
以上,就是结合我自身的经验和理解,总结的一些问题,肯定还有其他的东西。
3. 固件分析的流程
从前文中可以看到,固件分析,或者说固件的漏洞挖掘这种过程,从最开始的提取固件到上层应用的分析,这是一个整体的流程,可能你可以直接通过网站上下载的方式拿到固件,那么也就省去了从硬件(路由器,摄像头)的层面上进行提取;但这里还是要记录一下,有时候也不是那么简单就能拿到。
3.1 固件分析的大致流程
在文章[1]中,列举了三个目标,可以解释为大致的工作流程:
- 硬件拆解,了解构造
- 固件分析,了解执行
- 逻辑测试,查找缺陷
再展开来说,那就是:
- 硬件拆解,了解构造,从UART中取出固件(应对无法下载固件的情况)
- 固件分析,了解执行,了解所使用的文件系统、内核等信息,并从中取出完整的固件
- 逻辑测试,查找缺陷,这部分包括固件本身使用的通用库的漏洞,或者说IOT设备功能上的漏洞
本文中,将具体针对流程1,2进行分析,关于上层的漏洞,暂时不进行展开。
3.2 硬件拆解(获取固件)
4. 固件分析环境搭建
Getting started with Firmware Emulation for IoT Devices
该文章,利用FAT(firmware analysis toolkit)搭建了一个web的模拟环境,在百度上搜索也能看到非常多的这种文章,可以具体进行搜索。
一个系列文章,从二进制模拟到固件模拟,然后最后模糊测试。
Emulating Embedded Linux Devices with QEMU
利用Qemu模拟嵌入式设备的二进制程序(qemu的用户模式)
Emulating Embedded Linux Systems with QEMU
通过将固件分解出来,然后将其转移到QEMU虚拟机中,而且此时使用的内核和文件系统都是预编译的,不一定时固件自带的。(这里涉及到模拟固件运行的多种方式)
Fuzzing Embedded Linux Devices
模糊测试网页。
(未完待续)
参考文献
[1]小米路由器3C固件逆向与测评-新手向