首页
社区
课程
招聘
[原创]看雪2018峰会回顾_智能设备漏洞挖掘中几个突破点(内有十种固件提取方法和首次公开uboot提取固件方法)
发表于: 2018-7-25 10:26 45896

[原创]看雪2018峰会回顾_智能设备漏洞挖掘中几个突破点(内有十种固件提取方法和首次公开uboot提取固件方法)

2018-7-25 10:26
45896

前言

      上周六在看雪安全峰会分享了一个议题,整理了一下分享过程中的一些内容,做了一个简单记录,有些地方由于时长有限,可能过的比较快,感兴趣的朋友可以看一下文字的一些记录,议题的PPT和视频demo上传至百度云了,论坛里有需要的朋友可以下载下来,欢迎一起学习和交流。


同时也是首次公开一种本人在对智能设备进行安全测试过程中摸索和总结出来的一种uboot提取固件的方法

链接:https://pan.baidu.com/s/1d3zuTKPKb-hg4kM_Qxf9Hw

密码:pf1b


下面是根据我当时演讲的发言,从速记员的记录整理的。

非常感谢看雪邀请我在这里做演讲!题目是“智能设备漏洞挖掘中的几个突破点”。

我来自绿盟科技工业物联网安全实验室,专长是硬件的固件安全。插播一条招聘广告,如果对工业物联网安全研究有兴趣的朋友,欢迎联系我们。


今天我讲的目录大纲是这四点。

一、智能设备基础知识

二、 提取固件的十种思路

三、 从固件发掘漏洞的思路

四、 智能设备的加固建议


我既做过智能设备的开发者,也做过安全从业人员,在会议上把硬件和固件知识介绍给搞安全的朋友,把安全的知识介绍给搞开发的朋友。希望大家能喜欢。

一、智能设备基础知识

这是智能设备的组成,分为几个部分,智能设备必须有这么几个东西,比如它必须有CPU、内存、相当于硬盘的flash,有网络、网口接口、串口,有时会有SD卡插座存储设备,也有的有显示界面。


CPU有很多架构,有X86、MIPS、ARM等;内存分为好几种。存储也有各种,比如flash、TF卡、mmc卡、硬盘;一般的电路板都会留串口,尤其做调试时。厂商做维护时不得不面对的问题:智能设备如果在使用中出现了问题,客户要求马上给解决,如果开发者没有维护的接口,开发人员到现场可能解决不了问题。所以这些是必备的;有时是串口,有时是网口之类的;有时候是USB口。智能设备内运行的软件也叫固件,固件有对系统进行引导的部分,常用的是Uboot,这占很大市场份额;操作系统用Linux非常多,因为它对网络的支持非常好。


跟大家介绍一下什么是串口,串口一般分为两种类型,主要是RS232或者TTL,TTL是5V或者3.3V,相当于CPU的电压。左下角是对串口的定义,串口真正引用的是三条线,就是RXD、TXD、DCD。串口传输时,有三根线的时候,是按照一定的时序传输的,这个时序有一定的周期,这个周期是异步产生的。异步传输有一个波特率的概念: 如:9600的波特率,换算过来大概1秒钟传送1000个字节。波特率越大,传输越快。


智能设备的组成里比较重要的还有flash,分为两种,一种是Nor falsh,它的特点是价格比较贵、容量小、地址线和数据线是分开的,好处是CPU可直接寻址,因为电路图上每一个地址线都是单个连出来的,数据线也是单独连出来的。它常用做代码存储,存储容量越大,这个地址线是越多的。

算一下上图的nor Flash的地址线的寻址范围: 

8MB = 0x800000(16进制)
换算成二进制: 100000000000000000000000
地址线正好是从addr0 - addr22. 最大地址是22个1


还有一种是Nand Flash,它价格便宜、容量大,主要用作数据存储,但这个东西一般是不可寻址,需要驱动程序。


下面讲一下软件里面的Uboot和busybox,Uboot在嵌入式里一个功能是做引导程序,启动的时候引导用,还有一个功能是做更新时用.支持CPU的种类比较多,比如ARM、Linux、MIPS、PowerPC都支持,也支持简单的网络命令之类的。Busybox集成了三百多个常用的Linux命令和工具软件,它非常小巧,编译后大概在1-2兆左右,但支持的命令非常多,而且可以根据需要做裁减。例如:有的裁剪了busybox的指令nc,dd,tar等。


这是智能设备软件和硬件的协作关系,以Linux操作系统为例,上面是内存,下面是存储flash,中间是固件,固件里面的Uboot是启动时引导用的,启动起来是kernel,后面跟着是文件系统,文件系统里面包括RAMFS和FALSH FS。


这是升级接口,我们对维护接口要有一定的了解,为什么?因为接口是非常重要的,一个是升级时要用,另外一个是调试时要用,还有一个是升级固件时要用。调试接口的基本就是这几个功能。

二、提取固件的十种思路

    这十种思路是我所熟知的,是我经常用的十种方法,其他不讲的方法并不代表不存在。固件提取方法简单分为硬件和软件两种类型。


我刚才对基础知识做了大概的介绍,比如我要提取它的固件,它的固件放在flash里,我肯定要做一些了解。还有对串口和接口都要有研究。还有固件里面支持这些程序,对文件系统、基础小命令等都要有一定的了解,这些知识和技巧利用好是可以发挥很大功效的。

