安全编码技术:提高嵌入式应用代码安全性与可靠性

发布者:EE小广播最新更新时间:2024-08-27 来源: EEWORLD关键字:安全  编码技术  嵌入式 手机看文章 扫描二维码
随时随地手机看文章

编程语言的现代化和更好的编码技术与从机械计算机到现代软件开发流程的演变直接相关。我们已经从高度专业化、主要是数学符号的表示法过渡到了更接近人类语法的高级编程语言,这一进步归功于编译器技术。然而,这也打开了代码缺陷之门。 C和C++ 等高级编程语言,包含大量未定义的行为,而不同的编译器对这些行为的解释可能略有不同,这可能会导致未知或不希望出现的副作用,最终转化为缺陷。


查找和修复这些缺陷可能会占用高达80%的开发时间,具体取决于开发机构的成熟程度。这引出了一个明显的结论:代码质量是一个大问题。那么,为什么不尽量避免缺陷,以减少调试所需的时间呢?


顺便说一句,我们现在仍然在软件中使用“错误”和“调试”这些概念,但这些词的起源可以追溯到哈佛大学的机械计算机。当时,一只飞蛾卡在继电器中,这一事件被记录为计算机历史上第一个“错误”或缺陷。


一次又一次重复同样的错误


众所周知,在Web、应用程序、桌面,甚至嵌入式开发中,开发人员往往会无意间一次又一次地在他们的源代码中引入相同类型的错误。这个结论来自于多个重要机构,如NASA、贝尔实验室和MITRE,他们进行了多项调查和研究。常见缺陷的例子包括在C++代码(甚至C代码)中没有进行分配后的释放,以及使用没有原型的函数,因此无法在编译时进行严格的类型检查。这项研究的结果列出了最佳编程实践或推荐的编程实践,它们可以识别有风险的和不良的编码行为。


有许多关于如何提高代码质量的指南和编码实践,它们都基于常见的错误,并指出了如何在将来避免这些常见错误。其中一些技巧和实践已经成为被广泛接受的标准(比如MISRA-C和CERT-C),特别是在汽车、医疗和铁路等关键行业中,以确保应用程序的代码安全性(code safety)和代码防护能力(code security)。诸如IEC 61508、EN 50128和ISO 26262等功能安全标准建议[或强烈建议,具体取决于安全完整性等级(SIL)或汽车安全完整性等级(ASIL)]使用静态和运行时分析工具,以满足标准。因为安全关键系统中的缺陷可能会导致严重后果,如人员伤亡或环境破坏。


关注可靠性


安全编码技术要综合考虑代码质量、代码安全性和代码防护能力。代码安全性关注的是软件的可靠性,而代码防护能力则旨在防止不必要的活动,并且在遭受攻击时确保系统安全。这两者都高度依赖于代码质量,因为代码质量是每个可靠应用程序的基础。


安全编码技术和标准的目标是推动软件的安全性,以确保所需的可靠性。然而,同样重要的是提高源代码的可读性和可维护性。更高效、更易读的代码意味着源代码更加健壮、缺陷更少且在未来可用,有助于提高代码的可重用性。


MISRA C是最成熟的软件开发标准之一,可以避免常见的缺陷和漏洞。当然,还有一些其他指南,如CWE和CERT-C编码标准,这些标准对于任何嵌入式应用程序都是强烈推荐的。下面让我们更深入地了解这些编码标准。


MISRA C标准


MISRA C由汽车行业软件可靠性协会(Motor Industry Software Reliability Association)开发,它的目标是提高嵌入式系统中代码的安全性、可移植性和可靠性,尤其是那些使用ISO C编程的系统。


MISRA C标准的第一版名为《车载软件C语言开发指南》,于1998年发布,正式名称为MISRA-C:1998。之后于2004年和2012年进行了更新,添加了更多的规则。另外,还有基于C++ 2003的MISRA C++ 2008标准。此后,MISRA C: 2012的修正案1又添加了14条附加规则,重点关注ISO C安全指南(Secure Guidelines)中强调的安全问题(security concerns)。其中一些规则解决了在许多嵌入式应用程序中已知的安全漏洞之一:与使用不可信数据相关的特定问题。


