上週結束的Hackpwn上,黑客們腦洞大開,破解了比亞迪汽車、小米手環、樂小寶、長虹電視、TCL洗衣機和九陽豆漿機等一系列最新的智能硬件,據黑客介紹,TCL是一家把家門「砌死」的企業,因爲獲得了將要被現場破解的消息,在HackPwn前一天,TCL就已經關閉了雲服務器,在黑客童鞋以消費者身份苦苦哀求了一夜之後,終於恢復服務,可是在Hackpwn當天又關閉了,又關閉了……python
TCL的洗衣機在雲端能夠相互識別。但正常來講,一臺洗衣機是沒法給另外一臺洗衣機下命令的。不過,黑客團隊發現了一招制敵妙計,那就是:把命令中禁止發送的字符換成小寫字母,換成小寫字母,換成小寫字母。(重要的事情說三遍)安全
沒錯,繞過系統控制就是這麼簡單。經過此種方法能夠經過模仿雲端的控制器「京東微聯」向任何一臺洗衣機下達指令,指令能夠精確到溫度和轉速。服務器
因此,當你回家發現洗衣機已經以90度的設定溫度,以1200轉每分鐘的轉速轉了一天的時候,請不要太驚訝哦,你的洗衣機只不過是「認賊做父」了。網絡
經過京東微聯手機APP,咱們能夠查看洗衣機的狀態,能夠選擇多種洗衣模式,調整洗衣機的轉速、洗衣的溫度等參數。能夠實如今任何地點只要洗衣機能接入互聯網均可以控制。app
對於洗衣機的攻擊點分析框架
使用TCP智能洗衣機時須要對洗衣機進行配置,纔可以接入網絡,從而使用手機客戶端進行遠程控制。TCL洗衣機使用的是」京東微聯」物聯網平臺,京東微聯是京東旗下針對智能硬件產品專門推出的一項雲服務,致力於打造一個多方雙贏的智能硬件生態鏈。ide
咱們能夠經過簡單的配置將設備經過wifi接入互聯網,配置成功後就可使用京東微聯手機客戶端來反向控制洗衣機,達到洗衣機設備可以經過手機遠程控制的功能,這也就是爲何說這個型號的洗衣機是」智能洗衣機」的緣由了。工具
經過對洗衣機上線流程的配置過程當中,能夠了解到手機下發控制指令的整個流程以下圖:測試
1.手機首先使用京東帳號進行認證。 2.認證成功後添加了設備和帳號的綁定關係。 3.手機下發設備控制指令給京東智能雲。 4.京東智能雲在把控制指令轉發給第三方平臺。 5.第三方平臺將指令轉發到設備,由設備來執行。 6.設備執行成功後將狀態返回給第三方平臺,第三方平臺在轉發至京東智能雲,反饋到手機APP中。
經過分析驗證,在京東智能雲和手機之間。都具有高強度的加密傳輸和身份認證的方案,在進行分析過程當中,能夠發現京東智能雲在安全方面仍是考慮的比較多的。在短期要攻破京東智能雲平臺比較難。因此我把攻擊點定位在第三方平臺和設備之間。編碼
模糊測試
首先使用360wifi將洗衣機接入到網絡中,使用「京東微聯」手機APP觸發對洗衣機的控制,同時對無線網卡進行抓包分析以下:
洗衣機和第三方平臺之間使用的是XMPP協議實現會話的控制和長鏈接保持在線的。XMPP通常是用來實現聊天工具的一個框架協議。由於智能硬件須要保持長時間在線的會話而且要接收消息,因此一些廠商會改用一些聊天工具來實現。圖中標記的數據內容是洗衣機做爲客戶端登錄成功的狀態。使用的登錄數據是用base64進行編碼的。
將登錄數據進行解碼後發現第一個字段是設備的ID,第二個字段是密碼。也就是說洗衣機使用的是這段用戶名和密碼,登錄雲服務器。而後等待京東雲平臺下發控制指令的。
經過分析數據包能夠發現洗衣機主要使用TCP、UDP、XMPP/XML三種協議,經過對數據包內容觀察,發現第三方平臺到洗衣機之間的數據包沒有進行傳輸加密,能夠清晰的看到控制指令的格式和內容。
登錄測試
爲了更直觀的測試漏洞,選用了一款帶有XMPP協議聊天功能的軟件。來模擬洗衣機登錄。
使用從數據包分析出來的用戶名和密碼,登錄第三方雲服務器。發現成功的用洗衣機帳號登錄成功。
獲取控制指令
模擬洗衣機帳號登錄成功後,模擬在線的洗衣機接收控制指令。這時使用京東微聯手機APP給在線的洗衣機發送一些控制指令。
smartjd@openfire-server:<msg:msgid="SetMessage"type="Control"seq="null"><SetMessage><TurnOn>on</TurnOn></SetMessage></msg>
目前已經成功的僞造洗衣機接收到了,京東智能雲發送的開啓洗衣機的控制指令。因爲目前不知道洗衣機給京東微聯響應的什麼樣的數據包,因此這時將聊天軟件關閉,讓洗衣機上線,發送啓動指令。而後在手機APP客戶端中能夠進入下發控制指令的界面。而後在斷開洗衣機鏈接,使用聊天軟件繼續獲取其它的控制指令。
僞造洗衣機控制目標洗衣機
在知道了控制指令、登錄的ID和密碼的狀況下。一開始是想使用smartjd這個帳號進行登錄,可是這個帳號只有京東智能雲裏面會保存。因此無奈的狀況下發現了一個意外驚喜。登錄洗衣機的ID是一設備的MAC地址+DEVICE爲標識的。只要修改一下MAC就能夠登陸到另一臺洗衣機設備。給目標洗衣機設備發送控制指令。
使用修改後的ID和默認的口令。成功的登錄了另外的一臺洗衣機。這時嘗試給設備發送控制指令,發現目標設備沒有任何響應。
繞過控制指令限制
經過了無數次橫向測試,對比測試,各類無厘頭的測試以後。懷疑是服務器對發送指令進行了過濾,在對標籤和參數進行枚舉的過程當中發現服務器過濾了」Control」參數。而後機智的把」Control」改成」control」從新發送,奇蹟出現了。
成功的使用另一個洗衣機的帳號,給目標洗衣機發送了控制指令。那麼就說明目前已經對洗衣機有徹底的控制權限。
再使用前面得到的控制指令,控制洗衣機以800的轉速開始甩幹。
爲了驗證影響範圍,這裏寫了一個python腳本去遍歷MAC地址的在線狀態,能夠發現不少在線洗衣機的MAC地址。
利用場景
1.經過MAC地址+DEVIVE和默認的密碼登錄任意一臺洗衣機。
2.經過事先抓取好的控制指令,來制定目標洗衣機的工做內容。
3.經過XMPP軟件給目標洗衣機發送控制指令。
問題總結
1.洗衣機終端和第三方雲平臺之間使用的XMPP協議傳輸內容未進行加密。
2.使用base64編碼洗衣機的ID和密碼。
3.洗衣機與第三方平臺認證時使用的是MAC+deivce字段做爲用戶名進行認證標識,這樣容易可以經過枚舉MAC地址遍歷出更多的洗衣機。
4.使用相同的密鑰進行洗衣機終端端的認證。
5.洗衣機終端與洗衣機終端通訊未進行隔離。
6.未對京東智能雲平臺下發的控制會話內容爲進行過濾,致使任意洗衣機均可以發送控制指令。
TCL智能洗衣機最主要的問題時可以繞過」京東微聯」平臺的統一管控,再利用傳輸未加密、使用單一因素做爲身份鑑權標識,還有XMPP會話登錄機制等特性,最終實現能夠經過任意帳號橫向控制TCL全部的智能洗衣機。在國內主流的一些智能家居設備,接入到大的IOT平臺中也有可能存在一樣的問題。
安全建議
1.使用具有必定強度的加密方式加密對XMPP協議傳輸的內容。
2.身份認證過程中使用隨機數或者無規律的串號進行驗證,要求每一個洗衣機有獨立且不相同的密碼。
3.對洗衣機和洗衣機直接的通訊進行隔離。
4.使用訪問控制過濾京東微聯的控制會話請求,只容許京東微聯帳戶發送控制指令。