作者:Yimi Hu & Light @ PwnMonkeyLabs
原文鏈接:https://mp.weixin.qq.com/s/ekNDsy3UzRMH0iXAm3Wc-w

簡介

本篇是胖猴小玩鬧專題的第十篇,我們將在本篇和接下來的篇章中分析海康螢石品牌的智能門鎖。海康威視作為國際化大廠,旗下如攝像頭等產品早就被無數人分析過了,通過google和github等可以找到很多分析記錄和分析工具。螢石是海康威視的一個子品牌,相比于海康威視,螢石的絕大部分產品側重于家用領域,本文將要分析的智能門鎖和網關也是螢石的產品。

在本專題的前幾篇文章中,我們都在分析門鎖和相關的app,這篇我們打算對門鎖配套的網關進行一些分析(真正原因是門鎖讓我們搞壞了,雖然海康又補發了一個,但型號沒對上)。剛剛看了看螢石的網上商城,最新的聯網門鎖已經沒有外置網關了,我們在2019年分析的智能門鎖還是有外置網關的款式,圖片如下:

圖片

圖1-1 海康螢石智能門鎖網關

門鎖和網關在拿到手之后,就已經是配對狀態,我們不需要進行額外的配對操作。海康螢石智能門鎖有一個配套使用的app,該app對服務端有證書校驗,所以直接抓包是行不通的,由于我們這里是網關分析,所以就不討論app的工作了,在本專題的后續文章中,還會遇到類似的問題,到那時我們在解決app的事。

網關分析

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口是否存在輸出內容,不過這就留到下一篇中再詳細討論吧。

小結

本篇是我們開始分析海康螢石門鎖網關的第一篇。在本篇中,我們使用熱風槍將網關的Flash芯片吹了下來,然后通過編程器提取出了Flash中的內容,最后通過binwalk工具提取出了固件內容。接下來我們又研究了一下電路板上的軟排線接口和MCU的UART串口,在本專題的后續文章中,會繼續研究UART串口以及其他的固件分析內容,希望大家有所收獲。對了,吹下來的Flash不要扔,記得要吹回去啊。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1536/