MISRA规则可以帮助您在提交代码进行正式构建之前发现问题,因此通过这种方式发现的缺陷就好像缺陷从未存在过一样。MISRA规则的设计是以安全性和可靠性为前提的,同时也让代码更容易移植到其他工具和架构上。


CWE and CERT C/C++


CWE,即通用缺陷列表(Common Weakness Enumeration),是一个由社区开发的有关软件缺陷的词典。CWE提供了一套统一的、可衡量的软件缺陷,以便更好地理解和管理它们,并且可以支持能够发现它们的高效软件安全工具和服务。


CERT C/C++安全编码标准(Secure Coding Standards)是由计算机紧急响应小组(Computer Emergency Response Team,CERT)发布的标准,提供了有关C/C++编程语言中安全编码(secure coding)的规则和建议。


实施安全编码技术


作为通常性的建议,每个嵌入式应用程序至少都应遵循MISRA(对于安全关键系统,MISRA 是强制性的)、CWE和CERT C/C++标准。


遵循这些编码标准之后,在运行时,您的应用程序仍然可能会受到算术问题、缓冲区溢出、边界问题、堆完整性和内存泄漏等问题的影响。要检测到这些错误,可以在可能发生潜在错误的所有位置插入特定的检测代码或断言。然而,手动添加指令来检查并在运行时报告问题是一项非常耗时的任务。


要遵守所有这些指南和标准,您需要遵循近700条规则和要求,同时还需要在源代码中添加检测代码。那么,如何实施安全编码技术并遵循所有这些规则呢?


使用自动化工具


提高软件质量、安全性和可靠性的最佳方法是使用自动化工具。这可以通过使用高质量的编译器和链接器(最好是经过功能安全认证的编译器和链接器),以及自动化的静态分析和运行时分析工具来实现。


IAR作为全球领先的嵌入式系统开发软件解决方案供应商,所提供的集成开发环境IAR Embedded Workbench就包括了编译器、汇编器、链接器和调试器,并无缝集成了静态分析工具 C-STAT和运行时分析工具C-RUN,形成了完整的工具链。凭借这些强大的功能,IAR Embedded Workbench可以确保代码的稳健性、安全性和高质量。


我们先来看看编译器和链接器,它们应该支持现代编程语言,比如最新的C(ISO/IEC 9899:2018)和C++(ISO/IEC 14882:2020,也称为C++20修订版),这样它们就会在出现可疑情况或语法问题时生成警告,例如,易失性内存访问,其求值顺序可能会影响应用程序的逻辑。


编译器和链接器警告(warnings)是您的第一步静态分析检查,绝不能忽视,特别是在功能安全环境中。最佳建议是通过更改编译器设置将所有警告视为错误,这样就可以将这些警告转换为错误。这将让开发人员修复代码中的所有不明确之处,因为所有问题都将被视为真正的问题。


静态分析工具可以帮助您发现代码中最常见的缺陷,同时还可以帮助您找出开发人员在尝试编写代码时通常不会考虑或担心的问题,尤其是当他们只是编写脚手架代码以使某些功能正常运行时。这种类型的工具确实可以帮助您开发更高质量的代码,因为它们可以帮助您实施编码标准。IAR的C-STAT静态分析工具无需任何安装和静态代码分析工程创建,只需要进行简单的规则设置,就可以在构建(Build)成功之后进行静态代码分析,非常适合开发人员在日常开发过程中使用。


此外,还有动态或运行时分析工具,可以捕获仅在运行时出现的代码缺陷。动态或运行时分析工具可以在于软件调试器中执行程序时发现代码中的实际和潜在错误。IAR的C-RUN动态分析工具通过简单的配置、重新编译、运行,即可实现算术检查、边界检查和堆检查。使用C-RUN无需对现有流程做任何修改,可作为日常开发工作流程的自然组成部分,这极大地降低了动态分析工具的使用门槛。


当您查看系统中可能存在的所有缺陷时,静态分析工具擅长找到某些类型的缺陷,而运行时分析工具则擅长找到其他类型的缺陷。有时它们可能会有重叠,但有时只有一种工具才能检测到某个缺陷。要获得最全面的代码分析,最好将这两种工具结合使用,并将它们与顶尖的构建工具集成在一起。下图的矩阵很好地展示了在结合不同工具进行检测时完整的缺陷覆盖范围。


