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