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

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

3天内不再提示

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

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

扫码添加小助手

加入工程师交流群

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

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

令人惊讶的是,在讨论中根本没有提到 MISRA C,尽管它已成为许多行业的必备工具,以防止 C 语言的错误。MISRA C 于 1998 年作为 C 的编码标准出现,最初用于汽车行业,经过两次修订。当前版本是 MISRA 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、Altran 和 Inria 开发的 SPARK 工具集,它基于四个原则:

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

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

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

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

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

SPARK Stone Level - 基本保证

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

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

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

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

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

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

SPARK 银级 - 强大的安全保障

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

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

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

pYYBAGK-VvSALUOkAAE0JPxg_Zs972.png

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

SPARK 超越白银级

使用 SPARK 还有其他好处,远远超出 MISRA C 检查器所能提供的。在 Gold 和 Platinum 级别,开发人员通过 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 用于部分代码。

审核编辑:郭婷

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

    关注

    88

    文章

    11628

    浏览量

    217930
  • 编译器
    +关注

    关注

    1

    文章

    1669

    浏览量

    51076
  • MISRA
    +关注

    关注

    0

    文章

    22

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32L052C8T6这种安全性低功耗MCU的安全固件部分怎么实现?

    请问,CW32L052C8T6这种安全性低功耗MCU的安全固件部分怎么实现?
    发表于 12-05 07:19

    单片机开发功能安全编译器

    ”的代码路径。高级语言,特别是CC ++,包含数量众多的功能,这些功能的行为不是代码所遵循的语言规范所规定的。这种不确定的行为可能导致意外的结果和潜在的灾难性后果,而这在功能安全的应用程序
    发表于 12-01 06:44

    物联网设备面临的多种安全威胁,数据传输安全威胁和设备身份安全威胁有何本质区别?

    物联网设备面临的多种安全威胁,数据传输安全威胁和设备身份安全威胁有何本质区别,实际应用哪一
    发表于 11-18 06:41

    芯源半导体安全芯片技术原理

    (椭圆曲线加密算法)等。与软件加密相比,硬件加密引擎具有加密速度快、抗攻击能力强的特点,能够快速对数据进行加密和解密操作,保障数据存储和传输过程的机密性。​ 安全存储区域:芯片内部设有独立的
    发表于 11-13 07:29

    电机维修安全注意事项

    。 个人防护用品穿戴 必须穿戴:绝缘鞋、防护手套(绝缘手套和防割伤手套)、长袖工作服(最好是防油防静电材质)、安全帽。 按需佩戴:防护眼镜(防止碎屑、油液飞溅)、听力保护装置(嘈杂环境)。 二
    发表于 10-29 13:14

    边聊安全 | 安全通讯的失效率量化评估

    安全通讯的失效率量化评估写在前面:评估硬件随机失效对安全目标的违反分析过程,功能安全的分析
    的头像 发表于 09-05 16:19 4534次阅读
    边聊<b class='flag-5'>安全</b> | <b class='flag-5'>安全</b>通讯<b class='flag-5'>中</b>的失效率量化评估

    存储示波器在校准过程需要注意哪些安全问题

    存储示波器的校准过程,需严格遵守电气安全、设备保护及操作规范,以避免人身伤害、设备损坏或数据丢失。以下从电气安全、设备防护、环境控制及操作流程四个维度,系统化梳理关键
    发表于 05-28 15:37

    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 1112次阅读
    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 1840次阅读
    <b class='flag-5'>MISRA</b> <b class='flag-5'>C</b>:2025新标准解析:新增规则、优化点与静态代码分析工具支持(Perforce QAC、Klocwork)

    直流充电安全测试负载方案解析

    随着电动汽车充电功率的快速提升和充电场景的复杂化,直流充电设备的安全性能成为行业关注的核心问题。充电桩、动力电池及车载充电系统实际运行可能面临过压、过流、绝缘故障等多重安全风险,因
    发表于 03-13 14:38

    人脸识别技术安全监控的应用

    现代社会,安全监控是维护公共安全和社会秩序的重要手段。随着技术的进步,传统的监控手段已经无法满足日益增长的安全需求。人脸识别技术作为一种新兴的技术,因其高效、准确的特点,
    的头像 发表于 02-06 17:25 1552次阅读

    AMR电机位置传感器汽车安全上的应用

    (AMR)位置传感器和基于分流器的电流检测放大器,如何使EPS和电子制动系统中使用的无刷电机实现高性能换相和安全运行,以及由ADI公司所提供的相关解决方案。
    的头像 发表于 01-09 09:38 1669次阅读
    AMR电机<b class='flag-5'>位置</b>传感器<b class='flag-5'>在</b>汽车<b class='flag-5'>安全</b>上的应用

    对称加密技术实际应用如何保障数据安全

    对称加密技术实际应用中保障数据安全主要通过以下几个方面: 密钥的安全性: 对称加密的安全性高度依赖于密钥的保密性。一旦密钥泄露,加密的数据也就不再
    的头像 发表于 12-16 13:59 1018次阅读

    交流负载箱的安全事项和注意事项有哪些?

    交流负载箱用于模拟实际负载的电气设备,广泛应用于电力系统、通信系统、自动化控制系统等领域。使用过程,为确保人身和设备安全,需要注意以下安全事项和注意事项: 选择合适的交流负载箱:根
    发表于 12-14 16:09

    智能安全配电装置临时展会场所如何保证用电安全

    安科瑞徐赟杰 18706165067 【摘要】 简述了商场临时展会、展摊等场所电气装置用电的特性,针对此类场所隐含的电气安全隐患问题,结合智能安全配电装置的功能,从用电设备的接地、
    的头像 发表于 12-12 09:17 688次阅读
    智能<b class='flag-5'>安全</b>配电装置<b class='flag-5'>在</b>临时展会场所<b class='flag-5'>中</b>如何保证用电<b class='flag-5'>安全</b>