0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MISRA C在安全可靠编程中的地位

星星科技指导员 来源:嵌入式计算设计 作者:Yannick Moy 2022-11-23 11:55 次阅读

C编程语言的普及,以及它的许多陷阱和陷阱,导致了MISRA C在C用于高完整性软件的领域取得了巨大的成功。这一成功促使工具供应商提出了许多MISRA C检查器的竞争实现。工具在它们帮助执行的MISRA C指南的覆盖范围上尤其竞争,因为不可能执行MISRA C的所有16个指令和143个规则(统称为指南)。

特别是,143 条规则中有 27 条是不可判定的,因此没有工具可以始终检测所有违反这些规则的行为,同时报告不构成违规的代码的“误报”。不可判定规则的一个例子是规则1.3:“不得发生未定义或关键的未指定行为。MISRA C:2012 的附录 H 列出了 C 编程语言标准中数百个未定义和关键未指定行为的案例,其中大多数无法单独判定。在大多数情况下,MISRA C 检查器忽略了不可判定的规则,例如规则 1.3,尽管已知违反这些规则会对软件质量产生巨大影响。

但是,对于其他编程语言,可以使用静态分析技术来应对这一挑战,而不会使用户误报淹没。一个例子是由AdaCore,Altran和Inria开发的SPARK工具集,它基于四个原则:

基础语言 Ada 通过定义明确的语言标准、强大的类型化和丰富的规范功能为静态分析提供了坚实的基础。

Ada 的 SPARK 子集通过控制歧义来源(如函数中的副作用和名称的别名)以基本方式限制基本语言以支持静态分析。

静态分析工具主要以单个函数的粒度工作,使分析更加精确,并最大限度地减少误报的可能性。

静态分析工具是交互式的,允许用户在必要时或需要时指导分析,并在用户提供的合同无法证明时提供反例。

SPARK 可以在 C 代码库中逐步采用,通过SPARK 采用的五个级别以及支持将形式分析 (SPARK) 与传统的基于测试的方法 (C) 相结合的“混合验证”来逐步获得保证。

火花石等级 - 基本保证

SPARK采用的第一级称为石头级。它对应于符合 Ada 的 SPARK 子集的代码。仅采用此级别即可保证许多无法对 C 强制执行的一致性属性。其中包括:

使用适当的包系统,而不是C使用基于文本的文件,没有翻译单元的一致性要求;

严格且可读的语法,强调清晰度并最大限度地减少“陷阱”,而不是 C 非常宽松的语法,这使得编写效果不是预期程序变得容易,

遵守 Ada 和 SPARK 的强类型规则,而不是 C 的“糟糕的类型安全性,允许发生广泛的隐式类型转换,这可能会损害安全性,因为它们的实现定义方面可能会导致开发人员混淆。(MISRA C:2012,附件C)

MISRA C试图通过各种准则来驯服C语言的这些可能的不一致之处。它特别定义了更强的类型规则(“基本类型模型”),并限制函数参数/结果和控制结构的使用。虽然这些避免了开发人员混淆的常见来源,但它们故意不是防弹的,否则它们会使大多数 C 程序非法。

这些基本保证在SPARK中很容易实现,通过一个名为GNATprove的工具进行简单的类似编译器的分析,这要归功于定义Ada的SPARK子集的更强大的规则。

SPARK 银级 - 强大的安全和安保保证

MISRA-C 指南还旨在防止更细微的错误、未初始化数据的读取、表达式中冲突的副作用以及未定义的行为,例如除以零或缓冲区溢出(这可能具有安全后果)。所有这些都属于不可判定规则的范畴,很少有MISRA C检查器提供完整的检测。

在 SPARK 采用的银牌级别完全可以防止这些情况,这对应于通过流分析(达到称为铜牌的 SPARK 采用的第二级)和证明没有运行时错误(达到第三级,即白银)来分析程序。要达到此级别,开发人员通常需要定义具有特定约束的类型,这些约束旨在支持和提供文件之间导出的函数的协定 - 使用所谓的前提条件来指定调用方的义务,以及后置条件来指定被调用方的义务。

达到银级的过程涉及与 IDE 的交互。开发人员运行 GNATprove 工具(可能在程序的子集上),调查 GNATprove 诊断,相应地更新程序,然后重复。GNATprove 在每一步都提供的详细信息促进了这种交互,以指导开发人员。以下是 GNATprove 显示的消息示例:

