【導(dǎo)讀】從發(fā)電廠到工廠再到供水,工業(yè)控制系統(tǒng)正在從專(zhuān)有和封閉的網(wǎng)絡(luò)轉(zhuǎn)變?yōu)槲锫?lián)網(wǎng)的一部分。安全的開(kāi)發(fā)過(guò)程可以減少這些關(guān)鍵基礎(chǔ)設(shè)施中的軟件漏洞。
從發(fā)電廠到工廠再到供水,工業(yè)控制系統(tǒng)正在從專(zhuān)有和封閉的網(wǎng)絡(luò)轉(zhuǎn)變?yōu)槲锫?lián)網(wǎng)的一部分。安全的開(kāi)發(fā)過(guò)程可以減少這些關(guān)鍵基礎(chǔ)設(shè)施中的軟件漏洞。
在一個(gè)可能讓大多數(shù)軟件開(kāi)發(fā)人員感到震驚的情況下,計(jì)算機(jī)蠕蟲(chóng)已經(jīng)成為電影明星。在新動(dòng)作驚悚片《零日》中,反派炸毀了化工廠,關(guān)閉了核電冷卻系統(tǒng),破壞了火車(chē),關(guān)閉了國(guó)家電網(wǎng)等等。這部快速移動(dòng)的動(dòng)作片的明星是臭名昭著的Stuxnet蠕蟲(chóng),據(jù)報(bào)道,這是由美國(guó)和以色列情報(bào)部門(mén)開(kāi)發(fā)的,旨在削弱伊朗的核計(jì)劃。Stuxnet攻擊了控制核電站內(nèi)離心機(jī)的可編程邏輯控制器(PLC),但蠕蟲(chóng)及其變體可以針對(duì)一系列制造,運(yùn)輸和公用事業(yè)操作中的系統(tǒng)進(jìn)行定制。
正在看電影的公眾基本上沒(méi)有意識(shí)到潛伏在我們互聯(lián)基礎(chǔ)設(shè)施中的危險(xiǎn)——這些危險(xiǎn)一直困擾著工程師和開(kāi)發(fā)人員。通常,工廠自動(dòng)化系統(tǒng)使用監(jiān)控和數(shù)據(jù)采集(SCADA)系統(tǒng)運(yùn)行,以實(shí)現(xiàn)人機(jī)界面和訪(fǎng)問(wèn)。IEC61508標(biāo)準(zhǔn)及其衍生物的實(shí)施是為了確保在廣泛的行業(yè)中運(yùn)行這些系統(tǒng)的軟件的功能安全。但是,這些SCADA系統(tǒng)(通?;赪indows或Linux)又連接到企業(yè)管理,企業(yè)管理需要訪(fǎng)問(wèn)庫(kù)存控制,營(yíng)銷(xiāo),會(huì)計(jì)和許多其他目的。當(dāng)然,這些都與外部互聯(lián)網(wǎng)相關(guān)聯(lián),因此為來(lái)自外部的攻擊提供了完美的途徑。因此,雖然早期的封閉系統(tǒng)依靠不幸或惡意的個(gè)人來(lái)手動(dòng)安裝蠕蟲(chóng),但今天的互聯(lián)網(wǎng)連接工業(yè)系統(tǒng)提供了新的攻擊面。由于這種高水平的連接性和攻擊風(fēng)險(xiǎn),如果系統(tǒng)不安全,則不能認(rèn)為它是安全的。
IEC61508及其衍生產(chǎn)品沒(méi)有專(zhuān)門(mén)針對(duì)安全性。開(kāi)發(fā)人員需要解決從產(chǎn)品開(kāi)發(fā)階段到上市后管理的網(wǎng)絡(luò)安全問(wèn)題。為了遵守各種準(zhǔn)則和要求,開(kāi)發(fā)人員必須使用足夠的工具來(lái)處理高復(fù)雜性。隨著這些系統(tǒng)越來(lái)越受到認(rèn)證要求的約束,編碼的正確性必須與所需的功能一起得到證明和記錄。
開(kāi)發(fā)安全代碼的核心是設(shè)計(jì)一個(gè)策略,該策略可以基于網(wǎng)絡(luò)安全指南,例如美國(guó)國(guó)家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)發(fā)布的指南,以及組織自己的方法,并將其構(gòu)建到正在開(kāi)發(fā)的系統(tǒng)的需求文檔中。此外,該項(xiàng)目應(yīng)采用MISRA C等編碼標(biāo)準(zhǔn),以防止可疑的方法和粗心大意的錯(cuò)誤,這些錯(cuò)誤可能會(huì)危及安全性,而不會(huì)立即顯現(xiàn)出來(lái),甚至導(dǎo)致功能錯(cuò)誤。當(dāng)然,下一個(gè)重要步驟是確保這種策略和編碼標(biāo)準(zhǔn)實(shí)際上已經(jīng)有效地執(zhí)行。由于當(dāng)今軟件的規(guī)模和復(fù)雜性,這不再可以手動(dòng)完成,必須使用一套全面的工具,可以在編譯之前和之后徹底分析代碼。
使用可追溯性和分析來(lái)驗(yàn)證安全性
雖然定義需求是必不可少的第一步,但必須有一個(gè)明確定義的方法來(lái)跟蹤和驗(yàn)證是否滿(mǎn)足需求。需求可追溯性和管理可提高代碼質(zhì)量以及應(yīng)用程序的整體安全性、安全性和有效性?;谛枨笪臋n的雙向可追溯性可確保每個(gè)高級(jí)需求都由一個(gè)或多個(gè)低級(jí)需求覆蓋,并且每個(gè)低級(jí)需求都鏈接到代碼、驗(yàn)證活動(dòng)和流程中生成的工件。同樣,這些鏈接必須追溯到從工件和代碼到需求的上游,確保流程中任何階段的任何更改都可以輕松檢測(cè)、理解和適當(dāng)?shù)毓芾恚▓D 1)。
圖1 需求可追溯性工具提供了流程透明度,對(duì)于確定開(kāi)發(fā)流程所有階段的影響分析至關(guān)重要。
需求可追溯性工具允許團(tuán)隊(duì)處理單個(gè)活動(dòng),并將代碼和驗(yàn)證工件鏈接回更高級(jí)別的目標(biāo)。在雙向需求可追溯性的監(jiān)督下,在開(kāi)發(fā)過(guò)程的早期和連續(xù)階段應(yīng)用了三個(gè)主要功能。這些是靜態(tài)分析,功能測(cè)試和結(jié)構(gòu)覆蓋分析的動(dòng)態(tài)分析以及單元/集成測(cè)試。后者在開(kāi)發(fā)過(guò)程的早期應(yīng)用靜態(tài)和動(dòng)態(tài)分析,也適用于后期集成的代碼。
靜態(tài)和動(dòng)態(tài)安全分析合作伙伴
在確保安全性時(shí),兩個(gè)主要問(wèn)題是數(shù)據(jù)和控制。必須考慮的問(wèn)題包括,誰(shuí)有權(quán)訪(fǎng)問(wèn)哪些數(shù)據(jù)?誰(shuí)能從中讀取,誰(shuí)可以寫(xiě)信給它?與哪些實(shí)體之間的數(shù)據(jù)流是什么?以及訪(fǎng)問(wèn)控制如何影響控制?在這里,“誰(shuí)”可以指開(kāi)發(fā)人員和操作員以及黑客等人,也可以指應(yīng)用程序中的軟件組件或居住在網(wǎng)絡(luò)架構(gòu)中的某個(gè)地方。為了解決這些問(wèn)題,靜態(tài)和動(dòng)態(tài)分析必須齊頭并進(jìn)。
在靜態(tài)分析方面,這些工具使用未編譯的源代碼來(lái)檢查代碼的各種質(zhì)量指標(biāo),例如復(fù)雜性,清晰度和可維護(hù)性。靜態(tài)分析還可用于根據(jù)選定的編碼規(guī)則檢查代碼,這些規(guī)則可以是支持的編碼標(biāo)準(zhǔn)(如MISRA C或CERT C)的任意組合,以及開(kāi)發(fā)人員或公司可能指定的任何自定義規(guī)則和要求。這些工具尋找可能危及安全性的軟件構(gòu)造,并檢查內(nèi)存保護(hù)以確定誰(shuí)有權(quán)訪(fǎng)問(wèn)哪些內(nèi)存并跟蹤可能遍歷內(nèi)存位置的指針。理想情況下,結(jié)果應(yīng)以圖形屏幕顯示,以便于評(píng)估結(jié)果,以確保代碼干凈、一致且可維護(hù),并符合編碼標(biāo)準(zhǔn)(圖 2)。
此過(guò)程可以通過(guò)運(yùn)行分析工具并針對(duì)應(yīng)用程序的源代碼進(jìn)行編碼標(biāo)準(zhǔn)定義來(lái)自動(dòng)完成。幾乎可以肯定的是,此類(lèi)代碼需要修改,以符合已添加到 MISRA C 中的最新安全要求(圖 2)。
圖2 編碼標(biāo)準(zhǔn)合規(guī)性與文件/功能名稱(chēng)內(nèi)聯(lián)顯示,以顯示系統(tǒng)的哪些方面不符合標(biāo)準(zhǔn)。編程標(biāo)準(zhǔn)調(diào)用圖顯示了系統(tǒng)編碼標(biāo)準(zhǔn)合規(guī)性的高級(jí)彩色編碼視圖。
另一方面,動(dòng)態(tài)分析測(cè)試已編譯的代碼,該代碼使用編譯器生成的符號(hào)數(shù)據(jù)鏈接回源代碼。動(dòng)態(tài)分析,特別是代碼覆蓋率分析,可以提供對(duì)測(cè)試過(guò)程有效性的深刻見(jiàn)解。但是,開(kāi)發(fā)人員通常嘗試手動(dòng)生成和管理自己的測(cè)試用例。從需求文檔開(kāi)始工作是生成測(cè)試用例的典型方法,它們可能會(huì)以不同程度的有效性刺激和監(jiān)視應(yīng)用程序的各個(gè)部分,但考慮到當(dāng)今代碼的大小和復(fù)雜性,這不足以使代碼正確無(wú)誤或獲得可能需要的任何認(rèn)證或批準(zhǔn)。
自動(dòng)生成測(cè)試用例可以大大增強(qiáng)測(cè)試過(guò)程,節(jié)省時(shí)間和金錢(qián)。但是,有效的測(cè)試用例生成基于代碼的質(zhì)量靜態(tài)分析。靜態(tài)分析提供的信息有助于自動(dòng)測(cè)試用例生成器在動(dòng)態(tài)分析期間為應(yīng)用程序中的軟件組件創(chuàng)建適當(dāng)?shù)募?lì)??梢允謩?dòng)創(chuàng)建功能測(cè)試以擴(kuò)充自動(dòng)生成的測(cè)試用例,從而提供更好的代碼覆蓋率和更有效和更高效的測(cè)試過(guò)程。手動(dòng)創(chuàng)建的測(cè)試通常是從需求生成的,即需求驅(qū)動(dòng)的測(cè)試。這些應(yīng)該包括任何功能安全測(cè)試,例如模擬嘗試訪(fǎng)問(wèn)控制設(shè)備或向其提供會(huì)改變其任務(wù)的錯(cuò)誤數(shù)據(jù)?;趧?chuàng)建的測(cè)試的功能測(cè)試應(yīng)包括魯棒性,例如測(cè)試不允許的輸入和異常條件的結(jié)果。此外,動(dòng)態(tài)分析不僅提供代碼覆蓋率,還提供數(shù)據(jù)流/控制分析,反過(guò)來(lái)可以使用雙向需求可追溯性來(lái)檢查其完整性。
除了測(cè)試是否符合標(biāo)準(zhǔn)和要求外,還有必要檢查可能是“血統(tǒng)不明的軟件”或SOUP代碼的任何部分。例如,存在與“死”代碼區(qū)域相關(guān)的危險(xiǎn),這些區(qū)域可能被黑客激活或系統(tǒng)中的晦澀事件用于惡意目的。盡管從頭開(kāi)始實(shí)現(xiàn)安全性是理想的,但大多數(shù)項(xiàng)目都包含預(yù)先存在的代碼,這些代碼可能具有看起來(lái)只是所需的功能。開(kāi)發(fā)人員需要抵制自動(dòng)引入此類(lèi)代碼(甚至是來(lái)自同一組織的代碼),而無(wú)需對(duì)其進(jìn)行與他們自己的代碼完全相同的嚴(yán)格分析。靜態(tài)和動(dòng)態(tài)分析一起使用可以揭示死代碼的區(qū)域,這些區(qū)域可能是危險(xiǎn)源,也可能只是占用空間。有必要正確識(shí)別此類(lèi)代碼并進(jìn)行處理,通常是通過(guò)消除它。當(dāng)開(kāi)發(fā)團(tuán)隊(duì)(可能在完全不同的位置)開(kāi)發(fā)、測(cè)試、修改和重新測(cè)試單元時(shí),可以存儲(chǔ)、共享和使用從綜合工具套件生成的測(cè)試記錄,同時(shí)將單元集成到更大的項(xiàng)目中。
為了使系統(tǒng)可靠和安全,它們還必須是安全的。為此,它們必須被編碼為不僅遵守語(yǔ)言規(guī)則,而且還要遵守確保安全和保障的明確定義的策略。將一套全面的測(cè)試和分析工具應(yīng)用于組織的開(kāi)發(fā)過(guò)程,可以大大提高安全措施的徹底性和準(zhǔn)確性,以保護(hù)重要系統(tǒng)。它還使團(tuán)隊(duì)為共同目標(biāo)而共同努力并對(duì)最終產(chǎn)品充滿(mǎn)信心的努力變得順利。由此產(chǎn)生的產(chǎn)品將有更好的機(jī)會(huì)獲得客戶(hù)批準(zhǔn),如果需要,還可以獲得當(dāng)局的認(rèn)證 - 并且它不太可能成為下一部大片的明星。
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問(wèn)題,請(qǐng)聯(lián)系小編進(jìn)行處理。
推薦閱讀:
CITE2023 集成電路專(zhuān)區(qū)要“火”—從兩會(huì)看中國(guó)集成電路發(fā)展主旋律
汽車(chē)測(cè)試的一站式解決方案,盡在2023廣州汽車(chē)測(cè)試測(cè)量技術(shù)展
升壓DC-DC穩(wěn)壓器轉(zhuǎn)換為電流源進(jìn)行電池充電
使用藍(lán)牙網(wǎng)狀網(wǎng)絡(luò)進(jìn)行設(shè)計(jì):設(shè)備要求