写点什么

Flash Dump 技术解析

用户头像
Machine Gun
关注
发布于: 2021 年 05 月 31 日

一、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 设备是基于芯片厂商提供的系统和开发环境进行二次开发。如果能获取目标设备对应的芯片厂商文档,对提取操作系统镜像也会有帮助。

看到这里的大佬,动动发财的小手 点赞 + 回复 + 收藏,能【 关注 】一波就更好了

为了感谢读者们,我想把我收藏的一些网络安全/渗透测试学习干货贡献给大家,回馈每一个读者,希望能帮到你们。

干货主要有:

① 2000 多本网安必看电子书(主流和经典的书籍应该都有了)

② PHP 标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ 网络安全基础入门、Linux 运维,web 安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

 渗透测试工具大全

⑦ 2021 网络安全/Web 安全/渗透测试工程师面试手册大全

各位朋友们可以关注+评论一波 然后加下QQ群:581499282  备注:infoq  联系管理大大即可免费获取全部资料

用户头像

Machine Gun

关注

还未添加个人签名 2021.03.28 加入

需要获取网络安全/渗透测试学习资料工具的朋友可联系V:machinegunjoe666 免费索取

评论

发布
暂无评论
Flash Dump技术解析