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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Yannick Moy 2022-10-21 11:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

C是Linux内核中使用的主要语言,因具有无穷无尽的漏洞源而臭名昭着。只需查看模糊测试机器人syzbot自动报告的一长串开放错误,这些错误仍在等待修复。

小组讨论围绕着适合内核开发的替代更安全的语言,如Ada和Rust,以及形式验证的需求,以超越编译器可以提供的保证。事实上,目前在Linux内核上报告的许多内存和安全漏洞都会在Ada或Rust中完全停止该程序,这只会稍微好一点。查看内核补丁可以发现,通过在代码上指定简单的属性可以检测到许多问题,例如在哪种模式下哪些调用是合法的,应该保留的数据类型不变量,以及如何使用适当的工具静态验证它们。

令人惊讶的是,在讨论中根本没有提到MISRA C,尽管它已经将自己确立为许多行业的必备品,以防止C语言的谬误。MISRA C于1998年作为C的编码标准出现,最初是汽车行业的编码标准,并已进行了两次修订。当前版本是 米斯拉 C:2012。它侧重于避免 C 编程语言中容易出错的功能,而不是强制实施特定的编程风格。由Les Hatton撰写的一项关于C编码标准的研究发现,与十个典型的C编码标准相比,MISRA C是唯一一个专注于避免错误而不是样式执行的标准,并且有很大的差距。

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,亚创和因里亚开发的SPARK工具集,它基于四个原则:

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

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

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

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

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

火花石水平 - 基本保证

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

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

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

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

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

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

SPARK银级 - 强大的安全保障

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

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

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

poYBAGNSDdqAOZh_AACUUBbzB8M323.png

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

超越白银级的火花

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

结论

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

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

由于C仍将是像Linux内核这样的大型程序的基础语言,我们可以预见两种趋势的共存,以更好地防止C程序中的谬误,其中MISRA C可以发挥作用,并用更安全的语言(如Rust和SPARK Ada)取代C作为部分代码。汽车行业的主要参与者已经开始走上后一条道路,如英伟达和捷太格特。

