當前位置:
首頁 > 新聞 > 我所了解的物聯網設備測試方法(硬體篇)

我所了解的物聯網設備測試方法(硬體篇)

0x01.前言


本科所學專業就是IoT,面試安全崗位時大部分面試官都會問我寫IoT安全相關的東西,花了半天的時間整理了下本科期間做過的有關IoT安全的技術、demo等。


0x02.廢話連篇


先說下我個人對IoT的看法,物聯網關鍵的在於「網」這個字,萬物互聯,靠的就是「網」,至於這個「網」,實現的方式多種多樣,這也是前些年的物聯網的「碎片化「問題的一部分原因,協議、標準不同,很難有一套成熟的框架或者說是體系可以用於標準、安全地給開發者使用,開發出來的東西漏洞百出,甚至同樣的一種功能實現,不同廠商的產品漏洞的危害點卻在不同的層面,比如說同樣是智能鎖的遠程開關功能,可以怎麼做?

典型的應該是有兩種思路,和近場還是遠場有關係,近場的解決方案應該是直接藍牙控制或者廠商私有的協議,針對這種方案可以抓包重放等,就我接觸到的產品而言,重放攻擊針對大部分都是有效的;遠場的解決方案都離不開」雲「,可能是app端與雲端驗證,然後雲端下髮指令,這種上雲的操作,攻擊可以從app端做,也可以從web端入手。App端可能需要hook不同的方法了解如何與IoT設備進行交互,也需要關注交換格式的方法,比如JSON、XML等,有些app會固化編碼自己的密鑰,攻擊者以此偽造消息傳送給雲端來偽造開關的指令,雲端基本上和傳統的web安全攻擊思路都是相同的,OWASPtop10的那些漏洞,在IoT的雲端甚至更加廣泛,平行越權、RCE、未授權訪問等都是非常常見的。


像智能鎖這一類的由傳統產品改造後的IoT設備是目前應用最典型的,應該說也是存在漏洞最多的層面。為什麼?還是以智能鎖為例,本來鎖具面臨的攻擊只是物理攻擊而已(拿一些工具撬開),現在它成IoT了,增加了其他功能,比如說用app控制了,攻擊者可以從app端下手,控制了app就控制了智能鎖,再進一步,上雲了,攻擊面就更大了,web的攻擊技術也可以用來控制鎖具了。功能越多,漏洞的攻擊面越多。就像安全從業者很喜歡引用的木桶理論一樣,木桶能盛多少水,取決於最短的一塊木板。


IoT安全從業者,必然要求是文能IDA,武能示波器,軟硬方面的技能兼備。



廢話說完了,接下來進入正題。


0x03.工具篇


推薦用樹莓派吧。很多demo都是在樹莓派上開發的,然後在後期出於成本等方面的考慮,聯繫專業的廠商進行硬體的定製,剪切了不必要的硬體。此外,樹莓派自身就是ARM架構,與許多IoT設備相似,當然,還有相當一部分是MIPS、PowerPC等,這些架構的話,樹莓派帶起來可能會有困難,在計算機上裝個QEMU或者FAT基本夠用了。樹莓派另一方面在於原生的raspbian,有許多的開源工具可以使用,比如OpenOCD、SPIFlash等等。



此外,還需要一些硬體工具,比如SDR、萬用表、烙鐵、熱風槍、燒錄座等等,土豪可以再買個示波器、電子顯微鏡;一些使用的命令行級別的工具,如file、hexdump、strings、dd、lzma、7z等。


0x04.介面調試篇


主要碰到的介面有UART、JTAG、I2C、SPI等,這兒詳細講講UART的,因為我用到的最多,其次就是JTAG,相對來說,I2C、SPI比較少。


1.UART(通用非同步接收器發送器)


是一種硬體組件,允許兩個硬體外圍設備之間的非同步串列通信。它們可以位於同一塊電路板上(例如微控制器與電機或LED屏幕通信),也可以位於兩個不同的設備之間(例如設備微控制器與PC通信)。它可以允許通過串列讀取/寫入設備。