pYYBAGN9md-AUFN-AADbEpQjVIo527.png

在找到可能导致溢出的加法操作后,GNATprove 给出了一个触发问题的值的示例,这里是最大的整数值(在 SPARK 中表示为整数‘最后)。“检查原因”清楚地解释了加法的结果应该适合机器整数,如果 X 是加法前的最大整数值,则情况并非如此。然后,GNATprove 建议向函数 Incr 添加一个合适的前提条件可能会解决这个问题,在这里指定 X 不能是那个最大值。

超越银级的火花

使用SPARK还有更多的好处,远远超出了MISRA C检查器所能提供的。在黄金和白金级别,开发人员通过SPARK合同指定程序的属性,然后可以使用GNATprove 来保证这些属性将得到满足。开发人员还可以启用 GNATprove 警告来检测死代码(也是 MISRA C 追求的目标)和代码中的不一致,使用构成 GNATprove 分析基础的强大证明技术。

结论

从本质上讲,MISRA C追求的所有目标都可以在SPARK中最好地实现,结合更强大的基础语言(Ada)和强大的分析工具(GNATprove)。计划使用 MISRA C 规则的开发人员可以通过在其部分应用程序中采用 SPARK 来增强安全性。

MISRA C 中的规则代表了在关键应用程序中提高 C 代码可靠性的令人印象深刻的集体努力,重点是避免容易出错的功能,而不是强制实施特定的编程风格。然而,在基本层面上,MISRA C仍然建立在一种基础语言之上,而这种基础语言并不是为了支持大型高保证应用程序而设计的。很难将可靠性、安全性和安全性改造到一种从一开始就没有这些目标的语言中。

由于 C 仍将是像 Linux 内核这样的大型程序的基础语言,我们可以预见两种趋势的共存,以更好地防止 C 程序中的错误,MISRA C 可以发挥作用,并用更安全的语言(如 Rust 和 SPARK Ada )替换 C 作为部分代码。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33145
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66784
  • 检查器
    +关注

    关注

    0

    文章

    16

    浏览量

    3458
