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