在嵌入式開發(fā)中,隨著越來越多的功能嵌入到越來越小的設(shè)備尺寸中,安全性問題也隨之增加。通常,新功能會排擠基本的安全性問題,因?yàn)楣?yīng)商將越來越多的功能打包到軟件包中,而很少進(jìn)行整體系統(tǒng)工程設(shè)計(jì),并且只進(jìn)行粗略的安全性測試。
嵌入式環(huán)境已經(jīng)發(fā)展成熟,安全性必須像20世紀(jì)90年代PC發(fā)展時(shí)一樣,成為重中之重。隨著物聯(lián)網(wǎng)(IoT)的爆炸式增長,毫無疑問,任何安全漏洞都會被利用。物聯(lián)網(wǎng)設(shè)備使非常有用的商業(yè)案例成為現(xiàn)實(shí)。同時(shí),它們也帶來了失控的風(fēng)險(xiǎn)。今天的嵌入式系統(tǒng)要強(qiáng)大得多,也脆弱得多。如果嵌入式系統(tǒng)要避免20世紀(jì)90年代的陷阱,在它們成為新一代黑客的切入點(diǎn)之前,協(xié)議和方法必須到位。
IT標(biāo)準(zhǔn)組織,如IT軟件質(zhì)量聯(lián)盟(CISQ)、MITRE公共弱點(diǎn)列舉(CWE)、ISO9000和ISO25000,發(fā)布指導(dǎo)方針和軟件質(zhì)量標(biāo)準(zhǔn)。CISQ公布了安全性、可靠性、性能效率和可維護(hù)性的自動(dòng)化質(zhì)量措施。這些度量提供了一些特定的屬性,這些屬性應(yīng)該被用作嵌入式系統(tǒng)可能需要完成其業(yè)務(wù)/使命功能的證據(jù)。在檢查嵌入式系統(tǒng)的狀態(tài)時(shí),很明顯安全性應(yīng)該在前面進(jìn)行設(shè)計(jì)。
實(shí)施安全策略
當(dāng)考慮安全性時(shí),大多數(shù)嵌入式開發(fā)工程師會立即關(guān)注保護(hù)數(shù)據(jù)的問題。系統(tǒng)不僅應(yīng)該保護(hù)數(shù)據(jù)(在應(yīng)用程序中),還應(yīng)該保護(hù)接口不被濫用。這五個(gè)步驟代表了開發(fā)嵌入式安全策略的合理起點(diǎn)。
l中沒有未經(jīng)測試的程序執(zhí)行空間——除了執(zhí)行功能所必需的程序之外,任何程序都不應(yīng)該存在于可以執(zhí)行它們的地方
l數(shù)據(jù)必須是私有的——程序不應(yīng)該無意中向彼此或網(wǎng)絡(luò)暴露信息
l確認(rèn)兩端的數(shù)據(jù)–所有信息必須能夠驗(yàn)證,并且必須在預(yù)期范圍內(nèi),超出范圍的信息將被拒絕
l安全設(shè)備——設(shè)備應(yīng)該能夠在啟動(dòng)時(shí)驗(yàn)證其完整性;設(shè)備應(yīng)該在發(fā)送或接收數(shù)據(jù)之前進(jìn)行自我驗(yàn)證
l遵循標(biāo)準(zhǔn)——看看IT軟件質(zhì)量聯(lián)盟(CISQ)的質(zhì)量特征測量,這些測量可以自動(dòng)進(jìn)行持續(xù)的安全性和軟件質(zhì)量分析和緩解
l采取行動(dòng)——如果出現(xiàn)異常,程序必須在處理問題的同時(shí)繼續(xù)運(yùn)行
執(zhí)行空間中沒有未經(jīng)測試的程序
在嵌入式開發(fā)中,隨著嵌入式供應(yīng)商努力使他們的產(chǎn)品與眾不同,他們將程序添加到他們的標(biāo)準(zhǔn)發(fā)行版中。其中許多都不會被使用,并且存在潛在的安全風(fēng)險(xiǎn)。這些程序必須被刪除,或者更好的是,永遠(yuǎn)不要安裝。要求一個(gè)操作系統(tǒng)發(fā)行版,里面除了操作系統(tǒng)工作和手動(dòng)安裝程序的基本要素之外,沒有任何東西。極簡策略對代碼來說是最好的。如果供應(yīng)商不提供剝離的發(fā)行版,操作系統(tǒng)可以限制對這些程序和敏感API的訪問權(quán)限,或者可以刪除未使用的代碼。
更好的方法是為自定義和第三方應(yīng)用程序提供一個(gè)沙箱來執(zhí)行,然后通過API推送通信,API提供了必要的隔離。
硬件本身應(yīng)該是“干凈”的,沒有安裝任何程序。關(guān)鍵是設(shè)備上的任何程序都是由開發(fā)人員安裝的。每一段代碼必須來自一個(gè)值得信賴的嵌入式開發(fā)人員,不能在安裝前修改。
數(shù)據(jù)必須是私有的
程序不應(yīng)該無意中向彼此或網(wǎng)絡(luò)公開信息。相信一個(gè)設(shè)備在互聯(lián)網(wǎng)上不會被黑客攻擊是很誘人的,但這根本不是事實(shí)。隨著程序中模塊的增長,數(shù)據(jù)工件也隨之增長,數(shù)據(jù)也變得越來越暴露。
嵌入式設(shè)備收集敏感數(shù)據(jù)(如醫(yī)療保健、企業(yè)數(shù)據(jù)),數(shù)據(jù)流量很有可能在到達(dá)目的地之前被重新路由和修改。應(yīng)該有防止復(fù)制和粘貼的檢查,以及在設(shè)備落入壞人之手時(shí)遠(yuǎn)程擦除數(shù)據(jù)的能力。
面臨期限壓力的嵌入式開發(fā)人員傾向于從自己和同事那里借用代碼和例程。任何安全缺陷都會被傳播。第一次就正確地設(shè)計(jì)和構(gòu)建代碼。
確認(rèn)兩端的數(shù)據(jù)
所有信息都必須在預(yù)期范圍內(nèi)得到驗(yàn)證,并被清楚地識別。在兩端使用相同的例程來驗(yàn)證內(nèi)容是至關(guān)重要的。接口應(yīng)該對輸入的內(nèi)容敏感,并且能夠在數(shù)據(jù)不正確時(shí)采取行動(dòng)。當(dāng)一個(gè)設(shè)備從一個(gè)“可信”的設(shè)備接收到壞數(shù)據(jù)時(shí),這種入侵很可能是黑客行為。對于直接硬件接口也是如此。
像隱私一樣,所有與外部世界的聯(lián)系都需要被視為可疑。應(yīng)該驗(yàn)證接口并檢查數(shù)據(jù)。
安全設(shè)備
設(shè)備應(yīng)該能夠在啟動(dòng)時(shí)驗(yàn)證其完整性,并且應(yīng)該在發(fā)送或接收數(shù)據(jù)之前進(jìn)行自我驗(yàn)證。知道誰在發(fā)送數(shù)據(jù)是很重要的,一個(gè)簡單的方法是替換未經(jīng)驗(yàn)證的設(shè)備。
啟動(dòng)時(shí),嵌入式開發(fā)設(shè)備必須使用加密生成的數(shù)字簽名。資源受限的設(shè)備可以使用獨(dú)特的硬件特征而不是計(jì)算密集型算法來生成用于認(rèn)證的數(shù)字簽名。未通過檢查的設(shè)備應(yīng)該有計(jì)劃的響應(yīng)。默認(rèn)操作可能不適合任何給定的設(shè)備。
每個(gè)設(shè)備都應(yīng)該有一個(gè)密鑰,并且每個(gè)設(shè)備都應(yīng)該知道其類型可接受的密鑰。當(dāng)接收到未識別的密鑰時(shí),應(yīng)該計(jì)劃響應(yīng),而不是簡單地忽略。如果信息的接收對設(shè)備的功能至關(guān)重要,則不止一次接收錯(cuò)誤的ID應(yīng)被視為攻擊。針對此故障進(jìn)行規(guī)劃至關(guān)重要。
遵循標(biāo)準(zhǔn)
CISQ發(fā)布了一項(xiàng)安全標(biāo)準(zhǔn),旨在識別IT應(yīng)用軟件中的25個(gè)已知安全弱點(diǎn),由MITRE在常見弱點(diǎn)枚舉(CWE)中維護(hù)。cwe是一組可衡量的項(xiàng)目,可用作彈性、安全性和安全性的證據(jù)。CAST等代碼分析器可以從復(fù)雜的環(huán)境中挑選出這些。開發(fā)人員應(yīng)該經(jīng)常接觸這些重要的標(biāo)準(zhǔn)。
采取行動(dòng)
如果出現(xiàn)異常,程序必須在處理問題的同時(shí)繼續(xù)運(yùn)行。嵌入式開發(fā)人員通常關(guān)注收到好數(shù)據(jù)時(shí)會發(fā)生什么,但錯(cuò)誤處理通常很簡單。開發(fā)人員培訓(xùn)假設(shè)壞數(shù)據(jù)是編程的產(chǎn)物,而不是黑客,這是需要審查的政策。對所有關(guān)鍵組件進(jìn)行保證案例測試。保證案例支持實(shí)現(xiàn)的迭代審查和修訂,直到系統(tǒng)顯示正確的行為。
在某些情況下,設(shè)備可能有辦法通知另一個(gè)設(shè)備它受到了攻擊。在其他情況下,它可能會簡單地選擇忽略或避開威脅。無論哪種情況,溝通都是避免黑客攻擊的有力武器。
保護(hù)嵌入式設(shè)備
嵌入式安全性正成為嵌入式設(shè)備的一項(xiàng)關(guān)鍵需求。通過遵循這些建議,你的嵌入式開發(fā)解決方案可以專注于解決其設(shè)計(jì)要解決的問題,而不會為新一代黑客打開閘門。