3

MachineGun的个人空间

 3 years ago
source link: https://my.oschina.net/u/5053258/blog/5064568
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、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  备注:开源中国  联系管理大大即可免费获取全部资料


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK