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