91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

MISRA C在安全和安全編程中的位置

星星科技指導(dǎo)員 ? 來源:嵌入式計算設(shè)計 ? 作者:Yannick Moy ? 2022-06-20 16:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

小組討論圍繞著適合內(nèi)核開發(fā)的替代更安全的語言(如 Ada 和 Rust),以及形式驗證的需求超出了編譯器可以提供的保證。事實上,目前在 Linux 內(nèi)核上報告的許多內(nèi)存和安全漏洞會在 Ada 或 Rust 中完全停止程序,這只是稍微好一點。查看內(nèi)核補丁可以發(fā)現(xiàn),通過在代碼上指定簡單屬性可以檢測到許多問題,例如哪些調(diào)用在哪種模式下是合法的、應(yīng)該保留的數(shù)據(jù)不變量的類型以及如何使用適當?shù)墓ぞ哽o態(tài)驗證它們。

令人驚訝的是,在討論中根本沒有提到 MISRA C,盡管它已成為許多行業(yè)的必備工具,以防止 C 語言的錯誤。MISRA C 于 1998 年作為 C 的編碼標準出現(xiàn),最初用于汽車行業(yè),經(jīng)過兩次修訂。當前版本是 MISRA C:2012。它側(cè)重于避免 C 編程語言容易出錯的特性,而不是強制執(zhí)行特定的編程風(fēng)格。Les Hatton編寫的 C 編碼標準研究發(fā)現(xiàn),與十種典型的 C 編碼標準相比,MISRA C 是唯一一個專注于避免錯誤而不是風(fēng)格強制的標準,而且差距很大。

C 編程語言的流行,以及它的許多陷阱和陷阱,導(dǎo)致 MISRA C 在 C 用于高完整性軟件的領(lǐng)域中取得巨大成功。這一成功促使工具供應(yīng)商提出了許多相互競爭的 MISRA C 檢查器實施方案。工具尤其在它們幫助執(zhí)行的 MISRA C 指南的覆蓋范圍內(nèi)競爭,因為不可能執(zhí)行 MISRA C 的所有 16 條指令和 143 條規(guī)則(統(tǒng)稱為指南)。

特別是,143 條規(guī)則中有 27 條是不可判定的,因此沒有任何工具能夠始終檢測到所有違反這些規(guī)則的行為,而不同時對不構(gòu)成違規(guī)的代碼報告“錯誤警報”。不可判定規(guī)則的一個例子是規(guī)則 1.3:“不得發(fā)生未定義或關(guān)鍵的未指定行為”。MISRA C:2012 的附錄 H 列出了 C 編程語言標準中數(shù)百個未定義和關(guān)鍵未指定行為的案例,其中大多數(shù)無法單獨確定。在大多數(shù)情況下,MISRA C 檢查器會忽略無法確定的規(guī)則,例如規(guī)則 1.3,盡管眾所周知,違反這些規(guī)則會對軟件質(zhì)量產(chǎn)生巨大影響。

但是,對于其他編程語言,可以使用靜態(tài)分析技術(shù)來應(yīng)對這一挑戰(zhàn),而不會因誤報而淹沒用戶。一個例子是由 AdaCore、Altran 和 Inria 開發(fā)的 SPARK 工具集,它基于四個原則:

基礎(chǔ)語言 Ada 通過定義明確的語言標準、強類型和豐富的規(guī)范特性為靜態(tài)分析提供了堅實的基礎(chǔ)。

Ada 的 SPARK 子集通過控制歧義的來源(例如函數(shù)的副作用和名稱的別名)以支持靜態(tài)分析的基本方式限制了基礎(chǔ)語言。

靜態(tài)分析工具主要以單個函數(shù)的粒度工作,使分析更加精確,并最大限度地減少誤報的可能性。

靜態(tài)分析工具是交互式的,允許用戶在必要或需要時指導(dǎo)分析,并在用戶提供的合約無法證明時提供反例。

SPARK 可以在 C 代碼庫中逐步采用,通過SPARK 采用的五個級別逐步獲得保證,并通過支持將形式分析 (SPARK) 與傳統(tǒng)的基于測試的方法 (C) 相結(jié)合的“混合驗證”。

SPARK Stone Level - 基本保證

