1
简介
本篇是胖猴小玩闹专题的第十篇,我们将在本篇和接下来的篇章中分析海康萤石品牌的智能门锁。海康威视作为国际化大厂,旗下如摄像头等产品早就被无数人分析过了,通过google和github等可以找到很多分析记录和分析工具。萤石是海康威视的一个子品牌,相比于海康威视,萤石的绝大部分产品侧重于家用领域,本文将要分析的智能门锁和网关也是萤石的产品。
在本专题的前几篇文章中,我们都在分析门锁和相关的app,这篇我们打算对门锁配套的网关进行一些分析(真正原因是门锁让我们搞坏了,虽然海康又补发了一个,但型号没对上)。刚刚看了看萤石的网上商城,最新的联网门锁已经没有外置网关了,我们在2019年分析的智能门锁还是有外置网关的款式,图片如下:
图1-1 海康萤石智能门锁网关
门锁和网关在拿到手之后,就已经是配对状态,我们不需要进行额外的配对操作。海康萤石智能门锁有一个配套使用的app,该app对服务端有证书校验,所以直接抓包是行不通的,由于我们这里是网关分析,所以就不讨论app的工作了,在本专题的后续文章中,还会遇到类似的问题,到那时我们在解决app的事。
2
网关分析
2.1 通信分析
按照正常思路,肯定是先抓包看一下网关与服务器的通信内容,参考我们在本专题第6篇中的部署方法,通过交换机端口监控的方法抓取海康萤石网关的通信内容,如下图:
图2-1 海康萤石网关通信内容
通过上图中的通信内容,我们大体上可以分析出一些内容:
A. 网关上电之后,与litedev.ys7.com进行通信。
B. 与litedev.ys7.com通信中,获取了另一个ip,即101.71.30.172。此后,终止了与litedev.ys7.com通信,并一直保持与101.71.30.172的tcp连接。
C. 通信内容看起来是加密的,通信内容中没有很多直接可见的明文。
既然如此,那么就要看看海康萤石网关里面的程序了,研究研究网关固件是如何处理这些通信数据的。
2.2 电路分析
首先我们需要获取海康萤石网关的固件,这次并没有像之前的果加智能门锁那样顺利:萤石配套的app不能获取固件的下载地址,在海康和萤石的官网仔细翻找,同样没有查到固件的下载地址。那我们只好直接提取Flash中的数据了。首先拆开门锁网关,看看里面用了什么芯片,留了什么接口,截图如下:
图2-2 海康萤石门锁网关电路板
上图中,最明显的就是中间的MCU,仔细观察可以确认品牌和型号为MEDIATEK MT7688AN,联发科的芯片,先下载一份芯片手册看一看,下载地址是:http://labs.mediatek.com/zh-cn/chipset/MT7688。
通过阅读芯片手册(遥想笔者在校时还拿了MTK的企业奖学金,现在翻人家芯片手册的原因竟然是要搞人家产品),可以找到关于Flash的部分内容:
图2-3 MT7688AN芯片的特点
上图可以看到该芯片并没有内置Flash,而是使用SPI通信的外置Flash。那么,就继续看看电路板上的其他芯片。
在图2-2中,MCU的上方是Winbond W9751G6KB芯片,该芯片是DDR2 SDRAM存储器,简单说就是断电丢数据的内存,固件程序不可能在里面。在MCU的下方有两个芯片,分别是PCM5100A和GD25Q127CSIG芯片, PCM5100A是个音频立体声DAC芯片,而GD25Q127CSIG芯片则是128M-bit的Flash芯片,我们要提取的固件文件应该就是在此Flash中。
要读取Flash芯片,一个简单的方法是直接用烧录夹提取,其优点是不用将芯片焊下来。不巧的是,烧录夹有点粗,海康萤石的门锁网关设计的很紧凑,我们的夹子夹不上去。如此一来,只好将芯片取下来,用热风枪和镊子就可以把Flash吹下来了,如下图所示:
图2-4 热风枪吹取Flash芯片
如果没有热风枪,用电烙铁也是可以的,注意手别抖就好。然后将摘下来的芯片放在编程器上,如下图:
图2-5 将Flash芯片放置于编程器上
然后使用编程器的配套软件,通常情况下软件是可以自动识别出Flash品牌和型号的,但有时也需要我们手动选择。在GD官网查到该Flash的详细参数,网址如下:https://www.gigadevice.com/zh-hans/flash-memory/gd25q127c/,截图如下:
图2-6 GD25Q127CSIG详细属性
上图中,可以看到Flash大小为128Mb,即16MB,完成Flash芯片的配置工作之后,就可以读出Flash内容了,如下图所示:
图2-7 使用编程器提取固件
读出完毕之后,即可将读出的数据保存为一个文件,我们将其命名为OriginFirmware.bin文件。由于我们买的编程器是很便宜的那种,提取时有时会出现一些错误,可以多提取几次。获得固件之后,就可以开始分析固件内容了。
2.3 固件内容分析
在本专题的第6篇中,我们就展示过binwalk这款用于固件分析的工具。这里,我们直接用-Me参数提取固件内容,其中M参数表示递归提取:
图2-8 binwalk提取固件内容
根据binwalk的分析结果,我们可以判断固件应该包含一个嵌入式Linux操作系统,智能网关的主要功能逻辑应该由某个Linux可执行程序完成。待binwalk运行完毕之后,会生成几个文件夹,分别是2个squashfs文件系统,2个LZMA压缩的数据,以及1个jffs2文件系统,如下图所示:
图2-9 海康萤石网关提取内容
上图中,前2个文件夹即2个LZMA压缩的数据,解压之后会发现是cpio文件系统,binwalk会自动帮我们递归全部提取。
逐个浏览这些文件系统中的内容,可以得出结论如下:
A. jffs2文件系统保存着门锁和网关的相关信息,如id等;
B. 两个cpio文件系统中,其中一个应该是恢复出厂设置时的备份文件系统,另一个是当前正在使用的文件系统;
C. 两个squashfs文件系统中,一个保存的全部都是mp3文件,另一个保存着网关的主程序,该程序即为我们将要分析的主程序。
到此,我们已经将完整的固件提取出来,至于逆向分析的工作就先放一放,将目光重新聚焦于电路板上。
2.4 UART接口分析
UART接口是IoT设备中最常用的通信接口,一般MCU都会提供UART引脚。在MT7688AN的芯片手册中,我们可以看到该芯片UART0接口和UART1接口。其中UART0接口在30和31引脚,如下图:
图2-10 MT7688AN芯片UART0引脚位置
上图中,我们仅展示了UART0的位置,UART1可以自行查询芯片手册。如果海康萤石的网关没有屏蔽对UART的输入和输出,那么通过这些UART也许可以实现一些操作。为此,先要确定这些UART引脚是否被引出。在图2-2中,左侧我们可以看到一个软排线接口。海康萤石设计的电路板确实很紧凑,其他厂家的门锁或者网关一般用1.27mm或者2.54mm间距的排针,海康萤石的板子用的是0.5mm间距的软排线,如下图:
图2-11 海康萤石网关软排线接口
通过万用表即可测量引脚与此软排线接口的连通情况,使用万用表的二极管档,然后一个测试笔触碰UART_TXD0引脚,另一测试笔在软排线上滑动,听到万用表蜂鸣声时,即发现了接通的线路,如下图所示:
图2-12 海康萤石网关软排线接口
借由万用表的帮助,我们找到了与UART引脚连通在软排线接口。那么,可以想办法接上这个软排线,看一看固件在启动之后,UART口是否存在输出内容,不过这就留到下一篇中再详细讨论吧。
3
小结
本篇是我们开始分析海康萤石门锁网关的第一篇。在本篇中,我们使用热风枪将网关的Flash芯片吹了下来,然后通过编程器提取出了Flash中的内容,最后通过binwalk工具提取出了固件内容。接下来我们又研究了一下电路板上的软排线接口和MCU的UART串口,在本专题的后续文章中,会继续研究UART串口以及其他的固件分析内容,希望大家有所收获。对了,吹下来的Flash不要扔,记得要吹回去啊。
作者:Yimi Hu & Light @ PwnMonkeyLabs
联系方式: