【绿盟首发】智能设备固件提取技术

近期,绿盟安全专家受邀参与了看雪2018安全开发者峰会。大会现场,绿盟首发Uboot提取固件漏洞的利用方法,经过充分实践,提出了Uboot提取固件的攻击模型,同时还讲解了十种智能设备的固件提取方法,真是干货满满!

在物联网设备和工控设备的漏洞安全研究时,经常有拿不到固件、固件加密、样品损坏价格昂贵等情况。通过两年的摸索,绿盟安全专家积累了提取固件的四十几个成功案例(例如有路由器、摄像头等)。经过长期总结发现,通过串口提取固件的方式最稳妥、最可靠,且在不损坏设备的情况下,还能利用设备本身的硬件和固件,几乎不用购买额外的设备,具有良好的经济效益。

串口识别

智能设备的安全测试突破点:找开发者留下的调试接口,包括硬件接口和软件接口(包括维护后门)。在智能设备的开发维护接口中,最常用的硬件接口是网口和串口。Uboot固件提取漏洞就是用硬件的串口提取固件的。串口有两种标准,RS232和TTL电平。在电路板上一般有四个脚为一组。电路板上的串口一般为TTL电平。如下:

1、找到地(GND),地(GND)一般与电源相连。(用万用表查找和电源地相通的点可以确定地。)把地(GND)接到USB转TTL的接口GND。

2、排除VCC,连接剩下的两个脚。芯片的TXD和RXD两个脚都有可能是高电平, 所以把PC端的接收的脚(RXD)随意接上一个设备的脚,启动设备,如果有输出,就接对了。最后再将最后一个引脚接好。

这样,电脑和设备的调试串口就建立了连接,接下来就可以进行下面的安全测试或固件提取了。

认识Uboot命令

Uboot每次启动时都有3秒时间(这个时间是可设的), 进入Uboot模式后, 如果输入Help,Uboot会打印帮助命令。如下:

在命令学习中我们发现有一条命令:Md,它能够显示内存的内容, 如果是Nor Flash的话,也可以把Nor Flash的内容显示出来(因为Nor Flash可以通过CPU直接寻址),这就相当于Md命令可以直接提取Nor Flash的固件。

但Md命令是需要知道起始地址和长度的, Bdinfo和Flinfo可以查看到Flash起始地址和容量。如果找不到的话,建议重启一下(重启时不要打断;不进Uboot命令;正常启动),看会不会打印更多Flash地址分布信息,通过这些信息基本就能找到起始地址把固件提取出来。

那不用Nor Flash存储固件,用Nand Flash存储固件,是不是不能提取固件了呢?这种情况其实,只要变通一下:先通过Uboot提供的命令,把Nand Flash中的存储内容转移到内存, 就可以用Md命令Dump内存。这时要注意的是,看各种嵌入式文件系统的区别和Uboot对此文件系统的支持情况。

Uboot提取固件的流程总结

第一步,获取Flash的存储信息,主要获取Flash大小、型号、CPU访问的地址区间;第二步,用Md命令提取固件信息;第三步,记录串口输出,一般用串口调试软件日志的方式记录输出结果;第四步,分析输出信息,获取固件。用Uboot提取固件的缺点是时间长一点,但只要能稳定的提取固件,不要把硬件损坏,焊三条线就可以搞定。

目前,绿盟已经完成了Uboot提取固件所有瓶颈的攻克,建立智能设备的固件攻击模型, 总结了三种Level难度的固件提取方法(第三个Level难度提取方法暂不公布)。

固件提取方法:Level1

可以看出,这种硬件存储架构模式,直接用Md命令就可以读出Flash中的固件。

固件提取方法:Level2

如果用Nand Flash存储固件或者固件的文件系统,这种情况需要变通一下:先通过Uboot内置的命令,把Nand Flash中的存储内容拷贝到内存, 就可以用Md命令Dump出内存了。这时要看涉及到的嵌入式文件系统的具体情况和Uboot对此文件系统的支持情况。具体的命令可以参考下面内容。

固件提取中常用的Uboot命令汇总

上面对Uboot提取固件的一些常用命令进行了总结。主要分为三种命令:

1、获取CPU存储地址相关信息的命令

2、把固件从Flash读取到内存的命令

3、Dump内存指定位置内容的命令

如果需要更具体的命令用法见Uboot参考手册。

固件提取方法总结和当前智能设备架构中普遍存在的问题

1、智能设备普遍存在Uboot,如果没有把Md类似的命令屏蔽掉,是可以轻易提取固件的。

2、智能设备固件存在Flash里,Flash没有保护固件被非法读取的措施。如果Flash和RAM集成在CPU上,并且开启了加密的话是比较难提取固件的。但如果它用另外一种方式:(Flash和RAM、CPU分别独立),是特别容易被提取固件(如拆下Flash用编程器就能读到里面的内容)。

3、硬件调试接口方法方便了维护客户,但有时也方便了不速之客。软件如果留一个后门是便于维护,但密码太简单的话容易被破解或者猜测,或者容易让别人从固件里分析出来。

4、目前部分智能设备的架构存在一定安全隐患。尤其是Flash、RAM和CPU分别独立配置的系统架构。这种物联网方案架构的特点是成本低,具有很好的经济性,但从固件安全的角度来说,对固件的安全性提供不了完整的保护。

专家指出,Uboot提取固件不是针对某一个厂商,几乎所有厂商都存在Uboot安全问题(除非专门做过Uboot的特殊加固),嵌入式Linux设备里面大概95%都用Uboot作启动引导,Uboot已经基本相当于嵌入式Linux的一个标配。但是,很奇怪,国内外从来没有人对Uboot的安全性做过研究。借此机会发布是希望厂家的开发人员能注意到这个漏洞并且能够及时修复。同时,也是以开放的态度,抛砖引玉,如果其它公司的安全研究员有新的固件提取方式,也可以相互交流,共同促进网络安全技术的发展。

发表评论