<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 與您一路同行:從代碼質(zhì)量到全面安全

與您一路同行:從代碼質(zhì)量到全面安全

作者:Shawn Prestridge,IAR資深現場(chǎng)應用工程師/美國FAE團隊負責人 時(shí)間:2023-11-29 來(lái)源:電子產(chǎn)品世界 收藏

安全一直都是一個(gè)非常熱門(mén)的話(huà)題,似乎每周都會(huì )聽(tīng)到這樣的消息:某某公司如何被入侵,數百萬(wàn)用戶(hù)的數據被泄露。

本文引用地址:http://dyxdggzs.com/article/202311/453423.htm

我們看到這么多的安全問(wèn)題,部分原因在于我們對待安全的方式:安全性通常被認為是事后考慮的問(wèn)題,是在開(kāi)發(fā)結束時(shí)才添加到設備上的東西。然而,復雜的系統,尤其是嵌入式系統,有一個(gè)很大的攻擊面,這讓攻擊者有機可乘,能夠在“盔甲”上找到破綻。如果你去研究大部分黑客試圖入侵系統的方式,你很快就會(huì )發(fā)現,在他們的武器庫中,他們最喜歡的手段就是尋找和利用設備的軟件漏洞。

1701238255561620.jpg

如果軟件漏洞是黑客所利用的入口,那么我們就需要提高自己的來(lái)解決這個(gè)問(wèn)題。但是,這個(gè)問(wèn)題有多嚴重,我們能做什么來(lái)解決它呢?

代碼漏洞容易成為黑客的目標

糟糕實(shí)際上是一個(gè)普遍存在的問(wèn)題,而且有相當多的證據支持這樣的說(shuō)法:糟糕的編碼直接導致了漏洞。雖然許多軟件工程專(zhuān)家多年來(lái)一直在宣揚這一點(diǎn),但人們第一次真正意識到這一點(diǎn)也許是在2001年,當時(shí)紅色代碼(Code Red)蠕蟲(chóng)對微軟的互聯(lián)網(wǎng)信息服務(wù)(IIS)施加了緩沖區溢出攻擊。雖然第一個(gè)有記載的緩沖區溢出攻擊發(fā)生在1988年,針對的是Unix的finger指令,但對普通人的影響十分有限,因此沒(méi)有上頭條新聞。

由于紅色代碼造成了大規模的互聯(lián)網(wǎng)減速,并在新聞報道中鋪天蓋地的傳播,突然間,我們隨處都能看到緩沖區溢出攻擊的增加,看上去安全研究人員和黑客都在各種系統(包括嵌入式系統)中到處尋找這些漏洞。利用緩沖區溢出攻擊,黑客可以在受影響的系統上運行他們想要運行的任何代碼,其目標是使用固定長(cháng)度的緩沖區來(lái)保存文本或數據的一切代碼。黑客將緩沖區空間填充到最大,然后在合法緩沖區空間的末端寫(xiě)下可執行代碼。然后,被攻擊的系統就會(huì )執行緩沖區末端的代碼,在許多情況下,這就可以使攻擊者為所欲為了。

這種類(lèi)型的攻擊之所以成為緊急事件,是因為當時(shí)檢查和執行緩沖區限制的編碼并不普遍,但現在許多編碼標準,如mitre.org的通用缺陷列表(Common Weakness Enumeration,CWE),都建議檢查緩沖區是否存在這種類(lèi)型的漏洞。遺憾的是,開(kāi)發(fā)人員在編寫(xiě)代碼時(shí)普遍都不去尋找這個(gè)問(wèn)題,通常需要代碼分析工具來(lái)發(fā)現這些問(wèn)題,這樣開(kāi)發(fā)人員才會(huì )意識到問(wèn)題的存在并加以修復。像這樣一個(gè)簡(jiǎn)單的改進(jìn),就可以消除黑客最常使用的手段之一,從而大大提高代碼的安全性。因此,檢查并執行代碼中的緩沖區長(cháng)度,這樣的編碼才是好編碼。

不僅僅是緩沖區溢出

然而,問(wèn)題不僅僅在于緩沖區溢出,這實(shí)際上是一個(gè)系統性問(wèn)題,草率的編碼通常會(huì )導致無(wú)數的安全漏洞,而黑客可以利用這些漏洞來(lái)入侵系統。美國軟件工程學(xué)會(huì )(SEI)發(fā)表的一篇論文將這一點(diǎn)說(shuō)得非常清楚:

“......質(zhì)量性能指標為確定高質(zhì)量產(chǎn)品、預測安全和保障結果提供了依據。通用缺陷列表(CWE)中的許多內容,如編程語(yǔ)言結構的不當使用、緩沖區溢出、驗證輸入值失敗等,都可能與低質(zhì)量的編碼和開(kāi)發(fā)過(guò)程有關(guān)。提高代碼質(zhì)量是解決一些軟件安全問(wèn)題的必要條件?!?/p>

該論文還指出,因為許多安全問(wèn)題是由軟件漏洞引起的,因此可以像處理更普通的編碼漏洞一樣處理安全問(wèn)題,您可以應用傳統的質(zhì)量保證技術(shù)來(lái)幫助解決至少一部分安全問(wèn)題。

