目前,IoT 技術(shù)還處于起步階段,與金融、電子商務(wù)等其他行業(yè)相比,安全性尚未得到充分理解和明確定義。開發(fā)一款I(lǐng)oT 產(chǎn)品時,不論是像可穿戴設(shè)備這樣的小型產(chǎn)品,還是像油田傳感器網(wǎng)絡(luò)或全球配送作業(yè)這樣的大型IoT部署,從一開始就必須考慮到安全問題。要了解安全的問題所在,就需要了解IoT 設(shè)備的攻擊方法,通過研究攻擊方法提高IoT產(chǎn)品的防御能力。
作為國內(nèi)最早從事智能硬件安全攻防研究的團(tuán)隊,基于長期的智能硬件安全攻防實踐,360攻防實驗室對智能硬件設(shè)備的安全隱患進(jìn)行了系統(tǒng)的分析和梳理,總結(jié)了智能硬件設(shè)備存在的八大安全隱患。
以下內(nèi)容已經(jīng)收錄入即將出版的《智能硬件安全》一書,這將是國內(nèi)第一本系統(tǒng)介紹物聯(lián)網(wǎng)安全的專業(yè)書籍,該書的核心觀點是通過“以攻促防、以防抑攻”的安全理念,全面提高IoT產(chǎn)品自身的安全防御能力。
以下是智能硬件設(shè)備八大安全隱患分析:
1. 數(shù)據(jù)存儲不安全
毫無疑問,移動設(shè)備用戶面臨的最大風(fēng)險是設(shè)備丟失或被盜。任何撿到或偷盜設(shè)備的人都能得到存儲在設(shè)備上的信息。這很大程度上依賴設(shè)備上的應(yīng)用為存儲的數(shù)據(jù)提供何種保護(hù)。很多智能硬件手機(jī)客戶端的開發(fā)者對于智能硬件的配置信息和控制信息都沒有選擇可靠的存儲方式。可以通過調(diào)試接口直接讀取到明文或者直接輸出至logcat 中。用戶身份認(rèn)證憑證、會話令牌等,可以安全地存儲在設(shè)備的信任域內(nèi),通過對移動設(shè)備的破解,即可達(dá)到劫持控制的目的。
2. 服務(wù)端控制措施部署不當(dāng)
現(xiàn)有智能硬件的安全策略由于要降低對于服務(wù)端的性能損耗,很多情況下是把安全的過規(guī)則部署在客戶端,沒有對所有客戶端輸入數(shù)據(jù)的輸入檢查和標(biāo)準(zhǔn)化。使用正則表達(dá)式和其他機(jī)制來確保只有允許的數(shù)據(jù)能進(jìn)入客戶端應(yīng)用程序。在設(shè)計時并沒有實現(xiàn)讓移動端和服務(wù)端支持的一套共同的安全需求,可以通過將數(shù)據(jù)參數(shù)直接提交至云端,客戶端APK 對參數(shù)過濾的限制,達(dá)到破解設(shè)備功能的目的。
3. 傳輸過程中沒有加密
在智能硬件的使用過程中,存在連接開放Wi-Fi 網(wǎng)絡(luò)的情況,故應(yīng)設(shè)計在此場景下的防護(hù)措施。我們列一個清單,確保所有清單內(nèi)的應(yīng)用數(shù)據(jù)在傳輸過程中得到保護(hù)(保護(hù)要確保機(jī)密性和完整性)。清單中應(yīng)包括身份認(rèn)證令牌、會話令牌和應(yīng)用程序數(shù)據(jù)。確保傳輸和接收所有清單數(shù)據(jù)時使用SSL/TLS 加密(See CFNetwork Programming Guide)。確保你的應(yīng)用程序只接受經(jīng)過驗證的SSL 證書(CA 鏈驗證在測試環(huán)境是禁用的;確保你的應(yīng)用程序在發(fā)布前已經(jīng)刪除這類測試代碼)。通過動態(tài)測試來驗證所有的清單數(shù)據(jù)在應(yīng)用程序的操作中都得到充分保護(hù)。通過動態(tài)測試,確保偽造、自簽名等方式生成的證書在任何情況下都不被應(yīng)用程序接受,如下圖所示。
4. 手機(jī)客戶端的注入
手機(jī)客戶端和Web 應(yīng)用程序的輸入驗證和輸出過濾應(yīng)該遵循同樣的規(guī)則。要標(biāo)準(zhǔn)化轉(zhuǎn)換和積極驗證所有的輸入數(shù)據(jù)。即使對于本地SQLite/SQLcipher 的查詢調(diào)用,也使用參數(shù)化查詢。當(dāng)使用URL scheme 時,要格外注意驗證和接收輸入,因為設(shè)備上的任何一個應(yīng)用程序都可以調(diào)用URL scheme。當(dāng)開發(fā)一個Web/移動端混合的應(yīng)用時,保證本地/local 的權(quán)限是滿足其運行要求的最低權(quán)限。還有就是控制所有UIWebView 的內(nèi)容和頁面,防止用戶訪問任意的、不可信的網(wǎng)絡(luò)內(nèi)容。
5. 身份認(rèn)證措施不當(dāng)
授權(quán)和身份認(rèn)證大部分是由服務(wù)端進(jìn)行控制的,服務(wù)端會存在用戶安全校驗簡單、設(shè)備識別碼規(guī)律可循、設(shè)備間授權(quán)不嚴(yán)等安全問題。目前可以在分析出設(shè)備身份認(rèn)證標(biāo)識規(guī)律的情況下,如MAC 地址、SN 號等都可以通過猜測、枚舉的方式得到,從而批量控制大量設(shè)備,如下圖所示。這個漏洞的危害在智能硬件里是最大的,因為它能夠影響到全部的智能硬件。
6. 密鑰保護(hù)措施不當(dāng)
有些IoT 產(chǎn)品在開發(fā)過程中考慮到了安全加密,比如使用AES128 位加密做為傳輸加密的內(nèi)容,使用MD5 加密用戶密碼。在對于對稱性加密方式的處理過程中,密鑰的保存方式是至關(guān)重要的。在IoT 解決方案中,手機(jī)客戶端發(fā)起的請求需要對數(shù)據(jù)內(nèi)容進(jìn)行加密,也就是說,手機(jī)客戶端內(nèi)需要有AES 的密鑰。如果對于密鑰存放的方式不當(dāng),可以輕而易舉地將數(shù)據(jù)還原成明文進(jìn)行逆向分析,從而進(jìn)行進(jìn)一步的攻擊。在對大量的IoT 設(shè)備進(jìn)行安全研究后發(fā)現(xiàn),設(shè)備基本上都會把AES 的密鑰存放在手機(jī)客戶端中,有的做得很簡單,寫在了一個加密函數(shù)里。有的做得很深,放在了一個Lib 庫中。但這些只是提高了一定的技術(shù)門檻而已,不是解決安全問題的辦法,如下圖所示。
7. 會話處理不當(dāng)
有很多智能設(shè)備都會由于會話管理措施不當(dāng),造成能夠通過會話劫持攻擊,直接控制設(shè)備,達(dá)到設(shè)備被破解的一種程度,所以說永遠(yuǎn)不要使用設(shè)備唯一標(biāo)示符(如UDID、IP、MAC 地址、IEME)來標(biāo)示一個會話。保證令牌在設(shè)備丟失/被盜取、會話被截獲時可以被迅速重置。務(wù)必保護(hù)好認(rèn)證令牌的機(jī)密性和完整性(例如,只使用SSL/TLS 來傳輸數(shù)據(jù))。使用可信任的服務(wù)來生成會話。
8. 敏感數(shù)據(jù)泄露
對于智能設(shè)備的安全研究,可以通過智能設(shè)備所泄露出來的數(shù)據(jù),進(jìn)行進(jìn)一步利用,從而獲得控制權(quán)限。所以必須保證安全的東西都不放在移動設(shè)備上;最好將它們(如算法、專有/機(jī)密信息)存儲在服務(wù)器端。如果安全信息必須存儲在移動設(shè)備上,盡量將它們保存在進(jìn)程內(nèi)存中。如果一定要放在設(shè)備存儲上,就要做好保護(hù)。不要硬編碼或簡單地存儲密碼、會話令牌等機(jī)密數(shù)據(jù)。在發(fā)布前,清理被編譯進(jìn)二進(jìn)制數(shù)據(jù)中的敏感信息,因為編譯后的可執(zhí)行文件仍然可以被逆向破解物。