物聯卡()訊:CITL 大規模模糊測試項目的新測試結果顯示了現實情況有多糟糕——以及物聯網設備制造商如何通過一天的工程作業從根本上提高二進制安全性。
模糊測試 (fuzz testing) 是一種安全測試方法,它介于完全的手工測試和完全的自動化測試之間。為什么是介于那兩者之間?首先完全的手工測試即是滲透測試,測試人員可以模擬黑客惡意進入系統、查找漏洞,這對測試人員的要求比較高。能力強的測試人員可以發現比較多或者高質量的安全性問題,但是如果測試人員的能力不夠,可能就不能找到足夠多、威脅大的安全漏洞。所有滲透測試對人員能力的依賴性強,成本高,難以大規模的實施。
但是想用完全的自動化來實現滲透測試也不可行,同一套測試用例和方法不可能不加修改的就用在不同的產品上,因為各個產品的需求、實現、功能等等都不一樣。測試過程中還需要測試人員的介入來分析結果、判斷漏洞等等。那么,這種情況下就需要引入模糊測試。
打開 “編譯時” (compile-time) 安全功能很容易,那么為什么沒有更多的物聯網設備制造商這樣做呢?
在構建物聯網固件二進制文件時添加安全功能標志可以顯著提高整個物聯網設備的安全性。但是,根據 CITL 大規模模糊測試項目的研究顯示,幾乎沒有人這樣做,問題正變得越來越嚴重,而不是更好。
這都是一些非常基本且簡單的安全實踐……根本就找不到充分的理由不去這么做,但現實是,大部分物聯網設備制造商確實沒有這樣做。
Cyber ITL 是一個非盈利的消費者報告式安全實驗室,迄今為止已經對過去 15 年發布的 300 多萬個物聯網固件二進制文件進行了模糊測試,但結果卻令人失望。
在談及大部分物聯網設備供應商并未打開基本的 “編譯時” 安全功能時,CITL 首席科學家 Sarah Zatko 感嘆道:
這很容易做到,我也想不出有什么理由不去這么做,但結果就是他們并未這么做!我認為他們應該不是故意忽視這一點的,因為看起來不像某個人有意識地決定排除這些安全特征,而更像是一種 ‘良性/無意的’ 忽視,可能是某人認為這并不屬于他們的工作范疇。
post-build檢查單
物聯網供應商可以輕而易舉地打開這些 “編譯時” 安全功能,并且檢查它們作為其發布管理流程的一部分。良好的構建衛生包括檢查是否存在更新版本的編譯器,并確保啟用基本安全功能,如 ASLR,DEP 以及堆棧防護。雖然這些安全緩解措施都并非 “靈丹妙藥”,但它們仍然是物聯網世界的 “安全氣囊” 和 “安全帶”。也許它們無法阻止崩潰,但它們在關鍵時刻可能會挽救你的生命。
而要完成這些操作可能只需要幾個小時的工程作業,最多不會超過一天的時間。如果由于某種原因存在一些特殊的操作系統和芯片組合的奇怪邊緣現象,那么問題可能會相對麻煩復雜一些,但大多數情況下應該都還是非常簡單易實現的。
由于在我們繼續部署不安全的物聯網設備時,不良構建衛生的后果會變得更為復雜,因此物聯網供應商需要開始檢查他們正在進行的 post-build 質量檢查測試,或者他們可能會發現自己是被強制規定需要這么做的。
鑒于自由市場到目前為止未能鼓勵供應商采取這種負責任的行為,人們不禁會質疑,在這種不良的監管環境下,何時會引爆物聯網安全危機?
物聯網安全:自由市場還是監管?
到目前為止,自由市場未能制定有效地激勵措施,以鼓勵供應商提供強有力的網絡安全產品,但 Zatko 希望大型買家可以在其中發揮作用。
自由市場本身沒有做太多努力。15 年來情況一直沒有發生變化……如果做出大規模采購決策的人開始詢問有關構建安全性的問題,那么可能會影響供應商的實踐。而無疑,企業組織和政府機構正是物聯網產品的大買家。
買家通常會在簽訂新協議之前提供他們所要求的安全問題清單。在該清單中囊括構建安全問題,將迫使供應商進行實際檢查,并且也能夠讓供應商明白大型買家是關心構建安全問題的。
物聯網固件安全問題
不過,CITL 的研究也發現了一些驚喜——物聯網供應商應該知道的級聯故障點。編譯器和固件工具鏈(如buildroot)是關鍵的上游依賴項,可以更好地幫助開發人員在編譯時標記安全問題。此外,MIPS 仍然是一個問題,且需要特殊處理。
MIPS 的意思 “無內部互鎖流水級的微處理器”,其機制是盡量利用軟件辦法避免流水線中的數據相關問題。MIPS 采用精簡指令系統計算結構 (RISC) 來設計芯片。
MIPS 架構優勢:
(1)支持 64Bit 指令和操作;
(2)MIPS 有專門的除法器,可以執行除法指令;
(3)MIPS 內核寄存器比 ARM 多一倍,也就是說在同樣性能下,MIPS 功耗比 ARM 更低,同樣功耗下性能比 ARM 更高;
(4)MIPS 指令比 ARM 多一些,執行部分運算時更靈活。
MIPS 架構缺點:
(1)MIPS 內存地址起始有問題,這就導致 MIPS 在內存和 cache 的支持方面受限,單內核無法承受高容量內存配置;
(2)MIPS 技術大發展方向是并行線程,從核心移動設備的發展趨勢來看,并不是未來主流;
(3)MIPS 雖然結構更簡單,但采用順序單/雙發射,執行指令流水線周期遠不如 ARM 高效;
(4)商業化進程落后,至今還停留在高清盒子打印機之類的產品上;
(5)軟件平臺落后,應用軟件少。
如今,很多人錯誤地以為 MISP 正在步入淘汰行列,但該硬件架構已經在物聯網領域卷土重來,且事實證明,該架構正是 CITL 在大規模模糊測試中遇到的最常見的架構。他們發現,問題在于,從安全的角度來看,并非每個架構都是相同的。
許多人認為,如果你采用相同的源代碼并將其轉移到不同的芯片或不同的架構中,其仍然能發揮相同的安全特性和功能。但是事實并非如此,就安全方面而言,必須要考慮整體情況。
事實證明,為 Linux MIPS 版本啟用 ASLR 和 DEP 編譯時功能無法正常工作,消除、部署和完全修復該問題可能需要花費數年的時間。十多年來,Linux MIPS 二進制文件一直很容易被經典的堆棧溢出攻擊利用,而且根據 CITL 對工具鏈補丁的檢測結果顯示,這種情況仍在持續。
更糟糕的是,物聯網固件領域似乎正存在大量無意義的代碼重用現象,且每個人都想當然地以為其他人已經做了安全審計工作。當查看不同的產品時,實際上出現了很多共同的二進制文件,這表明許多不同的供應商正在使用相同的框架來構建他們的物聯網平臺。
開發人員用戶界面——編譯器和固件構建工具鏈——中的敏感安全默認值將流向下游并影響使用這些產品的供應商,以及隨后將使用這些設備的數百萬用戶。
編譯器本身可以提供更好的報告,說明在編譯過程結束時實施了哪些安全功能。此外,編譯器也很容易提供透明度,并為開發人員提供有關剛剛生成的內容的更好反饋。