收藏 人收藏

    评论

    相关推荐

    PW4054充电芯片规格书概览:高效充电,无需外接元件,安全可靠

    PW4054充电芯片规格书概览:高效充电,无需外接元件,安全可靠
    的头像 发表于 03-01 14:44 406次阅读
    PW4054充电芯片规格书概览:高效充电,无需外接元件,<b class='flag-5'>安全可靠</b>

    汽车电子行业的MISRA C标准解读

    之前分享了一些编程规范相关的文章,有位读者提到了汽车电子行业的MISRA C标准,说这个很不错。
    的头像 发表于 01-17 11:03 289次阅读

    中国发布多款国产CPU及操作系统安全可靠测评结果

    依据《安全可靠测评工作指南(试行)》,测评主要针对计算机终端和服务器搭载的中央处理器(CPU)、操作系统及数据库等基础软件硬件进行。经过对核心技术、安全保障、持续发展等多个方面的全面评估,从而评定产品的安全性与可持续性
    的头像 发表于 12-27 14:36 737次阅读

    华为云云耀云服务器实例 L:为企业提供安全可靠的轻量应用服务器架构

    功能,如数据加密、访问控制和防火墙等,以保护用户数据的机密性和完整性。 并且,轻量应用服务器的安全可靠性对于应用的正常运行至关重要。在互联网应用中,服务器的稳定性和可靠性直接影响用户体验和业务连续性。轻量应用服务器
    的头像 发表于 09-08 00:07 203次阅读
    华为云云耀云服务器实例 L:为企业提供<b class='flag-5'>安全可靠</b>的轻量应用服务器架构

    您需要了解的有关下一个MISRA®标准的信息:MISRA C++ 2023®简介

    软件可靠性协会(MISRA)开发的一套C和C++编码标准,不仅是汽车行业的最佳标准之一,也是任何使用嵌入式系统的行业的最佳标准之一。
    的头像 发表于 08-25 18:06 933次阅读
    您需要了解的有关下一个<b class='flag-5'>MISRA</b>®标准的信息:<b class='flag-5'>MISRA</b> C++ 2023®简介

    台风下如何保障安全可靠的通信设备(虹科)

    虹科天线为紧急通信网络带来了对安全故障转移连接的能力,即使在不利条件下,在不同运营商之间切换并保持网络连接对于公共安全机构至关重要。拥有强大且可靠的通信解决方案可确保急救人员能够有效执行任务并在紧急情况下提供及时援助。
    发表于 08-04 11:43 487次阅读

    如何实现安全可靠的通信?

    超强台风“杜苏芮”在我国东南沿海地区造成了巨大的影响,华北和黄淮等地也正在遭受强降雨影响,而在救援抢险工作中紧急通信网络的稳定性至关重要,如何为救援人员提供可靠的通信呢?虹科带您了解
    的头像 发表于 08-02 08:05 521次阅读
    如何实现<b class='flag-5'>安全可靠</b>的通信?

    静态代码分析器工具Helix QAC 2023.2: 提供 100% 的 MISRA C:2012 和 MISRA C:2023 规则覆盖率

    Helix QAC 2023.2 提供 100% 的 MISRA C:2012 和 MISRA C:2023 规则覆盖率,并更新相应的合规性模块以支持 MISRA C:2023。 此外,此版
    的头像 发表于 07-31 22:53 773次阅读
    静态代码分析器工具Helix QAC 2023.2: 提供 100% 的 <b class='flag-5'>MISRA</b> C:2012 和 <b class='flag-5'>MISRA</b> C:2023 规则覆盖率

    百大案例 | “多合一”+“统一管”,华为防火墙助力墨西哥 CAPUFE实现多分支园区安全可靠

    点击“阅读原文”,了解更多华为数据通信资讯! 原文标题:百大案例 | “多合一”+“统一管”,华为防火墙助力墨西哥 CAPUFE实现多分支园区安全可靠 文章出处:【微信公众号:华为数据通信】欢迎添加关注!文章转载请注明出处。
    的头像 发表于 07-28 18:35 422次阅读
    百大案例 | “多合一”+“统一管”,华为防火墙助力墨西哥 CAPUFE实现多分支园区<b class='flag-5'>安全可靠</b>

    遵守 MISRA 如何提高C++应用的安全

    MISRA提供了一套适用于任何软件应用程序的全面指南,在确保软件安全性和稳定性方面发挥着至关重要的作用。这些准则包含各个方面,例如避免比较运算符右侧的副作用,以及不执行任何指针算术。虽然开发团队通常
    的头像 发表于 07-26 14:12 677次阅读
    遵守 <b class='flag-5'>MISRA</b> 如何提高C++应用的<b class='flag-5'>安全</b>性

    使用MPU监控创建安全可靠的嵌入式系统 使用MPU监控的原因和好处

    的一个基本安全措施是MPU(内存保护单元)监控。在本文中,我们将深入探讨MPU监控,分析其重要性、好处,以及它如何帮助创建安全可靠的嵌入式系统。
    的头像 发表于 07-21 11:04 567次阅读

    MISRA C Rule Checker SQMlint V.1.03 用户手册

    MISRA C Rule Checker SQMlint V.1.03 用户手册
    发表于 06-26 20:20 0次下载
    <b class='flag-5'>MISRA</b> C Rule Checker SQMlint V.1.03 用户手册

    应用于工业4.0安全可靠的无线传感网络

    通常来说,控制系统通常更重视其安全可靠性,而不是系统成本,这些系统有助于确保制造或加工场所的顺利和高效运行,因为任何错误、延迟或事故都将导致收入损失甚至人身伤亡。随着无线通信、能效、小型化和智能
    的头像 发表于 05-08 09:12 504次阅读
    应用于工业4.0<b class='flag-5'>安全可靠</b>的无线传感网络

    MISRA C Rule Checker SQMlint V.1.03 用户手册

    MISRA C Rule Checker SQMlint V.1.03 用户手册
    发表于 05-06 18:34 0次下载
    <b class='flag-5'>MISRA</b> C Rule Checker SQMlint V.1.03 用户手册

    如何将MISRA C:2023整合到您的嵌入式开发流程中

    MISRA C不是编码风格指南,而是一套规则和指令,用于最小化或消除已知危险的编码实践。鉴于对安全和安保关键型系统的这种重要性,AMD4 和 MISRA C:2023 版本使开发人员有机会重新审视其流程,以改进对有效和高效地证明
    的头像 发表于 05-04 09:58 1767次阅读
    如何将<b class='flag-5'>MISRA</b> C:2023整合到您的嵌入式开发流程中