我的位置 态势感知  >  安全态势

原创 | Flash Dump技术解析

来源:关键基础设施安全应急响应中心 时间:2021-05-31 阅读次数:

作者 | 海康威视

1、FlashDump技术概述

2、Flash芯片拆焊

2.1 芯片拆卸

2.2 芯片焊接

3、Flash数据读取

3.1 修复数据错误

3.2 去除ECC校验位

4、固件解析

一、Flash Dump技术概述

固件指嵌入在硬件设备中的软件,固件分析是分析IoT设备软件层面安全性的主要手段。随着物联网安全得到重视,越来越多的厂商选择发布加密的固件升级包。这种改变让安全研究者也越来越难以从升级包中直接提取固件。安全研究者们因此将目光转向设备本身,尝试从设备中直接提取固件。

从设备中提取固件的方式有很多,比如找到串口,通过uboot命令dump固件,甚至直接通过硬件调试口读取固件。但这些基于串口、基于调试的方法都不具备通用性,需要设备预留相关接口。固件一般存储在Flash芯片中,并且由于成本、性能等因素限制,一般都不会加密。因此直接从Flash芯片中读取固件即Flash Dump技术的通用性比较好,是进行IoT设备分析的关键技术。

Flash Dump的流程可以分为四个部分,芯片拆卸、数据读取、固件提取和芯片焊接。这个过程会涉及到一些硬件知识和拆焊技能。从事固件分析的安全研究者一般具备较好的软件背景知识,但不一定了解硬件和焊接,而大多数Flash Dump技术文章对硬件相关技术点的介绍比较简略。本文希望填补这个空白,对FlashDump过程中涉及的硬件相关知识和焊接技能着重进行介绍。

二、 Flash芯片拆焊

Flash Dump技术的第一个难点,是如何在不损坏设备的前提下,对芯片进行拆焊。

2.1.  芯片拆卸

工具:热风枪、风嘴、高温胶带、镊子。

芯片拆卸的核心工具是热风枪,如下图 2‑1所示。掌握热风枪的正确使用方法,才能够保证成功拆卸芯片。使用热风枪时需要注意两个要素:温度和风速。温度过高会导致器件损坏,温度过低无法融化焊锡。风速过高容易把器件吹跑,风嘴的角度不对也可能导致器件损坏。

2‑1快克957DW热风枪

通常如果目标芯片使用含铅焊锡焊接,我们可以将热风枪的温度控制在330~350摄氏度之间,如果采用无铅焊锡,则将温度设置在350~370摄氏度。为了防止目标芯片周围的器件受到影响,我们可以使用高温胶带将周围的器件包裹起来,起到隔热保护的作用。需要注意的是,有的芯片对焊接温度有特殊要求,如下图 2‑2所示,对于这样的芯片我们需要以芯片手册为准。

2‑2对温度有特殊要求的QPX芯片

风量的控制需要结合实际芯片的尺寸,以快克957DW热风枪为例,对于一般芯片可以采用风枪的3~4挡。风嘴也需要结合芯片的尺寸来进行选择,如果芯片较大就要选择较大一些的风嘴。

做好了上述工作后,我们就可以启动热风枪,让风嘴在距离芯片2厘米左右的高度上均匀加热芯片,如下图 2‑3所示,等待焊锡融化后就可以用镊子把芯片取下来。

2‑3使用热风枪加热芯片

2.2.  芯片焊接

工具:焊台/电烙铁、烙铁头、锡条、热风枪、风嘴、助焊膏/助焊剂、高温胶带、镊子。

在完成固件提取后,我们需要将芯片重新焊回。焊接芯片的主要工具是焊台/电烙铁和焊锡。常见的SOP封装芯片焊接过程可以分为三个步骤,固定芯片、拖焊、去除连锡。

首先需要在芯片的一角打上焊锡,如下图 2‑4所示:

2‑4在芯片一角上锡

然后用镊子放上芯片,并在对角打上焊锡固定芯片,如下图 2‑5所示:

2‑5固定芯片对角

然后通过拖焊,将芯片引脚都打上焊锡,如下图 2‑6所示:

2‑6拖焊四边引脚

这个时候会出现焊锡分布不均匀,把多个引脚粘连起来的情况,称为连锡。我们可以通过在出现连锡位置处加上助焊膏,如下图 2‑7所示:

