24小時聯(lián)系電話:18217114652、13661815404
中文
技術(shù)專題
使用安全編碼技術(shù)消除缺陷
編程語言的現(xiàn)代化和更好的編碼技術(shù)的重要性,直接關(guān)系到從機(jī)械計算機(jī)到現(xiàn)代軟件的發(fā)展-發(fā)展過程。我們從一種高度專業(yè)化的,主要是數(shù)學(xué)的符號轉(zhuǎn)變?yōu)榻咏祟愓Z法的高級編程語言。1盡管通過編譯器技術(shù)使之成為可能,但它為缺陷打開了大門。
諸如C和C ++之類的高級編程語言包含大量未定義的行為,各種編譯器可能會略有不同的解釋。這可能會導(dǎo)致未知或有害的副作用,這些副作用將轉(zhuǎn)化為缺陷。
檢測和修復(fù)缺陷可能需要長達(dá)開發(fā)時間的80% ,這取決于? ?開發(fā)組織的成熟度。顯然,代碼質(zhì)量是一個巨大的問題。為什么不避免缺陷并大大減少調(diào)試時間呢?
附帶說明一下,軟件中的“錯誤”和“調(diào)試”一詞最初來自哈佛大學(xué)的機(jī)械計算機(jī)。蛾子被卡在繼電器中,該事件被記錄為計算機(jī)歷史上的第一個系統(tǒng)缺陷或“錯誤” 。
一些受人尊敬的機(jī)構(gòu),如NASA,貝爾實驗室,以及MITRE公司多次進(jìn)行調(diào)查和研究,導(dǎo)致了同樣的結(jié)論:d在網(wǎng)絡(luò)evelopers,應(yīng)用小號,桌面,或嵌入傾向于注入,一不小心,同一種錯誤的對他們的源代碼反復(fù)出現(xiàn)。
這些常見的錯誤的實例包括分配無無原型用于C ++代碼解除分配(或甚至在C代碼)和功能,所以你不要'噸得到嚴(yán)格類型檢查在編譯時間。除了確定這些共性之外,研究還確定了最佳或推薦的編程實踐列表,這些列表可以查明并幫助防止危險和不良的編碼行為。
一些最佳做法已被定義以及-已知標(biāo)準(zhǔn),例如,MISRA C和CERT C.這是特別是在確保代碼安全的關(guān)鍵在像交通和醫(yī)療行業(yè)使用的應(yīng)用程序和安全性。
功能安全標(biāo)準(zhǔn),如IEC 61508 ,2 EN 50128 , 3和ISO 26262 4建議(或強(qiáng)烈建議,根據(jù)不同的安全完整性等級(SIL)或汽車安全完整性等級(ASIL))使用靜態(tài)的-和運(yùn)行-分析符合標(biāo)準(zhǔn)的工具。安全關(guān)鍵系統(tǒng)中的缺陷可能導(dǎo)致嚴(yán)重后果,例如生命損失或環(huán)境破壞。
安全編碼技術(shù)代表了編碼質(zhì)量,編碼安全性和編碼安全性的組合。代碼安全性集中在軟件的可靠性上,而代碼安全性則是關(guān)于防止不必要的活動并在攻擊過程中保持系統(tǒng)安全。無論在很大程度上依賴于代碼質(zhì)量是' S ^每可靠的應(yīng)用程序的基礎(chǔ)。
雖然安全編碼技術(shù)和標(biāo)準(zhǔn),推動軟件安全ensur ?所需的可靠性,“小號關(guān)鍵還提高了源代碼的可讀性和可維護(hù)性。更高效,更易讀的代碼意味著對源代碼進(jìn)行過時的驗證,從而減少了缺陷,并使代碼的重用成為可能。
MISRA C是最完善的軟件之一-開發(fā)標(biāo)準(zhǔn),旨在幫助避免常見的陷阱和漏洞。但是,對于任何嵌入式應(yīng)用程序,強(qiáng)烈建議使用其他準(zhǔn)則,例如CWE (通用弱點(diǎn)枚舉)和CERT C編碼標(biāo)準(zhǔn)。
MISRA C由汽車工業(yè)軟件可靠性協(xié)會開發(fā)。其目的是為了便于代碼的安全性,移植性,并且可靠性在嵌入式系統(tǒng)的上下文中,特別是第在ISO C.編程OSE系統(tǒng)
第一版?MISRA C標(biāo)準(zhǔn),“準(zhǔn)則使用車載軟件的C語言,”是在1998年生產(chǎn)的,被官方稱為MISRA C:1998年,它被更新在2004年再次在2012年添加更多的規(guī)則。有' S還對MISRA C ++基于C 2008標(biāo)準(zhǔn)++ 2003最近,MISRA C:2012年,修訂1增加了14條附加規(guī)則,自動對焦的安全問題OCUS強(qiáng)調(diào)了ISO C安全準(zhǔn)則幾個這些規(guī)則的地址。與使用不可信數(shù)據(jù)有關(guān)的特定問題,這是許多嵌入式應(yīng)用程序中眾所周知的安全漏洞。
MISRA可以幫助您在將代碼檢入正式版本之前發(fā)現(xiàn)問題,因此以這種方式查找錯誤可以使缺陷像從未發(fā)生過一樣。MISRA規(guī)則是-再-設(shè)計時考慮到安全性和可靠性,而且還使得代碼更容易移植到其他工具和架構(gòu)。
CWE和CERT C / C ++
CWE是社區(qū)開發(fā)的軟件弱點(diǎn)類型字典。CWE提供了一套統(tǒng)一的,可測量的軟件弱點(diǎn),以更好地理解和管理它們,并啟用可以找到它們的高效軟件安全工具和服務(wù)。
CERT C / C ++安全編碼標(biāo)準(zhǔn)是計算機(jī)應(yīng)急響應(yīng)小組(CERT)發(fā)布的標(biāo)準(zhǔn)。它們提供了使用C / C ++編程語言進(jìn)行安全編碼的規(guī)則和建議。
作為一般建議,每個嵌入式應(yīng)用程序至少應(yīng)遵循CWE和CERT C / C ++標(biāo)準(zhǔn)。對于安全關(guān)鍵型系統(tǒng),MISRA C是必需的。
按照同樣的概念,在運(yùn)行時你仍然可以容易的算術(shù)問題,緩沖區(qū)溢出,邊界問題,堆的完整性,以及內(nèi)存泄漏。可以通過插入特定的儀器代碼來檢測此類錯誤,或者在可能發(fā)生潛在錯誤的所有位置聲明該錯誤。但是,手動添加說明以檢查狀況并以某種方式在運(yùn)行時報告問題是一項非常耗時的任務(wù)。
應(yīng)用所有準(zhǔn)則和標(biāo)準(zhǔn)意味著除了檢測代碼外,您還需要遵守近700條規(guī)則和要求。那么,你怎么可以強(qiáng)制執(zhí)行的安全編碼技術(shù)和跟上所有的規(guī)則嗎?
實施軟件質(zhì)量,安全的最佳方式,而安全性是使用自動化工具。這可以通過使用高來實現(xiàn)-質(zhì)量編譯器和鏈接器是優(yōu)選的官能-安全CE rtified并用自動靜態(tài)分析和運(yùn)行時分析相結(jié)合。
編譯器和鏈接器應(yīng)支持現(xiàn)代編程語言,例如最新的C(ISO / IEC 9899:2018)和C ++(ISO / IEC 14882,稱為C ++,具有最新的C ++ 17視覺)。這里脫穎而出,它們可以產(chǎn)生suspici警告的OU情況或語法薄弱環(huán)節(jié),例如,易失性存儲器存取評估其順序可能會影響應(yīng)用程序的邏輯。
警告是你的第一個通靜態(tài)-分析檢查,不應(yīng)該被忽視,特別是在功能性-安全SETT ING。最好的建議是通過更改編譯器設(shè)置將所有警告都視為錯誤,從而將警告變成錯誤。這將迫使開發(fā)人員修復(fù)代碼中的所有歧義,因為所有問題都將被視為真實問題。
靜態(tài)-a nalysis工具可以幫助您找到最常見的源程序的缺陷ES在你的代碼。然而,他們也幫助發(fā)現(xiàn)問題,開發(fā)商往往不會想到或者什么時候擔(dān)心嘗試寫自己的代碼,尤其是當(dāng)他們'重新只是搭腳手架代碼得到的東西的工作。
這種工具確實一個ID在開發(fā)更好的代碼,因為他們ENF奧爾塞的編碼標(biāo)準(zhǔn)。此外,動態(tài)或運(yùn)行時-分析工具捕捉和觸發(fā)缺陷,只有在運(yùn)行時彈出。運(yùn)行時-分析工具可以同時執(zhí)行的SOF程序發(fā)現(xiàn)代碼中的實際和潛在的錯誤tware調(diào)試器。
所以,當(dāng)你看到所有的該缺陷可能是在你的系統(tǒng),靜態(tài)分析是善于發(fā)現(xiàn)的一些缺陷和運(yùn)行時分析是擅長精確定位等。有時“小號的重疊,但在其他實例中是個缺陷只能在一個域或其他被檢測到。為了獲得最佳的代碼分析,您需要將二者結(jié)合使用,并與一流的構(gòu)建工具集成在一起。 當(dāng)組合不同的工具時,矩陣(圖1 )最能代表完整的缺陷覆蓋率。