雖然連接的系統(tǒng)為更容易監(jiān)控、升級(jí)和增強(qiáng)帶來(lái)了新的機(jī)會(huì),但它們也帶來(lái)了更易受攻擊的攻擊面。不幸的是,連接系統(tǒng)的任何單一防御都不能保證不可穿透性。幸運(yùn)的是,有多個(gè)級(jí)別的安全性可以確保如果一個(gè)級(jí)別失敗,其他級(jí)別就會(huì)站穩(wěn)腳跟。
這些縱深防御方法可以包括安全啟動(dòng),以確保正確的圖像加載;域分離;多個(gè)獨(dú)立的安全級(jí)別 (MILS) 設(shè)計(jì)原則,例如最小權(quán)限;攻擊面減少;以安全為中心的測(cè)試,例如靜態(tài)和動(dòng)態(tài)分析,以及最后但并非最不重要的安全編碼技術(shù)。
雖然如果底層架構(gòu)不安全,安全應(yīng)用程序代碼對(duì)保護(hù)連接的嵌入式系統(tǒng)幾乎沒(méi)有作用,但它確實(shí)在考慮安全性的系統(tǒng)中發(fā)揮了關(guān)鍵作用。
縱深防御和 V 模型
傳統(tǒng)上,安全代碼驗(yàn)證的實(shí)踐在很大程度上是被動(dòng)的。代碼是按照有些松散的準(zhǔn)則開(kāi)發(fā)的,然后進(jìn)行性能、滲透、負(fù)載和功能測(cè)試以發(fā)現(xiàn)漏洞,這些漏洞稍后會(huì)修復(fù)。
更好、更主動(dòng)的方法可確保代碼在設(shè)計(jì)上是安全的——沿著時(shí)間線“左移”。這意味著一個(gè)系統(tǒng)的開(kāi)發(fā)過(guò)程,其中代碼是根據(jù)安全編碼標(biāo)準(zhǔn)編寫(xiě)的,可追溯到安全要求,并經(jīng)過(guò)測(cè)試以證明隨著開(kāi)發(fā)的進(jìn)展符合這些要求。
這種主動(dòng)方法將與安全相關(guān)的最佳實(shí)踐集成到功能安全領(lǐng)域的開(kāi)發(fā)人員熟悉的 V 模型軟件開(kāi)發(fā)生命周期中。由此產(chǎn)生的安全軟件開(kāi)發(fā)生命周期 (SSDLC) 代表了以安全為中心的應(yīng)用程序開(kāi)發(fā)人員的左移,并提供了一種實(shí)用的方法來(lái)確保在系統(tǒng)之外設(shè)計(jì)漏洞或及時(shí)徹底地解決漏洞。
相同的原則可以應(yīng)用于 DevOps 生命周期,從而產(chǎn)生所謂的 DevSecOps。盡管 DevSecOps 和 SSDLC 的上下文有所不同,但左移因此對(duì)兩者來(lái)說(shuō)意味著相同的事情——即對(duì)安全性的早期和持續(xù)考慮。
盡早并經(jīng)常測(cè)試
此處描述的所有與安全相關(guān)的工具、測(cè)試和技術(shù)在每個(gè)生命周期模型中都占有一席之地。在 V 模型中,它們?cè)诤艽蟪潭壬项愃朴诤脱a(bǔ)充通常與功能安全應(yīng)用程序開(kāi)發(fā)相關(guān)的流程(圖 1)。
圖 1:在基于 V 模型的安全軟件開(kāi)發(fā)生命周期 (SSDLC) 中使用安全測(cè)試工具和技術(shù)
在 DevSecOps 模型中,DevOps 生命周期與整個(gè)持續(xù)開(kāi)發(fā)過(guò)程中的安全相關(guān)活動(dòng)疊加(圖 2)。
圖 2:在 DevSecOps 流程模型中使用安全測(cè)試工具和技術(shù)
在 V 模型的情況下,需求可追溯性在整個(gè)開(kāi)發(fā)過(guò)程中得到維護(hù),在 DevSecOps 模型的情況下,需求可追溯性在每個(gè)開(kāi)發(fā)迭代中得到維護(hù)(在每個(gè)圖中以橙色顯示)。
一些 SAST(靜態(tài))工具用于確認(rèn)遵守編碼標(biāo)準(zhǔn),確保將復(fù)雜性保持在最低限度,并檢查代碼是否可維護(hù)。其他用于檢查安全漏洞,但僅限于在沒(méi)有執(zhí)行環(huán)境上下文的情況下對(duì)源代碼進(jìn)行此類檢查的范圍內(nèi)。
白盒 DAST(動(dòng)態(tài))使編譯和執(zhí)行的代碼能夠在開(kāi)發(fā)環(huán)境中進(jìn)行測(cè)試,或者更好的是,在目標(biāo)硬件上進(jìn)行測(cè)試。代碼覆蓋有助于確認(rèn)代碼滿足所有安全和其他要求,并且所有代碼都滿足一個(gè)或多個(gè)要求。如果系統(tǒng)的關(guān)鍵性需要,這些檢查甚至可以達(dá)到目標(biāo)代碼級(jí)別。
可以在單元測(cè)試環(huán)境中使用健壯性測(cè)試來(lái)幫助證明特定功能是有彈性的,無(wú)論是在其調(diào)用樹(shù)的上下文中隔離。
傳統(tǒng)上與軟件安全相關(guān)的模糊和滲透黑盒測(cè)試技術(shù)仍然具有相當(dāng)大的價(jià)值,但在這種情況下,用于確認(rèn)和證明在安全基礎(chǔ)上設(shè)計(jì)和開(kāi)發(fā)的系統(tǒng)的穩(wěn)健性。
提供雙向追溯
IEEE 軟件工程術(shù)語(yǔ)標(biāo)準(zhǔn)詞匯表將可追溯性定義為“在開(kāi)發(fā)過(guò)程的兩個(gè)或多個(gè)產(chǎn)品之間可以建立關(guān)系的程度,尤其是彼此之間具有前繼或主從關(guān)系的產(chǎn)品?!?雙向可追溯性意味著追溯路徑既向前又向后(圖 3)。
自動(dòng)化使在不斷變化的項(xiàng)目環(huán)境中維護(hù)可追溯性變得更加容易。
圖 3:雙向追溯
前向可追溯性表明所有需求都反映在開(kāi)發(fā)過(guò)程的每個(gè)階段,包括實(shí)施和測(cè)試??梢酝ㄟ^(guò)應(yīng)用影響分析來(lái)評(píng)估對(duì)需求或失敗的測(cè)試用例的任何更改的影響,然后可以解決這些影響。然后可以重新測(cè)試生成的實(shí)施,以提供繼續(xù)遵守雙向可追溯性原則的證據(jù)。
同樣重要的是向后可追溯性,它突出顯示不滿足任何指定要求的代碼。疏忽、錯(cuò)誤的邏輯、特征蔓延以及惡意后門(mén)方法的插入都可能引入安全漏洞或錯(cuò)誤。
必須記住,安全嵌入式工件的生命周期一直持續(xù)到該領(lǐng)域的最后一個(gè)示例不再使用。對(duì)此類工件的任何妥協(xié)都需要響應(yīng)、更改的或新的需求,并且需要立即響應(yīng)——通常是開(kāi)發(fā)工程師很長(zhǎng)時(shí)間沒(méi)有接觸過(guò)的源代碼。在這種情況下,自動(dòng)可追溯性可以隔離所需內(nèi)容并僅對(duì)受影響的功能進(jìn)行自動(dòng)測(cè)試。
實(shí)踐中左移
左移原則所包含的概念對(duì)于開(kāi)發(fā)安全關(guān)鍵型應(yīng)用程序的個(gè)人和團(tuán)隊(duì)來(lái)說(shuō)是很熟悉的。多年來(lái),功能安全標(biāo)準(zhǔn)要求采用類似的方法。因此,在功能安全領(lǐng)域證明的許多最佳實(shí)踐適用于前面討論的安全關(guān)鍵型應(yīng)用程序,包括在開(kāi)始時(shí)(V 模型)或每次迭代之前(DevSecOps)建立功能和安全要求,及早和經(jīng)常測(cè)試,以及應(yīng)用雙向跟蹤需求到開(kāi)發(fā)的所有階段。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19143瀏覽量
306087 -
代碼
+關(guān)注
關(guān)注
30文章
4801瀏覽量
68730
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論