购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 固件获取方式

在通过各种方式获取固件之后,要对其使用工具进行解析,得到相应的文件系统或者二进制文件,以便进行下一步的安全分析和漏洞挖掘。因此,对固件进行逆向和安全分析的前提是获取相应的固件。

本节介绍几种常见的固件获取方式,分别为官网获取、抓包获取、硬件提取。

3.4.1 官网获取

固件获取十分直接的方式就是通过官网下载。在设备对应的官网网址,根据官网提供的固件下载链接便可进行下载。在官网的技术支持处可以下载到对应型号、对应版本的固件。如图3-49所示,进入Tenda路由器官网,选择“服务支持”选项,在搜索框中可以搜索和下载需要获取的固件型号。如图3-50所示,TP-LINK路由器固件也可以在其官网进行搜索和下载。

图3-49 Tenda官网

图3-50 TP-LINK官网

通常,厂商提供的固件会统一放在某个FTP、HTTP服务器目录下,可以通过相关链接进行下载。如图3-51所示,D-LINK固件可以在HTTP服务器目录下进行搜索和下载。图3-52所示为DrayTek厂商固件的下载界面。

图3-51 HTTP服务器目录

图3-52 DrayTek厂商固件的下载界面

3.4.2 抓包获取

抓包获取是利用设备在线升级OTA时,先抓取相应的升级URL链接,然后访问升级URL链接,获取固件的下载链接的方式。如果是在Web网页端进行升级操作,那么使用BurpSuite工具对升级功能的HTTP数据包进行拦截或者重放,就可以获取返回包中升级版的固件数据的下载链接。先将固件数据保存到本地固件文件中,再对固件文件进行解包和分析即可。抓包获取固件过程如图3-53所示。

图3-53 抓包获取固件过程

1.案例一:某款路由器基于后台“在线升级”功能抓包获取固件

(1)D-Link DIR-823G路由器后台“在线升级”功能。当登录到路由器后台时,选择“更多”→“系统管理”→“固件升级”选项,可以看到“检测新版本”按钮,如图3-54所示。

图3-54 “检测新版本”按钮

(2)单击“检测新版本”按钮,使用BurpSuite工具的拦截功能进行抓包,此时返回包中直接返回了一个如图3-55所示的固件下载链接。

图3-55 返回的固件下载链接

(3)访问此链接,即可获取固件的具体下载地址。单击链接进行下载,即可成功获取固件下载文件,如图3-56所示。

图3-56 获取固件下载文件

2.案例二:某品牌摄像头基于“更新固件”功能抓包获取固件

(1)将摄像头的外壳拆开,找到UART接口,通过该接口进入摄像头的shell终端控制界面。单击“更新固件”按钮,此时在终端中输出了这次请求的数据包,如图3-57所示。

图3-57 输出数据包

(2)将此数据包直接复制到BurpSuite工具中进行重放,可以发现返回包中的URL变量为空,如图3-58所示。

图3-58 重放数据包

(3)尝试降低请求的DeviceVersion参数的值,如将469762064改为469762060,单击BurpSuite工具中的“Send”按钮进行数据包重放,如图3-59所示。

图3-59 降低参数的值并重放数据包

(4)此时返回的URL的值为一个链接,使用浏览器或者curl命令访问此链接,即可获取设备固件更新包的raw数据,如图3-60所示。

图3-60 获取设备固件更新包的raw数据

(5)由图3-61可知,设备固件更新包的raw数据是加密的数据。这就需要进行进一步分析才能得到其明文信息。

图3-61 加密的数据

3.4.3 硬件提取

虽然使用在官网下载固件或在线抓取升级包等方式比较便捷,但是有些厂商并不会提供固件的下载链接或者升级链接,这就需要通过其他途径来获取固件。除了可以使用上述固件获取方式来提取固件,还可从硬件设备中直接提取固件。

固件通常都存储在PCB板的某个芯片中。将设备拆开之后,找到相应的Flash或ROM芯片,可以使用专用工具(烧写器、编程器)进行固件提取,或者通过接口调试工具转存固件。

市面上存在多种编程器,可以分为专用编程器和通用编程器。编程器在读取固件时需要配合编程器软件,如图3-62所示。

图3-62 编程器及编程器软件

1.固件存储器芯片印有的厂商名和产品型号的字段含义

