0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

半導(dǎo)體芯科技SiSC ? 來(lái)源:半導(dǎo)體芯科技SiSC ? 作者:半導(dǎo)體芯科技SiS ? 2023-12-01 09:07 ? 次閱讀

作者:Shawn Prestridge,IAR資深現(xiàn)場(chǎng)應(yīng)用工程師 / 美國(guó)FAE團(tuán)隊(duì)負(fù)責(zé)人

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

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

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

代碼漏洞容易成為黑客的目標(biāo)

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

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

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

不僅僅是緩沖區(qū)溢出

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

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

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

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

編碼標(biāo)準(zhǔn)可提供很大的幫助

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

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

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

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

代碼分析工具有助于遵守標(biāo)準(zhǔn)

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

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

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 半導(dǎo)體
    +關(guān)注

    關(guān)注

    334

    文章

    26875

    瀏覽量

    214412
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4723

    瀏覽量

    68238
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AIC3254使用一路mic輸入不使用mono mixer時(shí)音量要低很多,為什么?怎么解決?

    兩個(gè)mic輸入,用mono mixer把兩輸入合成一路,再用split分開(kāi)兩輸出。 這樣輸出的聲音較之前使用一路mic輸入不使用mono mixer時(shí)音量要低很多,這是為什么呢?
    發(fā)表于 11-05 06:22

    PCM1864EVM有8音頻輸入,可以同時(shí)得到這8的每一路信號(hào)嗎?

    1)PCM1864EVM 有8音頻輸入,可以同時(shí)得到這8的每一路信號(hào)嗎?如果不能最多能得到幾路? 2)PCM1864EVM 的USB插到計(jì)算機(jī)上,設(shè)置為mode2模式 僅有2
    發(fā)表于 10-28 06:35

    PCM1861只支持一路立體聲輸入?

    PCM186x手冊(cè)看到,軟控版本可以對(duì)輸入的四個(gè)通道進(jìn)行單獨(dú)選擇,選擇一路立體聲或者選擇其中幾路立體聲進(jìn)行輸入的混合,但是并沒(méi)看到有關(guān)硬控版本的PCM1861的相關(guān)說(shuō)明。是否在硬控模式下
    發(fā)表于 09-29 08:47

    西井科技聯(lián)合成立長(zhǎng)三角“一路”高質(zhì)量發(fā)展促進(jìn)會(huì)

    第六屆長(zhǎng)三角體化發(fā)展高層論壇在浙江溫州舉行,長(zhǎng)三角“一路”高質(zhì)量發(fā)展促進(jìn)會(huì)在現(xiàn)場(chǎng)揭牌。該促進(jìn)會(huì)以中國(guó)貿(mào)促會(huì)為業(yè)務(wù)主管單位,由包括上海西井科技股份有限公司(簡(jiǎn)稱(chēng)“西井科技”)在內(nèi)的
    的頭像 發(fā)表于 09-23 15:24 ?335次閱讀

    運(yùn)算放大器,芯片電阻電容之類(lèi)的都樣,一路能放大信號(hào),另一路就不能,為什么?

    運(yùn)算放大器,芯片電阻電容之類(lèi)的都樣,但是一路能放大信號(hào),另一路就不能,這可能使什么原因
    發(fā)表于 09-23 07:08

    使用兩塊AD5412,想要一路電壓,一路電流輸出,但是配置后 兩塊芯片還是不能同時(shí)分開(kāi)輸出電流和電壓,為什么?

    使用兩塊AD5412,想要一路電壓,一路電流輸出,但是配置后 兩塊芯片還是不能同時(shí)分開(kāi)輸出電流和電壓。 比如:我先配置1號(hào)DAC,輸出電壓,然后再配置2號(hào)DAC輸出電壓,這樣兩電壓是正常的。這個(gè)時(shí)候改變?nèi)我馔ǖ?,配置成電流,?/div>
    發(fā)表于 07-11 07:05

    tc397的dtm模塊輸出組pwm,可否讓其中一路直是高電平或低電平,另一路正常輸出pwm呢?

    tc397的dtm模塊輸出組pwm,可否讓其中一路直是高電平或低電平,另一路正常輸出pwm
    發(fā)表于 07-05 06:43

    一路同行,一路風(fēng)景—拓普聯(lián)科舉辦員工入職周年慶祝活動(dòng)

    、智能穿戴、智能家居、智慧醫(yī)療、物聯(lián)網(wǎng)、5G通信、設(shè)備制造商及汽車(chē)行業(yè)的客戶提供概念構(gòu)思到批量生產(chǎn)的站式跨學(xué)科精密零組件解決方案,幫助客戶更快更好的實(shí)現(xiàn)產(chǎn)品。
    的頭像 發(fā)表于 06-25 12:12 ?545次閱讀
    <b class='flag-5'>一路</b><b class='flag-5'>同行</b>,<b class='flag-5'>一路</b>風(fēng)景—拓普聯(lián)科舉辦員工入職周年慶祝活動(dòng)

    一路RS485信號(hào)轉(zhuǎn)LoRa和4G輸出方案

    本文旨在提出種簡(jiǎn)單可靠的“一路RS485信號(hào)轉(zhuǎn)一路LoRa和一路4G信號(hào)輸出解決方案”,實(shí)現(xiàn)將個(gè)RS485輸出信號(hào)轉(zhuǎn)發(fā)到兩個(gè)不同的設(shè)備或
    的頭像 發(fā)表于 05-09 14:52 ?676次閱讀
    <b class='flag-5'>一路</b>RS485信號(hào)轉(zhuǎn)LoRa和4G輸出方案

    使用兩片LTM4630可以實(shí)現(xiàn)三并聯(lián),另一路獨(dú)立輸出嗎?

    使用兩片LTM4630可以實(shí)現(xiàn)三并聯(lián)(電壓為1.0),另一路獨(dú)立輸出嗎(電壓為1.2V).
    發(fā)表于 01-04 07:00

    在AD73360設(shè)置好控制字進(jìn)入DATA MODE后,如何識(shí)別接收的數(shù)據(jù)是需要的那一路信號(hào)?

    中斷后無(wú)法確定接收的第個(gè)數(shù)據(jù)對(duì)應(yīng)的是哪一路信號(hào)。這就是如何把各路分開(kāi)的問(wèn)題。接收到的數(shù)據(jù)本身是無(wú)法區(qū)分具體對(duì)應(yīng)哪一路的,因?yàn)楦髀沸盘?hào)本身不具有其唯
    發(fā)表于 12-25 07:32

    使用AD9643的其中一路,另一路空余,模擬輸入該如何連接?

    使用AD9643的其中一路,另一路空余,模擬輸入該如何連接?是懸空,還是電阻或者電容接地?數(shù)據(jù)手冊(cè)沒(méi)有看到相關(guān)的連接說(shuō)明?;蛘哂袥](méi)有電路可以參考
    發(fā)表于 12-07 08:27

    AD5755-1芯片三電流輸出模式,有一路電流輸出異常的原因?怎么解決?

    AD5755-1配置為電流輸出模式,但三電流輸出中只有兩輸出正常(10mA左右),另一路異常(低于4mA)。經(jīng)測(cè)量發(fā)現(xiàn)電流異常的一路,其SW引腳波形與其他兩
    發(fā)表于 12-06 08:19

    為什么ADAU1452只有一路模擬輸出?

    大家好,我最近在使用ADAU1452,我向開(kāi)發(fā)板輸入兩的模擬音頻信號(hào),但是板子輸出卻只有一路,用示波器看過(guò)發(fā)現(xiàn)信號(hào)經(jīng)過(guò)AD1938之后就有一路沒(méi)有輸出,這是板子的問(wèn)題還是軟件要哪里設(shè)置??求大神解答,十分感謝?。?!
    發(fā)表于 11-29 08:10

    AD8014可以輸入兩差分信號(hào)使其輸出一路單端信號(hào)嗎?

    AD8014可以輸入兩差分信號(hào)使其輸出一路單端信號(hào)嗎?
    發(fā)表于 11-15 06:33