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