SPARK 采用的第一級稱為 Stone Level。它對應(yīng)于符合 Ada 的 SPARK 子集的代碼。僅僅采用這個級別就可以保證許多 C 語言無法強制執(zhí)行的一致性屬性。其中包括:

使用適當?shù)陌到y(tǒng),而不是 C 使用基于文本的文件包含,并且沒有跨翻譯單元的一致性要求;

嚴格和可讀的語法,強調(diào)清晰并最大限度地減少“陷阱”,而不是 C 的非常寬松的語法,這使得編寫效果不是預(yù)期的程序變得容易,

遵守 Ada 和 SPARK 的強類型規(guī)則,而不是 C 的“較差的類型安全性 [that] 允許發(fā)生廣泛的隱式類型轉(zhuǎn)換 [which] 可能會損害安全性,因為它們的實現(xiàn)定義方面可能會導(dǎo)致開發(fā)人員混淆。 “(MISRA C:2012,附件 C)

MISRA C 試圖通過各種指導(dǎo)來馴服 C 語言的這些可能的不一致。它特別定義了更強的類型規(guī)則(“基本類型模型”)并限制函數(shù)參數(shù)/結(jié)果和控制結(jié)構(gòu)的使用。雖然這些避免了開發(fā)人員混淆的常見來源,但它們故意不是防彈的,否則它們會使大多數(shù) C 程序非法。

由于定義了 Ada 的 SPARK 子集的更強大的規(guī)則,這些基本保證很容易在 SPARK 中通過一個名為 GNATprove 的工具進行類似編譯器的簡單分析來實現(xiàn)。

SPARK 銀級 - 強大的安全保障

MISRA-C 指南還旨在防止更細微的錯誤、未初始化數(shù)據(jù)的讀取、表達式中的沖突副作用以及未定義的行為,例如除以零或緩沖區(qū)溢出(可能具有安全性和安全性后果)。所有這些都屬于不可判定規(guī)則的范疇,很少有 MISRA C 檢查器能提供完整的檢測。

這些在 SPARK 采用的 Silver 級別上完全被阻止,這對應(yīng)于使用流分析(達到 SPARK 采用的第二級,稱為 Bronze)和不存在運行時錯誤的證明(達到第三級,即銀)。為了達到這個水平,開發(fā)人員通常需要定義具有特定約束的類型,這些約束旨在支持和提供文件之間導(dǎo)出的函數(shù)的合同——使用所謂的前置條件來指定調(diào)用者的義務(wù),并使用后置條件來指定調(diào)用者的義務(wù)。被叫方的義務(wù)。

達到 Silver 級別的過程涉及與 IDE 的交互。開發(fā)人員可能在程序的一個子集上運行 GNATprove 工具,調(diào)查 GNATprove 診斷,相應(yīng)地更新程序,然后重復(fù)。GNATprove 在每一步都提供了詳細的信息來指導(dǎo)開發(fā)人員,從而促進了此類交互。以下是 GNATprove 顯示的消息示例:

pYYBAGKwKt2AYDVTAAE3CZSjSrk663.png

在找到可能導(dǎo)致溢出的加法運算后,GNATprove 給出了一個觸發(fā)問題的值的示例,這里是最大的 Integer 值(在 SPARK 中表示為 Integer‘Last)?!皺z查原因”清楚地解釋了加法的結(jié)果應(yīng)該適合機器整數(shù),如果 X 是加法之前的最大整數(shù)值,則情況并非如此。然后,GNATprove 建議向函數(shù) Incr 添加合適的前提條件可能會解決問題,方法是在此處指定 X 不能是那個最大值。

SPARK 超越白銀級

使用 SPARK 還有其他好處,遠遠超出 MISRA C 檢查器所能提供的。在 Gold 和 Platinum 級別,開發(fā)人員通過 SPARK 合同指定程序的屬性,然后可以使用 GNATprove 來保證這些屬性將得到滿足。開發(fā)人員還可以啟用 GNATprove 警告以檢測死代碼(也是 MISRA C 追求的目標)和代碼中的不一致,使用構(gòu)成 GNATprove 分析基礎(chǔ)的強大證明技術(shù)。

結(jié)論