在許多物聯網設備中,板上的UART埠保持打開狀態,任何人都可以通過串口連接和訪問以獲得shell,日誌輸出等。設備通常會有一組引腳,連接到微控制器UART RX和TX引腳,用於發送和接收串列數據。



在板子上找到相應的引腳後,連接計算機前,還需要usb轉ttl:



用於轉換電氣標準,即高低電平的轉換。


連接好後打開xshell或者secureCRT,設置埠和波特率,就可以拿到shell了。


當然大部分情況下沒這麼簡單,可能只是進了busybox,還需要進一步地搜集、解密root的密碼等操作,這裡不再展開。


2.JTAG


JTAG屬於微控制器調試介面。微控制器具有在運行期間使用指定引腳進行調試的規定,這些引腳連接到電路板上的引腳。這些引腳(埠)由開發人員和設計人員用於調試,讀/寫固件和微控制器內部存儲器,生產後控制/測試微控制器引腳。這使得調試埠成為最關鍵的攻擊面之一,因為它為攻擊者提供了強大的功能和訪問許可權。除了JTAG之外,還包括cJTAG、SWD。


JTAG的介面在PCB上基本如下圖:



JTAG協議定義了可用於測試和調試微控制器的標準介面和命令。 JTAG定義了四個引腳介面(以及一個額外的可選引腳TRST)


開發者可以使用這些引腳與微控制器上實現的TAP(測試訪問埠)進行通信。從安全形度來看,識別JTAG埠並與其連接允許攻擊者提取固件,對邏輯進行逆向工程,並在設備上種植惡意固件。通過JTAG提取固件的技術在固件提取篇有具體例子。


3.I2C


內部集成電路是一種短距離通信協議,用於同一板上晶元之間的通信。

I2C的一個用例是EEPROM晶元,它連接到微控制器I2C引腳,通常存儲數據或代碼。 典型的攻擊包括篡改數據,提取敏感信息,破壞數據等。我們分析EEPROM晶元上的靜態數據,並通過嗅探I2C通信來執行運行時分析,可以了解安全隱患。



4.SPI


串列外設介面也是一種短距離通信協議,用於同一板上晶元之間的通信。與I2C相比,具有更高的吞吐量。


它用於與各種外圍設備通信。 快閃記憶體和EEPROM晶元也使用SPI。 測試和分析的方法與I2C類似。



0x05.固件提取篇


常用的提取固件的方法有這麼幾種。


最簡單的方法就是去官網下載,或者找技術售後索要,如果有的話網上一般都是可以找到的。


第二簡單的簡單的方法就是在OTA升級時進行抓包,抓取並分析通信的流量,得出升級固件的具體流程,如果可以從通信過程中直接獲取升級固件的目的地址,直接去下載就可以,或者可以模擬固件升級的過程,然後獲取固件。一般來講,ftp、http等方式進行固件升級的產品比較容易使用此種攻擊手段。



除去以上兩種,接下來的方法是硬體安全研究人員常做的。


從編程器讀取。分別連接晶元引腳和編程器,直接讀取即可;有時候可能需要把晶元拆焊下來,通過燒錄座編程器讀取。



利用調試介面導出。通過UART串口,讀取uboot啟動信息,串口輸出中可以發現具體型號,然後使用編程器讀取並保存,就獲取到固件了。



一些情況下,也會通過JTAG/SWD介面進行讀取。將提取出的晶元固件在燒錄座上,將模擬器與燒錄座的JTAG介面連接,插入計算機,打開配套的客戶端進行讀取。



獲取到固件後,之後的技術涉及偏向於軟體層面,這兒不再展開。


*本文原創作者:Yale1024,本文屬於FreeBuf原創獎勵計劃,未經許可禁止轉載



喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

從PowerShell內存轉儲中提取執行的腳本內容
「三英戰呂布」,看我如何抓出那些流氓APP

TAG:FreeBuf |