智能设备提取固件的十种思路:


这里先讲九种固件提取方法, 最后一种方法给大家一个惊喜!


1、 官网或联系售后索取升级包。这点不多讲。


2、 在线升级方式提取固件。如果有手机应用或者电脑应用,可以点“升级”,升级固件的时候就可以通过抓包的方式,把固件给抓到。如果老版本和新版本固件的下载地址有一定的命名规律的话,新版本抓到了,老版本也可以猜出来。PPT这只是一个例子,并不针对于任何厂家。


3、 逆向升级软件,软件内置解包和通讯算法。如果它的设计是在下位机解密的话稍微安全点;在上位机解密的话是可以逆向破解的。


4、 从调试接口:JTAG/SWD等方式获取固件。


腾讯玄武实验室的小马哥去年有两次公开讲解,今天时间所限,不做描述。


5、折flash、SD/TF卡、硬盘等,用编程器/读卡器获取固件。

常用的是焊下flash芯片,用编程器读取固件,读完后再把芯片焊回去。


需要注意的是芯片是有方向的,第一脚的地方有一个圆点,焊接或用编程器读取时,弄清芯片的方向。


6、从串口(UART)调试口获取固件。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-11-20 15:39 被ylml编辑 ,原因: 修改pkiot 网友指正的问题。感谢 pkiot 指出文中的错误。
收藏
免费 6
支持
分享
打赏 + 2.00雪花
打赏次数 2 雪花 + 2.00
 
赞赏  kanxue   +1.00 2019/09/23 感谢分享~
赞赏  junkboy   +1.00 2018/07/25
最新回复 (20)
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享,排版有点…
2018-7-25 11:29
0
雪    币: 29182
活跃值: (63621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
3
满满的干货!
2018-7-25 13:52
0
雪    币: 1231
活跃值: (1072)
能力值: ( LV7,RANK:155 )
在线值:
发帖
回帖
粉丝
4
junkboy 谢谢分享,排版有点…
排版的时候,被叫出去吃饭了,哈哈
2018-7-25 20:11
0
雪    币: 50161
活跃值: (20625)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
干货满满
2018-7-25 20:15
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
加密的固件怎么办?
2018-7-25 22:18
0
雪    币: 1231
活跃值: (1072)
能力值: ( LV7,RANK:155 )
在线值:
发帖
回帖
粉丝
7
levy_400711 加密的固件怎么办?
flash里存储的,一般是能直接跑的程序。除非这个程序是涉及军工之类的核心程序。
固件跑起来以前,肯定要先解密的。固件万一加密就只能解密了。
如果能读出flash里所有的内容,还怕不能解密吗?当然,像苹果那样的加密另外一码事了。
我们普通人研究个路由器、摄像头之类的设备是不可能这种复杂情况的。
万一你运气好,遇到牛比的设备了,又没有金刚钻,就换个简单一点的设备研究吧。哈哈
2018-7-26 17:36
0
雪    币: 41
活跃值: (913)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好文章,赞一个
2018-7-30 09:25
0
雪    币: 13
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark
2019-7-18 20:16
0
雪    币: 275
活跃值: (259)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
mark
2019-9-21 17:09
0
雪    币: 2002
活跃值: (607)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
mark
2019-9-23 18:42
0
雪    币: 192
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
CPU有很多架构,有X86、Linux、ARM等等;内存分为好几种。
cpu还有linux架构的啊(问号脸)
2019-9-25 10:19
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
mark
2019-10-29 12:05
0
雪    币: 1231
活跃值: (1072)
能力值: ( LV7,RANK:155 )
在线值:
发帖
回帖
粉丝
14
pkiot CPU有很多架构,有X86、Linux、ARM等等;内存分为好几种。 cpu还有linux架构的啊(问号脸)
您是对的!  确实是我错了!  应该是: "CPU有很多架构,有X86、MIPS、ARM等"。
2019-11-20 15:36
0
雪    币: 458
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
  最近遇到一个东西。 你上面说的路子人家全都避开了~~~efuse校验uboot签名,uboot再校验后面的kenerl那些。串口仅仅只打印内存信息。之后就没任何信息。jtag被屏蔽,usb被屏蔽~~能想到的路子全想了~~仅仅是用编程器读出了固件~就是解不开固件~~求大神搭把手
2019-12-29 23:26
0
雪    币: 220
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
badboyhzg [em_5] 最近遇到一个东西。 你上面说的路子人家全都避开了~~~efuse校验uboot签名,uboot再校验后面的kenerl那些。串口仅仅只打印内存信息。之后就没任何信息。jtag被屏蔽,u ...
最后解开了吗
2020-5-7 01:20
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
17
截图两个都是nand flash
2020-5-7 08:54
0
雪    币: 458
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
混元霹雳手 最后解开了吗
嘿嘿~~解开了。
2020-5-10 20:06
0
雪    币: 162
活跃值: (170)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
19
我遇到的设备可以提取固件  但是他会对后续系统进行加密,并且这部分验证代码不在FLASH 而在芯片封装的存储器里 这个怎么解决?
2020-5-12 13:59
0
雪    币: 94
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
Mark 好文章!
2020-5-17 14:42
0
雪    币: 122
活跃值: (360)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
好文章
2021-3-25 18:56
0
游客
登录 | 注册 方可回帖
返回
//