2‑7添加助焊膏

然后在用烙铁头加热焊锡并刮去连锡。由于焊接是一项实践性非常强的技能,这里只能就常见的情形进行简略的介绍。实操中还是需要结合实际,勤加练习,才能保证焊接的成功率。对于没有引脚的贴片元件,需要使用热风枪进行吹焊,操作方法和上一节拆卸芯片类似,这里不再详细介绍。

三、Flash数据读取

工具:多功能编程器、适配器。

完成Flash芯片拆卸后,我们就可以开始读取Flash中存储的数据。这里我们需要用到多功能编程器和适配器。多功能编程器是用于读写各类存储器数据的专用工具,如下所示,一般需要配合适配器使用。

图3‑1 TNM-5000编程器

由于不同厂商、不同型号的Flash芯片会采用不同的封装,引脚数目也不相同,因此需要相应的适配器来适配芯片的引脚。

图3‑2 TSOP48适配器

在读取数据时,还可能需要对数据进行处理,比如修复错误数据以及去除ECC校验位。Flash芯片分为NorFlash和Nand Flash。如果目标芯片为NorFlash,则不需要考虑去除ECC校验位,可以直接进行固件解析,如果是Nand Flash则必须去除ECC校验位。下面两节详细介绍了,数据处理的方法和原理。

3.1.  修复数据错误

读取数据的过程中可能由于硬件问题或数据传输的原因(比特翻转),导致部分数据读取出错。因此需要多次读取,并校验读取结果。如果多次读取的内容一致,说明读取过程没有出现问题,如果多次读取的结果不一致,则需要对读取结果进行数据修复。

由于这种数据出错是随机的,因此一般采用基于统计的方法修复错误数据。首先进行多次读取,并统计出所有变化的字节。这些字节在多次读取中出现频率最高的值,即为原始数据的值。

3.2.  去除ECC校验位

Nand Flash包含若干个块,一个块包含若干个页。由于电气特性的限制,Nand Flash是以页为单位读取,以块为单位擦写。Nand Flash在擦写过程中,氧化层结构会逐步被破坏,因此Nand Flash有擦写次数限制,擦写次数超出限额会形成坏块。

IoT设备会在软件层面实现坏块管理,充分利用Nand Flash的存储空间,延长使用寿命。坏块管理一般使用ECC校验算法,ECC校验算法一般每256字节原始数据生成3字节校验数据,在Nand Flash上存储原始数据的同时会存储校验数据。

由于ECC校验算法的使用,导致我们从Nand Flash中读出的数据混合了原始数据和校验数据。要想对固件进行正确的解析,必须去除这些校验数据。一般Nand Flash每页存储512字节原始数据,并分配16字节用于存储校验数据、坏块标记和文件系统信息,这16字节被称为spare area。但是原始数据和spare area的排布并不是固定的,常见的排布方式有两种,如下图 3‑3所示:

3‑3 Nand Flash校验数据排布

原始数据和spare area的排布是由操作系统层面对Nand Flash读写的实现方式决定的,因此没有固定的标准。一般可以根据芯片手册,结合NandFlash页大小、spare area大小以及常见的排布形式进行尝试。

五、固件解析

工具:binwalk。

经过前面几节的工作后,我们已经读取到Flash中的固件数据,可以尝试进行固件解析了。固件解析的常用工具是binwalk。固件解析的目标是提取出文件系统或操作系统镜像。

基于Linux的IoT设备固件,可以使用binwalk直接提取出文件系统。因为binwalk对uboot镜像格式uImage以及常用的文件系统如ubifs、squashfs、jffs2、yaffs等有很好的支持。有些IoT设备或工控设备会使用ucos ii、vxworks等操作系统,这些操作系统可能并没有文件系统支持,而是直接以操作系统镜像的形式载入内存运行。我们依然可以使用binwalk做一些前期的分析。比如有些设备也会使用uboot做ucos ii的引导,找到uImage就可以找到操作系统镜像。此外由于大多数IoT设备是基于芯片厂商提供的系统和开发环境进行二次开发。如果能获取目标设备对应的芯片厂商文档,对提取操作系统镜像也会有帮助。

 

 

转载请注明来源:关键基础设施安全应急响应中心

8条评论