既然正常的軟件質(zhì)量保證過(guò)程可以讓我們估計系統中剩余的漏洞數量,那么可以對安全漏洞做同樣的事情嗎?雖然SEI沒(méi)有確認代碼質(zhì)量和安全性之間的數學(xué)關(guān)系,但他們確實(shí)指出,1%到5%的軟件漏洞是安全漏洞,并繼續指出,他們的證據表明當安全漏洞被追蹤時(shí),他們可以準確地估計系統中的代碼質(zhì)量水平。[4]這最終表明,代碼質(zhì)量是安全的必要條件(但不是充分條件),真正讓“安全性可以被視為開(kāi)發(fā)結束時(shí)才添加到設備上的東西”這一概念不攻自破。相反,安全性必須貫穿項目的DNA,從設計到編碼,一直到生產(chǎn)。

1701238309261293.jpg

編碼標準可提供很大的幫助

許多最常見(jiàn)的安全漏洞都在諸如mitre.org的通用缺陷列表等編碼標準中得到了解決,并指出了需要關(guān)注的其他方面,如除零錯誤、數據注入、循環(huán)不規則、空指針利用和字符串解析錯誤。MISRA C和MISRA C++還提倡編碼的安全性和可靠性,以防止安全漏洞滲入你的代碼。雖然這些編碼標準可以捕捉到許多常見(jiàn)的漏洞,但開(kāi)發(fā)人員在編寫(xiě)代碼時(shí)必須考慮得更長(cháng)遠:黑客是如何利用我剛剛編寫(xiě)的代碼的?漏洞在哪里?我是否對輸入會(huì )是什么樣子以及輸出會(huì )如何使用做了假設?一個(gè)好的經(jīng)驗法則是,如果你在做假設,那么這些假設應該變成代碼,以確保你所期待的東西實(shí)際上就是你所要得到的。如果你不這樣做,那么黑客就會(huì )出手了。

但是開(kāi)源軟件呢?在設計中使用開(kāi)源組件的典型論點(diǎn)依賴(lài)于“已在使用中被證明”(proven in use)的論點(diǎn):這么多人使用它,它一定是好的。SEI的同一篇論文對于這個(gè)問(wèn)題也有一些闡述:

“除了免費之外,開(kāi)源所宣揚的好處之一,就是認為‘有很多人關(guān)注源代碼意味著(zhù)安全問(wèn)題可以很快被發(fā)現,任何人都可以修復漏洞,不需要依賴(lài)供應商’。然而,現實(shí)情況是,如果沒(méi)能有紀律地、一致地把關(guān)注點(diǎn)放在消除漏洞上,安全漏洞和其他漏洞將出現在代碼中?!?/p>

換句話(huà)說(shuō),SEI認為,“已在使用中被證明”的論點(diǎn)毫無(wú)意義,并且在將質(zhì)量保證應用于開(kāi)源代碼時(shí),會(huì )讓人想起Anybody、Somebody、Nobody和Everybody的故事。此外,你的測試并不足以證明代碼是令人滿(mǎn)意的。SEI表示,像CWE這樣的代碼質(zhì)量標準可以發(fā)現你代碼中的問(wèn)題,而這些問(wèn)題往往不會(huì )在標準測試中被發(fā)現,通常只有在黑客利用漏洞時(shí)才會(huì )被發(fā)現。為了證明這一點(diǎn),2020年5月,普渡大學(xué)的研究人員展示了在Linux、macOS、Windows和FreeBSD中使用的開(kāi)源USB堆棧的26個(gè)漏洞。所以,談及安全性時(shí),代碼質(zhì)量是關(guān)鍵,并且所有代碼都很重要。

代碼分析工具有助于遵守標準

在解決代碼質(zhì)量問(wèn)題上,我們可以做些什么來(lái)提高自己應用程序的安全性呢?簡(jiǎn)單的答案就是使用代碼分析工具,這些工具有兩種基本類(lèi)型:靜態(tài)分析工具和運行時(shí)(或動(dòng)態(tài))分析工具,靜態(tài)分析只查看應用程序的源代碼,而運行時(shí)分析則是對代碼進(jìn)行檢測,尋找空指針和數據注入方法等漏洞。可以同時(shí)提供這兩種工具,包括靜態(tài)分析工具 C-STAT和運行時(shí)分析工具 C-RUN,它們都完全集成在IAR Embedded Workbench開(kāi)發(fā)環(huán)境中。高質(zhì)量的代碼分析工具包括對CWE、MISRA和CERT C的檢查。CERT C是另外一種編碼標準,旨在促進(jìn)編碼安全。這三個(gè)規則集共同構成了一個(gè)優(yōu)質(zhì)組合,有助于實(shí)現可提升安全性的編碼:一些規則集與其他規則集有重合之處,但也提供了一些獨特的功能,可以幫助確保你的代碼具有高度的安全性。使用這些標準也有助于確保你擁有最高的代碼質(zhì)量,甚至可能發(fā)現代碼中的一些潛在漏洞。

高質(zhì)量的代碼就是安全的代碼

保證代碼質(zhì)量才能確保代碼安全。不要把代碼質(zhì)量的責任推給別人,因為別人的漏洞很可能給你帶來(lái)安全性方面的噩夢(mèng)。但希望還是有的,因為代碼分析工具可以幫助你在漏洞找麻煩之前迅速發(fā)現問(wèn)題。通往安全的道路總是要經(jīng)過(guò)代碼質(zhì)量這一關(guān)口。



關(guān)鍵詞: 代碼質(zhì)量 IAR

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>