image.png?imageView2/2/w/1000


总结


随着嵌入式系统的复杂性提高,对于嵌入式软件的要求也越来越高,其中最核心最根本的是代码质量,而遵循编码标准的安全编码技术是提高代码质量的最佳实践。实施安全编码技术最有效的方式是应用自动化工具,包括编译器、链接器、静态分析工具、运行时分析工具。这样可以高效地在开发过程中提高代码质量及其安全性和可靠性,既减少了项目的开发时间和成本,又提高了产品的质量和竞争力。


关键字:安全  编码技术  嵌入式 引用地址:安全编码技术:提高嵌入式应用代码安全性与可靠性

上一篇:现场送瑞米派!米尔预约瑞萨RZ/G通用MPU研讨会
下一篇:开源嵌入式编译器,没想象中那么好?

推荐阅读最新更新时间:2026-03-20 19:26

Microchip推出PIC18-Q24 系列单片机 为增强代码安全性设置新标准
该系列单片机新增电压电平转换功能,有助于提高灵活性并降低系统成本 从手机、汽车到智能恒温器和家用电器,越来越多日常设备与云端相连。随着连接性增多,在芯片层面部署先进的安全措施以保护固件和数据,就变得至关重要。为了应对当前和不断扩大的安全威胁,Microchip Technology Inc.(微芯科技公司)今日发布PIC18-Q24 系列单片机(MCU)。 为应对在嵌入式系统中对器件进行恶意重新编程的威胁,PIC18-Q24单片机引入了编程和调试接口禁用(PDID)功能。启用后,这一增强型代码保护功能将锁定对编程/调试接口的访问,并阻止未经授权的读取、修改或擦除固件的尝试。 Microchip 8位单片机业务部副
[单片机]
Microchip推出PIC18-Q24 系列单片机  为增强<font color='red'>代码</font><font color='red'>安全性</font>设置新标准
IAR推出的IAR Embedded Trust实现了强大的端到端嵌入式安全解决方案
IAR推出的IAR Embedded Trust实现了强大的端到端嵌入式安全解决方案 利用IAR Embedded Trust,客户可以轻松解决安全问题,开发具有独特配置的设备,并在产品生命周期的所有阶段抵御威胁 瑞典乌普萨拉–2023年3月29日–嵌入式开发软件和服务的全球领导者IAR宣布推出IAR Embedded Trust,一种嵌入式行业中功能强大的端到端安全工作流程。通过这一最新版本的解决方案,IAR兑现了其“Security Made Simple”(安全让一切变得简单)的承诺,帮助客户快速、轻松地管理、优先处理和减轻潜在的安全问题。 IAR Embedded Trust通过“4A”保护客户的数据和设
[嵌入式]
<font color='red'>IAR</font>推出的<font color='red'>IAR</font> Embedded Trust实现了强大的端到端<font color='red'>嵌入式</font><font color='red'>安全</font>解决方案
IAR Systems和Secure Thingz宣布推出安全的开发和量产平台
IAR Systems和Secure Thingz宣布推出安全的开发和量产平台,以加速向微软Azure IoT迁移 来自IAR Systems和Secure Thingz的增强型解决方案可支持大批量的、安全的设备的开发和生产,可实现设备的自动上线以及与微软Azure云服务的集成 中国上海,2021年11月1日--为嵌入式开发提供面向未来的软件开发工具和服务的供应商IAR Systems®,以及IAR Systems集团旗下公司Secure Thingz日前联合宣布:为Microsoft Azure IoT和RTOS物联网与实时操作系统平台提供完整的 “从开发到部署” 解决方案。该解决方案能够实现快速的开发并简化设备部署,并
[嵌入式]
IAR开发平台升级Arm和RISC-V开发工具链,加速现代嵌入式系统开发
瑞典乌普萨拉,2025年6月10日 — 全球领先的嵌入式软件解决方案供应商IAR正式发布其旗舰产品的重大更新版本: Arm开发工具链v9.70和RISC-V开发工具链v3.40,大幅提升了IAR开发平台在性能、安全性和自动化方面的能力,助力汽车、工业、医疗和物联网等行业中的敏捷、可扩展嵌入式应用。 为应对嵌入式系统日益增长的复杂性,全新的IAR开发工具链支持云端许可、CI/CD管道集成和多种架构的开发。随着Arm和RISC-V持续推动技术演进,IAR推出统一的开发平台,提供高质量且具安全保障的开发体验。新版本帮助客户提升研发效率、降低研发成本、缩短产品上市时间,从而使复杂的嵌入式系统开发更具可预测性和可扩展性。 IAR首席
[嵌入式]
<font color='red'>IAR</font>开发平台升级Arm和RISC-V开发工具链,加速现代<font color='red'>嵌入式</font>系统开发
IAR推动嵌入式开发:云就绪、可扩展的CI/CD和可持续自动化
中国上海,2025年4月7日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR正式发布全新云就绪平台,为嵌入式开发团队提供企业级的可扩展性、安全性和自动化能力 。该平台于在德国纽伦堡举办的embedded world 2025展会上正式亮相,标志着将现代DevSecOps工作流集成到嵌入式软件开发中已迈出了重要一步。 实现嵌入式系统的可扩展云端CI/CD 随着嵌入式系统的不断演进,开发团队在集成现代CI/CD流程的同时,面临着日益增长的可扩展性、安全性与合规性要求。然而,传统嵌入式软件开发方式受制于固定的许可证模式和复杂的构建环境,限制了敏捷自动化工作流的应用。 IAR的全新云就绪平台解决了这些挑战,采用基于容量
[嵌入式]
<font color='red'>IAR</font>推动<font color='red'>嵌入式</font>开发:云就绪、可扩展的CI/CD和可持续自动化
嵌入式多核系统风起云涌,IAR强大工具化繁为简
随着智能科技的飞速发展和广泛应用,高性能嵌入式系统已经渗透到各个领域,从消费电子、智能家居、智能医疗到工业控制、汽车应用等,无处不在的嵌入式设备正改变着我们的工作和生活。然而,传统单核系统的性能提升遇到瓶颈,无法满足这些应用日益增长的需求。此外, 边缘智能也要求嵌入式系统实现架构性创新,以满足其对性能、功耗、实时性和成本等方面的要求 。在这些需求推动下,多核系统和产品应运而生,成为嵌入式系统发展的新趋势。 多核系统是指在单颗芯片上集成多个处理器内核,每个内核能够独立地执行数据处理和控制任务,以提高系统的整体性能和满足应用的特定需求。在多核系统中,不同的内核可以根据其特性和需求进行优化,以满足不同的应用场景。例如,高性能内核专注
[嵌入式]
IAR Embedded Workbench帮助嵌入式从32位迁移到64位
IARSystems是面向未来的嵌入式开发软件工具和服务的供应商,日前宣布其C/C++开发工具链IAR Embedded Workbench for Arm支持64位芯片,包括ArmCortex-A35,Cortex-A53和Cortex-A55。通过IAR Embedded Workbench,IAR Systems为客户提供了市场上最多样化的微控制器支持,以及适应不同组织需求的许可选项。 在嵌入式行业中,越来越多的应用程序基于64位内核,特别是在低功耗应用程序,深度嵌入式和手持设备中。在这些应用领域中,IAR Embedded Workbench拥有强大的立足点,是许多公司实现最高性能和能源效率的首选工具链。通过支持需要6
[嵌入式]
QNX推出QNX OS for Safety (QOS) 8.0,加速功能安全与网络信息安全关键型嵌入式系统的开发
全新版本助力开发者构建安全且可信赖的嵌入式系统 中国上海 — 2025年8月21日 — BlackBerry有限公司旗下部门 QNX今日正式发布QNX® Operating System for Safety 8.0(以下简称 “QOS 8.0”) 。这一经安全认证的基础性解决方案基于QNX® SDP 8.0的高性能、下一代微内核架构打造,可简化汽车、工业生产、机器人、医疗设备和国防等领域的功能安全与网络信息安全关键型嵌入式系统的开发与认证工作。 构建复杂任务关键型嵌入式应用的核心 QOS 8.0是一款经预认证、可随时部署的基础软件,直接将功能安全与网络信息安全要求嵌入产品中,为开发者提供清晰的蓝图,助其实现功能安全与
[网络通信]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved