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