审核编辑:郭婷

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

    关注

    88

    文章

    11817

    浏览量

    219555
  • 编译器
    +关注

    关注

    1

    文章

    1672

    浏览量

    51913
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探秘HCS301:安全可靠的代码跳变编码器

    探秘HCS301:安全可靠的代码跳变编码器 电子工程领域,安全可靠的远程无钥匙进入(RKE)系统一直是研究和开发的重点。Microchip Technology Inc.推出的HCS301代码跳变
    的头像 发表于 04-07 11:05 160次阅读

    DS2477:安全可靠的SHA - 3协处理器

    DS2477:安全可靠的SHA - 3协处理器 在当今数字化时代,数据安全至关重要。无论是医疗设备、物联网节点,还是各类消费电子产品,都需要强大的安全防护机制来保护数据不被窃取和篡改。Maxim
    的头像 发表于 04-01 15:40 96次阅读

    深度剖析MAX32590:打造安全可靠的嵌入式设备

    深度剖析MAX32590:打造安全可靠的嵌入式设备 在当今数字化时代,嵌入式设备的安全性和性能成为了电子工程师们关注的焦点。MAX32590作为一款具备高度安全性和强大性能的微控制器,为我们带来
    的头像 发表于 03-26 16:50 273次阅读

    深度解析MAX32591:打造安全可靠的嵌入式系统

    深度解析MAX32591:打造安全可靠的嵌入式系统 在当今数字化时代,嵌入式系统的安全性和性能至关重要。Maxim Integrated推出的MAX32591 DeepCover安全微控制器,凭借
    的头像 发表于 03-26 16:50 358次阅读

    DeepCover® MAX32555:打造安全可靠的嵌入式设备

    DeepCover® MAX32555:打造安全可靠的嵌入式设备 在当今数字化时代,数据安全愈发重要,尤其是涉及敏感信息的设备。DeepCover®嵌入式
    的头像 发表于 03-26 16:40 191次阅读

    C语言安全编码指南:MISRA C、CERT C、CWE 与 C Secure 标准对比与Perforce QAC应用详解

    如何编写真正安全C语言代码?指南涵盖MISRA C、CERT、CWE等国际安全编码标准对比,以及如何借助Perforce QAC自动检测漏
    的头像 发表于 01-26 17:38 1097次阅读
    <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应用详解

    飞腾公司和长沙市国链安全可靠计算机产业促进中心签署合作协议

    1月22日,国家新一代自主安全计算系统产业集群工作推进会在湖南长沙成功举办。会上,飞腾信息技术有限公司(以下简称“飞腾公司”)和长沙市国链安全可靠计算机产业促进中心(以下简称“国链中心”)正式签署合作协议,联合共建“湖南省新一代自主安全
    的头像 发表于 01-26 16:59 1003次阅读

    汽车网络安全开发语言选型指南:C/C++/Rust/Java等主流语言对比+Perforce QAC/Klocwork工具支持

    汽车网络安全如何选编程语言?CC++、Rust、Java……谁更适合AUTOSAR、ISO/SAE 21434?一文了解8种主流语言的优劣与适用场景,以及Perforce QAC/K
    的头像 发表于 12-26 11:13 660次阅读
    汽车网络<b class='flag-5'>安全</b>开发语言选型指南:<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++/Rust/Java等主流语言对比+Perforce QAC/Klocwork工具支持

    S32Z2:安全可靠的高性能实时处理器

    S32Z2:安全可靠的高性能实时处理器 汽车电子和工业控制等领域,高性能实时处理器的需求日益增长。今天我们要探讨的NXP S32Z2处理器,就是一款安全和性能方面表现卓越的产品。
    的头像 发表于 12-24 11:10 538次阅读

    C语言嵌入式开发的应用

    对外部事件做出响应并完成任务的系统,对任务的响应时间和执行时间有着严格的要求。C 语言实时系统开发具有重要的地位,它能够满足实时系统对高效性、确定性和
    发表于 11-21 08:09

    安科瑞储能配套产品全场景解决方案,赋能储能系统安全可靠运行

    “双碳” 目标下,储能成为新型电力系统核心支撑。安科瑞打造涵盖数据监测、准确计量、安全防护、智能控制、系统协同的全链条解决方案,适配发电侧、电网侧、用户侧各类场景,保障储能系统安全可靠运行。
    的头像 发表于 09-29 09:34 714次阅读
    安科瑞储能配套产品全场景解决方案,赋能储能系统<b class='flag-5'>安全可靠</b>运行

    龙芯3B6000M处理器荣获安全可靠最高等级认证

    近日,中国信息安全测评中心发布《安全可靠测评结果公告(2025年第3号)》,龙芯3B6000M凭借卓越的性能表现和高水平的安全可靠性,成功入选目前最高等级Ⅱ级。
    的头像 发表于 09-16 11:33 1861次阅读

    深圳双芯信息科技:国产飞腾OPS电脑,安全可靠自主可控

    信息技术飞速发展的当下,信息安全已上升至国家战略高度,各行业对自主可控、安全可靠的计算设备需求愈发迫切。深圳双芯信息科技有限公司敏锐洞察市场趋势,凭借深厚的技术沉淀与创新精神,推出的国产飞腾OPS
    的头像 发表于 06-19 16:52 1321次阅读
    深圳双芯信息科技:国产飞腾OPS电脑,<b class='flag-5'>安全可靠</b>自主可控

    Helix QAC 2025.1 重磅发布!MISRA C:2025® 100%覆盖

    Helix QAC 2025.1新增功能 Helix QAC 2025.1实现了对新版MISRA C:2025®标准的 100% 覆盖,并提供对应的合规模块。此版本还扩展了对 CERT C
    的头像 发表于 05-13 16:48 1603次阅读
    Helix QAC 2025.1 重磅发布!<b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025® 100%覆盖

    MISRA C:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    MISRA C:2025®发布!新增5条规则,并对部分现有规则进行了扩展、重组,以进一步简化安全关键型系统的开发流程。如何实现最新MISRA合规性?
    的头像 发表于 05-08 17:58 3512次阅读
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)