一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

C 是 Linux 內(nèi)核中使用的主要語言,因漏洞無窮無盡而臭名昭著。只需查看由模糊機(jī)器人 syzbot 自動(dòng)報(bào)告的一長串未解決的錯(cuò)誤,這些錯(cuò)誤仍在等待修復(fù)。

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

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

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

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

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

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

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

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

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

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

SPARK Stone Level - 基本保證

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

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

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

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

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

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

SPARK 銀級(jí) - 強(qiáng)大的安全保障

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

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

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

pYYBAGK-VvSALUOkAAE0JPxg_Zs972.png

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

SPARK 超越白銀級(jí)

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

結(jié)論

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

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

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

審核編輯:郭婷

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

    關(guān)注

    87

    文章

    11509

    瀏覽量

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

    關(guān)注

    1

    文章

    1661

    瀏覽量

    50188
  • MISRA
    +關(guān)注

    關(guān)注

    0

    文章

    22

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

    直流充電安全測(cè)試負(fù)載方案解析

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

    人臉識(shí)別技術(shù)安全監(jiān)控的應(yīng)用

    現(xiàn)代社會(huì),安全監(jiān)控是維護(hù)公共安全和社會(huì)秩序的重要手段。隨著技術(shù)的進(jìn)步,傳統(tǒng)的監(jiān)控手段已經(jīng)無法滿足日益增長的安全需求。人臉識(shí)別技術(shù)作為一種新興的技術(shù),因其高效、準(zhǔn)確的特點(diǎn),
    的頭像 發(fā)表于 02-06 17:25 ?985次閱讀

    對(duì)稱加密技術(shù)實(shí)際應(yīng)用如何保障數(shù)據(jù)安全

    對(duì)稱加密技術(shù)實(shí)際應(yīng)用中保障數(shù)據(jù)安全主要通過以下幾個(gè)方面: 密鑰的安全性: 對(duì)稱加密的安全性高度依賴于密鑰的保密性。一旦密鑰泄露,加密的數(shù)據(jù)也就不再
    的頭像 發(fā)表于 12-16 13:59 ?672次閱讀

    智能安全配電裝置臨時(shí)展會(huì)場(chǎng)所如何保證用電安全

    安科瑞徐赟杰 18706165067 【摘要】 簡述了商場(chǎng)臨時(shí)展會(huì)、展攤等場(chǎng)所電氣裝置用電的特性,針對(duì)此類場(chǎng)所隱含的電氣安全隱患問題,結(jié)合智能安全配電裝置的功能,從用電設(shè)備的接地、
    的頭像 發(fā)表于 12-12 09:17 ?470次閱讀
    智能<b class='flag-5'>安全</b>配電裝置<b class='flag-5'>在</b>臨時(shí)展會(huì)場(chǎng)所<b class='flag-5'>中</b>如何保證用電<b class='flag-5'>安全</b>

    電氣安裝通過負(fù)載箱實(shí)現(xiàn)最大效率和安全

    電氣安裝,負(fù)載箱是一種常用的設(shè)備,主要用于模擬實(shí)際的電力負(fù)載,以便進(jìn)行各種電氣設(shè)備的測(cè)試和調(diào)試。通過負(fù)載箱,可以實(shí)現(xiàn)最大效率和安全性,從而提高電氣設(shè)備的運(yùn)行性能和使用壽命。 負(fù)載箱可以實(shí)現(xiàn)最大
    發(fā)表于 11-20 15:24

    智能安全配電裝置單位食堂的應(yīng)用

    安全配置該場(chǎng)所的應(yīng)用做下簡單探討。安科瑞任運(yùn)業(yè)+15021601437 關(guān)鍵詞:單位食堂;電氣火災(zāi);智能安全配電裝置 0.引言 近幾年,隨著我國經(jīng)濟(jì)的飛速發(fā)展,食堂餐飲也經(jīng)歷了一場(chǎng)
    的頭像 發(fā)表于 11-04 09:31 ?460次閱讀
    智能<b class='flag-5'>安全</b>配電裝置<b class='flag-5'>在</b>單位食堂<b class='flag-5'>中</b>的應(yīng)用

    socket編程安全性考慮

    Socket編程安全性是一個(gè)至關(guān)重要的考慮因素。以下是一些關(guān)鍵的安全性考慮和措施: 1. 數(shù)據(jù)加密 使用TLS/SSL協(xié)議 :TLS/
    的頭像 發(fā)表于 11-01 16:46 ?737次閱讀

    C/C對(duì)TMS320x28xx和28xxx外設(shè)進(jìn)行編程

    電子發(fā)燒友網(wǎng)站提供《C/C對(duì)TMS320x28xx和28xxx外設(shè)進(jìn)行編程.pdf》資料免費(fèi)下載
    發(fā)表于 10-16 10:28 ?0次下載
    <b class='flag-5'>在</b><b class='flag-5'>C</b>/<b class='flag-5'>C</b><b class='flag-5'>中</b>對(duì)TMS320x28xx和28xxx外設(shè)進(jìn)行<b class='flag-5'>編程</b>

    人員位置管理系統(tǒng):提升企業(yè)效率和安全性的利器

    在當(dāng)今競(jìng)爭激烈的商業(yè)環(huán)境,企業(yè)對(duì)于員工的管理和安全保障顯得尤為重要。傳統(tǒng)的員工出勤管理方式已經(jīng)逐漸被現(xiàn)代化的人員位置管理系統(tǒng)取代,該系統(tǒng)不僅能夠提升企業(yè)的工作效率,還能保障員工的安全
    的頭像 發(fā)表于 10-14 10:55 ?766次閱讀
    人員<b class='flag-5'>位置</b>管理系統(tǒng):提升企業(yè)效率和<b class='flag-5'>安全</b>性的利器

    C2000? MISRA-C策略

    電子發(fā)燒友網(wǎng)站提供《C2000? MISRA-C策略.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 11:43 ?0次下載
    <b class='flag-5'>C</b>2000? <b class='flag-5'>MISRA-C</b>策略

    TRIZ充電樁安全的應(yīng)用探究

    在當(dāng)今電動(dòng)汽車日益普及的時(shí)代,充電樁的安全問題至關(guān)重要。TRIZ(發(fā)明問題解決理論)可以為提升充電樁的安全性提供強(qiáng)大助力。具體步驟如深圳天行健企業(yè)管理咨詢公司下文所述: 一、充電樁安全
    的頭像 發(fā)表于 09-06 15:43 ?566次閱讀

    embOS的MISRA-C:2012一致性

    MISRA C是汽車工業(yè)軟件可靠性協(xié)會(huì)(MISRA)開發(fā)的一套針對(duì)C編程語言的軟件開發(fā)指南,目的是提升嵌入式系統(tǒng)的
    的頭像 發(fā)表于 08-20 11:35 ?870次閱讀

    whitepaper-perforce-what-is-misra

    如果您熟悉嵌入式軟件的世界,您可能聽說過安全關(guān)鍵系統(tǒng)的MISRA編碼準(zhǔn)則和合規(guī)性。最初為汽車嵌入式軟件行業(yè),MISRA C for
    發(fā)表于 08-08 15:54 ?0次下載