從本質(zhì)上講,MISRA C 追求的所有目標都在 SPARK 中得到了最好的實現(xiàn),結(jié)合了更強大的基礎(chǔ)語言 (Ada) 和強大的分析工具 (GNATprove)。計劃使用 MISRA C 規(guī)則的開發(fā)人員可以通過在其部分應(yīng)用程序中采用 SPARK 來獲得更高的保證。

MISRA C 中的規(guī)則代表了一項令人印象深刻的集體努力,旨在提高關(guān)鍵應(yīng)用程序中 C 代碼的可靠性,重點是避免容易出錯的功能,而不是強制執(zhí)行特定的編程風(fēng)格。然而,從根本上說,MISRA C 仍然建立在一種基礎(chǔ)語言之上,而這種基礎(chǔ)語言的設(shè)計目的并不是為了支持大型高保證應(yīng)用程序。很難將可靠性、安全性和安全性改造成一門從一開始就沒有這些目標的語言。

由于 C 仍將是 Linux 內(nèi)核等大型程序的基礎(chǔ)語言,我們可以預(yù)見兩種趨勢的共存,以更好地防止 C 程序中的錯誤,其中 MISRA C 可以發(fā)揮作用,并用更安全的語言(如 Rust 和SPARK Ada 用于部分代碼。

審核編輯:郭婷

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

    關(guān)注

    88

    文章

    11760

    瀏覽量

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

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73988
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1672

    瀏覽量

    51618
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AT32F011系列安全庫區(qū)的應(yīng)用

    在fir_filter.c 文件里 · fir_coefficient.cC文件內(nèi)含F(xiàn)IR濾波器函數(shù)所使用的系數(shù)(只讀的常數(shù)),范例中會將這些系數(shù)放置到唯讀
    發(fā)表于 01-30 14:20

    C語言安全編碼指南:MISRA C、CERT C、CWE 與 C Secure 標準對比與Perforce QAC應(yīng)用詳解

    如何編寫真正安全C語言代碼?指南涵蓋MISRA C、CERT、CWE等國際安全編碼標準對比,以及如何借助Perforce QAC自動檢測漏
    的頭像 發(fā)表于 01-26 17:38 ?818次閱讀
    <b class='flag-5'>C</b>語言<b class='flag-5'>安全</b>編碼指南:<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>、CERT <b class='flag-5'>C</b>、CWE 與 <b class='flag-5'>C</b> Secure 標準對比與Perforce QAC應(yīng)用詳解

    汽車網(wǎng)絡(luò)安全開發(fā)語言選型指南:C/C++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    汽車網(wǎng)絡(luò)安全如何選編程語言?C、C++、Rust、Java……誰更適合AUTOSAR、ISO/SAE 21434?一文了解8種主流語言的優(yōu)劣與適用場景,以及Perforce QAC/K
    的頭像 發(fā)表于 12-26 11:13 ?435次閱讀
    汽車網(wǎng)絡(luò)<b class='flag-5'>安全</b>開發(fā)語言選型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++/Rust/Java等主流語言對比+Perforce QAC/Klocwork工具支持

    立宏安全#SM-602可編程安全控制器#LHS可編程安全控制器

    作為安全回路最重要環(huán)節(jié),安全控制器/安全PLC已經(jīng)越來越多的被人們所認知,但是使用的過程,仍然有很多使用者困惑,
    的頭像 發(fā)表于 12-18 14:26 ?197次閱讀
    立宏<b class='flag-5'>安全</b>#SM-602可<b class='flag-5'>編程</b><b class='flag-5'>安全</b>控制器#LHS可<b class='flag-5'>編程</b><b class='flag-5'>安全</b>控制器

    請問CW32L052C8T6這種安全性低功耗MCU的安全固件部分怎么實現(xiàn)?

    請問,CW32L052C8T6這種安全性低功耗MCU的安全固件部分怎么實現(xiàn)?
    發(fā)表于 12-05 07:19

    單片機開發(fā)功能安全編譯器

    ”的代碼路徑。高級語言,特別是CC ++,包含數(shù)量眾多的功能,這些功能的行為不是代碼所遵循的語言規(guī)范所規(guī)定的。這種不確定的行為可能導(dǎo)致意外的結(jié)果和潛在的災(zāi)難性后果,而這在功能安全的應(yīng)用程序
    發(fā)表于 12-01 06:44

    物聯(lián)網(wǎng)設(shè)備面臨的多種安全威脅,數(shù)據(jù)傳輸安全威脅和設(shè)備身份安全威脅有何本質(zhì)區(qū)別?

    物聯(lián)網(wǎng)設(shè)備面臨的多種安全威脅,數(shù)據(jù)傳輸安全威脅和設(shè)備身份安全威脅有何本質(zhì)區(qū)別,實際應(yīng)用哪一
    發(fā)表于 11-18 06:41

    芯源半導(dǎo)體安全芯片技術(shù)原理

    (橢圓曲線加密算法)等。與軟件加密相比,硬件加密引擎具有加密速度快、抗攻擊能力強的特點,能夠快速對數(shù)據(jù)進行加密和解密操作,保障數(shù)據(jù)存儲和傳輸過程的機密性。? 安全存儲區(qū)域:芯片內(nèi)部設(shè)有獨立的
    發(fā)表于 11-13 07:29

    電機維修安全注意事項

    。 個人防護用品穿戴 必須穿戴:絕緣鞋、防護手套(絕緣手套和防割傷手套)、長袖工作服(最好是防油防靜電材質(zhì))、安全帽。 按需佩戴:防護眼鏡(防止碎屑、油液飛濺)、聽力保護裝置(嘈雜環(huán)境)。 二
    發(fā)表于 10-29 13:14

    邊聊安全 | 安全通訊的失效率量化評估

    安全通訊的失效率量化評估寫在前面:評估硬件隨機失效對安全目標的違反分析過程,功能安全的分析
    的頭像 發(fā)表于 09-05 16:19 ?7732次閱讀
    邊聊<b class='flag-5'>安全</b> | <b class='flag-5'>安全</b>通訊<b class='flag-5'>中</b>的失效率量化評估

    無法將 XOM 設(shè)置為非安全區(qū)域,為什么?

    M2351 ,我將非安全邊界設(shè)置為0x40000。 非安全區(qū)域應(yīng)為 0x10040000 ~ 0x1007ffff。 然后,我將 XOM 設(shè)置為 0x10060000,但它失敗了
    發(fā)表于 08-27 07:01

    存儲示波器在校準過程需要注意哪些安全問題

    存儲示波器的校準過程,需嚴格遵守電氣安全、設(shè)備保護及操作規(guī)范,以避免人身傷害、設(shè)備損壞或數(shù)據(jù)丟失。以下從電氣安全、設(shè)備防護、環(huán)境控制及操作流程四個維度,系統(tǒng)化梳理關(guān)鍵
    發(fā)表于 05-28 15:37

    Helix QAC 2025.1 重磅發(fā)布!MISRA C:2025? 100%覆蓋

    Helix QAC 2025.1新增功能 Helix QAC 2025.1實現(xiàn)了對新版MISRA C:2025?標準的 100% 覆蓋,并提供對應(yīng)的合規(guī)模塊。此版本還擴展了對 CERT C
    的頭像 發(fā)表于 05-13 16:48 ?1464次閱讀
    Helix QAC 2025.1 重磅發(fā)布!<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025? 100%覆蓋

    MISRA C:2025新標準解析:新增規(guī)則、優(yōu)化點與靜態(tài)代碼分析工具支持(Perforce QAC、Klocwork)

    MISRA C:2025?發(fā)布!新增5條規(guī)則,并對部分現(xiàn)有規(guī)則進行了擴展、重組,以進一步簡化安全關(guān)鍵型系統(tǒng)的開發(fā)流程。如何實現(xiàn)最新MISRA合規(guī)性?
    的頭像 發(fā)表于 05-08 17:58 ?2869次閱讀
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新標準解析:新增規(guī)則、優(yōu)化點與靜態(tài)代碼分析工具支持(Perforce QAC、Klocwork)

    直流充電安全測試負載方案解析

    隨著電動汽車充電功率的快速提升和充電場景的復(fù)雜化,直流充電設(shè)備的安全性能成為行業(yè)關(guān)注的核心問題。充電樁、動力電池及車載充電系統(tǒng)實際運行可能面臨過壓、過流、絕緣故障等多重安全風(fēng)險,因
    發(fā)表于 03-13 14:38