Flash Dump技术解析

1、Flash Dump技术概述

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

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

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

2、 Flash芯片拆焊

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

2.1.  芯片拆卸

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

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

 

图2‑1快克957DW热风枪运维

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

 

图2‑2对温度有特殊要求的QPX芯片web安全

风量的控制须要结合实际芯片的尺寸,以快克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添加助焊膏

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

3、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大小以及常见的排布形式进行尝试。

4、固件解析

工具:binwalk。

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

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

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

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

干货主要有:

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

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

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

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

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

 渗透测试工具大全

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

各位朋友们能够关注+评论一波 而后加下QQ群:581499282  备注:开源中国  联系管理大大便可免费获取所有资料