天天看點

分享一些物聯網裝置安全測試方法

作者:沃愛單片機

#大有學問#

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

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

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

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

分享一些物聯網裝置安全測試方法

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

工具篇

推薦用樹莓派吧。很多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接口連接配接,插入計算機,打開配套的用戶端進行讀取。

分享一些物聯網裝置安全測試方法

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

繼續閱讀