針對(duì)聯(lián)網(wǎng)智能燈泡的安全性分析
前言 這篇博客的主題是關(guān)于LIFX燈泡的,LIFX是一款智能燈泡,它能夠用WIFI控制,節(jié)能,多顏色顯示,可以運(yùn)用Android或蘋(píng)果iOS手機(jī)控制。我們之所以選擇對(duì)這款產(chǎn)品進(jìn)行研究,主要是因?yàn)樗\(yùn)用了新興的無(wú)線(xiàn)網(wǎng)絡(luò)協(xié)議,投入市場(chǎng)的方式以及先進(jìn)的技術(shù)深深的吸引了我們。 2012年9月,LIFX項(xiàng)目開(kāi)始于Kickstarter眾籌平臺(tái),該產(chǎn)品剛開(kāi)始在眾籌平臺(tái)上線(xiàn)就受到了投資者們的青睞,其募集到的資金是其原始目標(biāo)資金的13倍以上。 LIFX燈泡通常需要連接到無(wú)線(xiàn)WiFi網(wǎng)絡(luò),以便運(yùn)用智能手機(jī)使用程序能夠?qū)襞葸M(jìn)行控制。在有多個(gè)燈泡可用的情況下,只有一個(gè)燈泡將連接到網(wǎng)絡(luò)。這個(gè)“主”燈泡從智能手機(jī)使用程序上接收命令,并通過(guò)802.15.4 6LoWPAN無(wú)線(xiàn)網(wǎng)絡(luò)將其廣播到其他燈泡。 無(wú)線(xiàn)WiFi和802.15.4 6LoWPAN mesh網(wǎng)絡(luò) 在主燈泡關(guān)閉或與WIFI網(wǎng)絡(luò)斷開(kāi)連接的情況下,系統(tǒng)會(huì)從剩余燈泡中重新選擇一個(gè)燈泡作為主設(shè)備,并使其連接到無(wú)線(xiàn)WiFi網(wǎng)絡(luò),新主設(shè)備繼續(xù)將命令發(fā)送到其他燈泡。這種一次只需要連接一個(gè)燈泡到無(wú)線(xiàn)WiFi上的架構(gòu)具有許多優(yōu)點(diǎn),其中包括剩余燈泡在不亮?xí)r以低功率運(yùn)行,還有就是可以使燈泡網(wǎng)絡(luò)的可用范圍遠(yuǎn)遠(yuǎn)超過(guò)無(wú)線(xiàn)WiFi網(wǎng)絡(luò)的覆蓋范圍,這樣可以減少無(wú)線(xiàn)WiFi網(wǎng)絡(luò)的擁塞。 不用說(shuō),LIFX燈泡運(yùn)用的新興無(wú)線(xiàn)通信協(xié)議,mesh網(wǎng)絡(luò)結(jié)構(gòu)以及主/從通信方式深深吸進(jìn)了“黑客”的注意力,因此我們拿起了幾個(gè)燈泡并開(kāi)始了我們的研究之旅。該博客針對(duì)LIFX固件1.1版本進(jìn)行了研究和分析,并且自從向LIFX報(bào)告了研究結(jié)果之后,該公司已經(jīng)對(duì)固件1.1版本進(jìn)行了升級(jí),現(xiàn)在1.2版本已經(jīng)可供下載了。 開(kāi)啟攻擊之旅 LIFX燈泡網(wǎng)絡(luò)中有以下三個(gè)核心通信組件: 1.智能手機(jī)到燈泡的通信2.燈泡無(wú)線(xiàn)WiFi通信3.燈泡網(wǎng)絡(luò)通信 分析初始階段碰到的最大難題是新技術(shù)和理論知識(shí)帶給我們的挑戰(zhàn),因此我們準(zhǔn)備從燈泡內(nèi)的802.15.4 6LoWPAN無(wú)線(xiàn)mesh網(wǎng)絡(luò)開(kāi)始著手,以查看其是否存在漏洞。具體來(lái)說(shuō),我們決定研究LIFX燈泡是如何在6LoWPAN mesh網(wǎng)絡(luò)之間共享無(wú)線(xiàn)WiFi網(wǎng)絡(luò)憑證的。 6LoWPAN是一種基于IEEE 802.15.4構(gòu)建的無(wú)線(xiàn)通信規(guī)范,與Zigbee運(yùn)用的基本標(biāo)準(zhǔn)相同,該規(guī)范允許通過(guò)低功率的Personal Area Networks (PAN)轉(zhuǎn)發(fā)IPv6數(shù)據(jù)包。為了監(jiān)控和注入6LoWPAN流量,我們需要一個(gè)基于802.15.4規(guī)范的外圍設(shè)備。在此任務(wù)中我們選擇的設(shè)備是安裝了Contiki 6LoWPAN固件鏡像的ATMEL AVR Raven ,該設(shè)備提供了一個(gè)標(biāo)準(zhǔn)的網(wǎng)絡(luò)接口,通過(guò)該網(wǎng)絡(luò)接口我們可以監(jiān)控和注入網(wǎng)絡(luò)流量到LIFX mesh網(wǎng)絡(luò)。 協(xié)議分析 通過(guò)上述網(wǎng)絡(luò)接口,我們可以監(jiān)控并將網(wǎng)絡(luò)流量注入到LIFX mesh網(wǎng)絡(luò)中。通過(guò)觀(guān)察我們發(fā)現(xiàn)LIFX網(wǎng)絡(luò)在很大程度上是未加密的,因此我們可以輕松地解析其網(wǎng)絡(luò)協(xié)議,并構(gòu)造消息來(lái)控制燈泡并重放任意數(shù)據(jù)包的有效載荷。 通過(guò)在LIFX網(wǎng)絡(luò)中添加新燈泡以及同時(shí)監(jiān)控從mesh網(wǎng)絡(luò)中捕獲的數(shù)據(jù)包,我們能夠識(shí)別有關(guān)無(wú)線(xiàn)WiFi網(wǎng)絡(luò)憑證的特定數(shù)據(jù)包。整個(gè)新燈泡的加入過(guò)程包括主燈泡在網(wǎng)絡(luò)上廣播有一個(gè)新燈泡加入進(jìn)網(wǎng)絡(luò);之后新燈泡對(duì)主燈泡的廣播作出響應(yīng),并請(qǐng)求傳輸無(wú)線(xiàn)WiFi憑證細(xì)節(jié);然后主燈泡通過(guò)mesh網(wǎng)絡(luò)廣播加密的無(wú)線(xiàn)WiFi憑證細(xì)節(jié),并將新的燈泡添加到LIFX智能手機(jī)使用程序中的可用燈泡列表中。 通過(guò)Wireshark 6LoWPAN捕獲數(shù)據(jù)包 通過(guò)對(duì)捕獲到的數(shù)據(jù)包進(jìn)行分析我們發(fā)現(xiàn),無(wú)線(xiàn)WiFi細(xì)節(jié)(包括憑證)是被加密傳輸?shù)?,因此我們可以在mesh網(wǎng)絡(luò)中注入數(shù)據(jù)包,以獲得無(wú)線(xiàn)WiFi細(xì)節(jié)。此外,獲得無(wú)線(xiàn)WiFi詳細(xì)信息的過(guò)程不會(huì)添加任何新設(shè)備或在LIFX智能手機(jī)使用程序中引發(fā)任何警報(bào)。現(xiàn)在我們可以任意地從mesh網(wǎng)絡(luò)獲得無(wú)線(xiàn)WiFi憑證,但卻沒(méi)辦法來(lái)解密它們。為了進(jìn)一步的攻擊,我們需要對(duì)其運(yùn)用的加密機(jī)制進(jìn)行分析。 獲得固件 我們首先從分析LIFX設(shè)備的固件開(kāi)始來(lái)嘗試去pojie其加密機(jī)制,一般情況下,我們只需要從供應(yīng)商網(wǎng)站下載固件,脫殼,解密或以其他方式將其更改為我們熟悉的格式就可以了。然而,在研究時(shí)我們發(fā)現(xiàn),由于LIFX設(shè)備剛投入市場(chǎng),因此供應(yīng)商還沒(méi)有向公眾發(fā)布可以分析的固件。在這種情況下,我們只能自己獲得LIFX設(shè)備的固件。 為了從設(shè)備中提取固件,我們首先需要獲得對(duì)內(nèi)嵌的微控制器的物理訪(fǎng)問(wèn),這是一個(gè)非常講究技術(shù)的獲得過(guò)程。對(duì)于外行人來(lái)說(shuō),似乎只不過(guò)是用錘子敲擊它,直到能夠看到LIFX設(shè)備的內(nèi)部結(jié)構(gòu)。一旦獲得內(nèi)嵌的微控制器,我們就可以訪(fǎng)問(wèn)Printed Circuit Board (PCB)了,該設(shè)備如下圖所示: 提取LIFX PCB 通過(guò)分析獲得到PCB我們發(fā)現(xiàn),該器件主要由兩個(gè)片上系統(tǒng)(SoC)集成電路(IC)組成:一個(gè)是德州儀器CC2538,其主要負(fù)責(zé)6LoWPAN網(wǎng)絡(luò)設(shè)備的通信,另一個(gè)是STMicroelectronics STM32F205ZG,其主要負(fù)責(zé)無(wú)線(xiàn)WiFi端的通信。這兩款芯片均基于A(yíng)RM Cortex-M3處理器。進(jìn)一步的分析發(fā)現(xiàn),每個(gè)芯片上的JTAG引腳功能齊全。JTAG是Joint Test Action Group的縮寫(xiě),是IEEE 1149.1標(biāo)準(zhǔn)的常用名稱(chēng),它描述了用于測(cè)驗(yàn)微控制器缺陷的一種協(xié)議,并通過(guò)Test Action Port接口調(diào)試硬件。 一旦確定了每個(gè)芯片正確的JTAG引腳以及準(zhǔn)備好連接到芯片的JTAG接口,下一步要做的事情是手動(dòng)跟蹤引腳,分析以及自動(dòng)探測(cè)。為了能夠控制發(fā)送到芯片的JTAG命令,我們需要硬件和軟件組合起來(lái)運(yùn)用。在這種情況下運(yùn)用的硬件是開(kāi)源的BusBlaster JTAG調(diào)試器,它與開(kāi)源的OpenOCD調(diào)試器配合運(yùn)用。在配置好硬件和軟件之后,我們可以向芯片發(fā)出JTAG命令了。 BusBlaster JTAG調(diào)試器 此時(shí),我們可以從每個(gè)芯片中快速的轉(zhuǎn)儲(chǔ)閃存,并啟動(dòng)對(duì)固件的逆向分析工作。 逆向分析固件 現(xiàn)在我們擁有兩個(gè)二進(jìn)制的blob固件,我們需要識(shí)別哪個(gè)固件負(fù)責(zé)儲(chǔ)存和加密無(wú)線(xiàn)WiFi憑證。通過(guò)映像上的“字符串”我們確定WIFI憑證儲(chǔ)存在LIFX LWM-01-A芯片的固件映像中。 將固件映像加載到IDA Pro中,我們可以通過(guò)查找常見(jiàn)的加密常量(S-Boxes,F(xiàn)orward and Reverse Tables和Initialization Constant)來(lái)識(shí)別加密代碼,通過(guò)該方式我們確定芯片中運(yùn)用的是AES加密算法。由于A(yíng)ES是一種對(duì)稱(chēng)加密算法,因此加密密鑰和解密密鑰是相同的。通過(guò)分析我們發(fā)現(xiàn)在LIFX的規(guī)劃中,每個(gè)設(shè)備都會(huì)發(fā)出一個(gè)恒定的全局密鑰。因此如果我們可以從一個(gè)設(shè)備中獲得密鑰,那么我們就可以運(yùn)用相同的密鑰來(lái)解密所有其他設(shè)備發(fā)送的消息。在這種情況下,密鑰可用于解密從任何LIFX燈泡發(fā)送的加密消息。由于加密常量也可用于識(shí)別加密和解密程序的匯編代碼,因此在A(yíng)ES算法開(kāi)源實(shí)現(xiàn)的幫助下,我們可以通過(guò)逆向分析之前定位到的加密函數(shù)來(lái)提取加密密鑰,初始化向量以及塊模式。 IDA Pro拆解固件加密代碼 最后一步是通過(guò)運(yùn)用提取到的密鑰解密從網(wǎng)絡(luò)中嗅探到的無(wú)線(xiàn)WiFi憑證來(lái)證明提取的加密密鑰是否正確。 組合攻擊 掌握了加密算法,密鑰,初始化向量以及對(duì)mesh網(wǎng)絡(luò)協(xié)議的了解,我們可以將數(shù)據(jù)包注入到mesh網(wǎng)絡(luò)中,捕獲無(wú)線(xiàn)WiFi細(xì)節(jié)并解密憑證,所有這一切都不會(huì)引起LIFX設(shè)備的任何身份驗(yàn)證或警報(bào)。因此我們成功了! 應(yīng)該注意的是,由于這種攻擊是針對(duì)802.15.4 6LoWPAN無(wú)線(xiàn)mesh網(wǎng)絡(luò)進(jìn)行的攻擊,所以攻擊者需要在一個(gè)易受攻擊的LIFX燈泡的無(wú)線(xiàn)覆蓋范圍內(nèi)(30米范圍內(nèi))進(jìn)行攻擊,因此這嚴(yán)重限制了大規(guī)模漏洞利用的實(shí)用性。 修復(fù)建議 在發(fā)現(xiàn)該漏洞后我們及時(shí)通知了LIFX公司,并一起協(xié)助該公司完成了漏洞的修復(fù)工作,以及其他進(jìn)一步的安全性改進(jìn)措施?,F(xiàn)在,新固件運(yùn)用從無(wú)線(xiàn)WiFi憑證導(dǎo)出的加密密鑰來(lái)加密所有的6LoWPAN流量,并包括了用于保證新燈泡能夠安全加入到WIFI網(wǎng)絡(luò)中的安全功能。? 當(dāng)然,任何物聯(lián)網(wǎng)設(shè)備,無(wú)論是手機(jī),筆記本電腦,還是燈泡,黑客總是有機(jī)會(huì)將其劫持,后續(xù)我們將會(huì)在博客中介紹更多有關(guān)劫持物聯(lián)網(wǎng)設(shè)備的技術(shù)文章。