PCB板上的Flash芯片通常印有一段字符串,字符串的字段都有特殊含义,通常带有厂商名和产品型号的相关信息。这里以厂商Winbond的芯片W25Q64JVS10为例进行说明,其名称中各个字段表示的含义如图3-63所示。

图3-63 各个字段表示的含义

2.编程器固件提取原理

编程器固件提取的通用步骤基本分为以下几步:拆解设备外壳、分析PCB板中各个芯片组件、找到Flash芯片的位置、使用芯片夹和编程器提取芯片固件内容。

在具体操作时,首先使用芯片夹将编程器与Flash的各个引脚对准,然后上电,此时编程器以MCU的身份与Flash芯片进行通信。它通过总线发送读取内存段的指令,进而将Flash芯片内存空间中的数据读出。编程器固件提取如图3-64所示。

图3-64 编程器固件提取

固件提取通用工具主要有螺丝刀、塑料撬棒、电烙铁、热风枪、编程器和芯片夹等。

3.编程器固件提取案例

1)案例一:用芯片夹读取法提取某个设备固件

(1)拆解设备外壳,如图3-65所示。

(2)使用电烙铁拆下Flash芯片,如图3-66所示。

图3-65 拆解设备外壳

图3-66 拆下Flash芯片

(3)将拆下的芯片连接芯片夹(见图3-67)并安装到MinPro 100G编程器上。

图3-67 连接芯片夹

(4)将编程器连接计算机并打开对应的编程软件,建立计算机与编程器的连接,如图3-68所示。

图3-68 建立计算机与编程器的连接

(5)读取固件内容,如图3-69所示。

图3-69 读取固件内容

(6)使用Binwalk工具分析读取的固件内容,如图3-70所示。

图3-70 使用Binwalk工具分析读取的固件内容

2)案例二:用飞线法提取某个设备固件

(1)拆解设备外壳,用“飞针”勾住芯片的各个引脚,如图3-71所示。

图3-71 勾住引脚

(2)将RT809F编程器连接计算机,进行软件识别,如图3-72所示。

图3-72 进行软件识别

(3)读取固件内容,如图3-73所示。

图3-73 读取固件内容

4.接口提取工具

根据调试接口标准的不同,接口提取工具主要有UART接口提取工具、SPI接口提取工具、JTAG接口提取工具和其他设备提取工具4种。

1)UART接口提取工具

常见的UART接口提取工具有FT232、CH340和CP2102等,如图3-74~图3-76所示。

图3-74 FT232

图3-75 CH340

图3-76 CP2102

2)SPI接口提取工具

常见的SPI接口提取工具有Bus Pirate和Shikra等,如图3-77和图3-78所示。

图3-77 Bus Pirate

图3-78 Shikra

3)JTAG接口提取工具

常见的JTAG接口提取工具有J-LINK、U-LINK和ST-LINK等,如图3-79~图3-81所示。

图3-79 J-LINK

图3-80 U-LINK

图3-81 ST-LINK

4)其他设备提取工具

树莓派结合FlashROM读取套件,如图3-82所示。

图3-82 树莓派结合FlashROM读取套件

5.SWD接口固件提取案例

通过SWD接口提取的NRF51822 BLE 2.4GHz芯片的外观如图3-83和图3-84所示。

图3-83 芯片正面

图3-84 芯片反面

(1)将SWD接口提取工具引脚与蓝牙设备引脚连接,如图3-85所示。

图3-85 连接SWD接口提取工具引脚与蓝牙设备引脚

(2)运行OpenOCD(Open On-Chip Debugger),如图3-86所示。

图3-86 运行OpenOCD

(3)打开另一个终端,连接本地4444号端口进行调试,如图3-87所示。

图3-87 连接本地4444号端口进行调试

(4)使用dump命令读取内存数据,获取蓝牙设备固件内容。使用hexdump命令查看导出的固件内容,如图3-88所示。

图3-88 查看导出的固件内容

如果使用上面几种方式都无效,那么可以使用一些其他方式来获取固件。 3JvjVkBnO5gtZlrS6plSomp74Ob6Z6zC+JgRiUZyDj7HhswdC75Vgp6Fvbw+coQy

点击中间区域
呼出菜单
上一章
目录
下一章
×