物联网硬件安全分析基础-固件提取

摘要: 利用编程器直接读取芯片固件的方法

编程器读取

通过夹具夹住芯片引脚,然后连接编程器读取芯片内容,通过编程器连接芯片需要注意引脚的顺序,在IC芯片上都会有一个小点,大多数情况下,小点对应的引脚即为芯片的第一脚,而连接编程器的导线也需要插入编程器上相应的引脚。

1.jpg

案例一:读取中控F7门禁固件

拆掉门禁外壳,通过电路图和芯片印字分析,在主板上有一颗FM25F04A存储芯片,通过夹具连接芯片到编程器,在通过专用编程器软件,对该芯片进行读取。

2.jpg

连接完成,确定引脚接线正确后,打开编程器对应软件,通过智能识别芯片ID,即可开始读取固件工作。

如无法识别,可根据印字说明,尝试类似的型号,一般情况下兼容。

3.jpg

点击读取,即可开始固件提取,成功之后会保存为BIN格式文件,打开即可看到16进制的内容,为下一步分析提供基础。

4.jpg5.jpg

案例二:读取某智能摄像头固件

拆掉摄像头外壳,通过分析PCB上的各个IC,找到Flash存储芯片。

6.jpg

在显微镜下,可以看到是一颗25L64型号的Flash芯片。

7.jpg

用夹具连接各引脚,并和编程器连接,进行固件读取。

8.jpg

识别到芯片型号为GD25Q64,点击读取,读取完毕后按照提示保存到文件。

9.jpg10.jpg

打开保存的BIN文件或者查看缓冲区,即可看到固件内容。

11.jpg12.jpg

在Ubuntu中,用binwalk解包固件,做进一步分析。

13.jpg

案例三:读取某智能摄像头固件

打开外壳,在PCB背面发现一颗FLASH存储芯片

14.jpg15.jpg

通过显微镜发现芯片型号为25L128。

16.jpg

连接编程器读取固件并保存。

17.jpg

案例四:读取某路由器固件

打开外壳,发现PCB上有一颗Flash存储器,但厂商出于安全考虑,把芯片印字涂抹掉了。

18.jpg19.jpg

在不知道芯片型号的情况下,我们连接该芯片,让编程器去尝试读取。

20.jpg

通过智能识别,发现编程器无法识别出具体型号,而因为Flash存储芯片的种类多样,通过查找又无法获得该路由器的具体参数,这时我们通过UART串口,读取出UBOOT启动信息,串口输出里面发现了该芯片型号为W25Q128BV。(下一篇将会重点介绍关于串口调试的方法)

21.jpg22.jpg

在编程器中选择该型号,成功提取出固件。

23.jpg24.jpg

用binwalk解包固件。

25.jpg

案例五:读取某智能电饭锅固件

拆掉外壳,背面嵌有一块PCB,反面是WIFI处理芯片,正面为存储器,连接编程器。

26.jpg27.jpg

通过印字分析为25芯片,存储大小为2M字节,尝试该型号芯片,成功读取固件。

28.jpg29.jpg

案例六:读取某网络监控摄像机固件

在PCB上找到一块25L128型号的Flash存储芯片。

30.jpg31.jpg

通过夹具连接编程器。

32.jpg

识别到芯片为MX25L128,选择其中一种,成功提取固件。

33.jpg34.jpg

用binwalk解包固件内容。

35.jpg

拆焊芯片读取固件

对于某些机器,芯片引脚采用点锡丝网焊接在背面,引脚太小或没有暴露出引脚,就需要通过拆焊芯片来读取固件了。

通过热风枪和锡焊配合,很容易从PCB上把芯片拆焊出来,但在拆焊过程中,可能存在芯片因为过热被损坏,PCB上其他元器件被损坏,电路无法接通等风险,需要酌情考虑。

36.jpg37.jpg

热风枪和锡焊拆焊芯片读取固件

设置热风枪温度为400度,拆焊掉的芯片,通过转接座与编程器连接,同样需要注意芯片的引脚方向。

38.jpg

读取芯片固件并导出。

39.jpg40.jpg

原文地址:https://paper.seebug.org/468/

上一篇:微信PC端技术研究:截获语音...
下一篇:物联网RFID安全研究