您现在的位置是: 首页 - 热点资讯 - 安全编码技术与其他技术并重提升嵌入式应用代码的双重防护 热点资讯
安全编码技术与其他技术并重提升嵌入式应用代码的双重防护
2025-01-30 【热点资讯】 0人已围观
简介编程语言的现代化与嵌入式应用代码安全性的双重考验:从机械计算机到现代软件开发流程的演变 在这个不断变化的技术世界里,编程语言和编码技术之间存在着紧密相连的关系。我们已经从高度专业化、主要是数学符号的表示法转向了更接近人类语法的高级编程语言,这一进步归功于强大的编译器技术。然而,这也带来了新的挑战。在C和C++等高级编程语言中,存在大量未定义行为,不同的编译器对这些行为进行解释可能会有细微差别
编程语言的现代化与嵌入式应用代码安全性的双重考验:从机械计算机到现代软件开发流程的演变
在这个不断变化的技术世界里,编程语言和编码技术之间存在着紧密相连的关系。我们已经从高度专业化、主要是数学符号的表示法转向了更接近人类语法的高级编程语言,这一进步归功于强大的编译器技术。然而,这也带来了新的挑战。在C和C++等高级编程语言中,存在大量未定义行为,不同的编译器对这些行为进行解释可能会有细微差别,从而导致意料之外或不希望出现的问题,最终转化为缺陷。
寻找并修复这些缺陷可能占用了开发时间的大部分比例,这取决于开发机构的成熟度。这引出了一个明确的事实:代码质量是一个迫切需要解决的问题。那么,为何不尽量避免缺陷,以减少调试所需时间呢?
回想起,我们现在仍然在软件中使用“错误”和“调试”这两个概念,它们可以追溯到哈佛大学的一台机械计算机。当时,一只飞蛾卡死在继电器中,这个事件被记录为计算机历史上的第一个“错误”或缺陷。
重复犯错
众所周知,在Web、应用程序、桌面甚至嵌入式系统开发中,开发人员经常无意地在源代码中引入相同类型的问题。这一点来自多个重要机构,如NASA、贝尔实验室和MITRE,他们进行了多项调查研究。常见问题包括没有分配后释放资源以及调用没有原型函数,从而无法在编译时进行严格类型检查。这项研究列出了最佳实践或推荐实践,它们识别出风险性质及不良行为,并提供如何避免这些常见问题的手段。
提高代码质量指南及实践基于这些已知问题,并提供了一些建议来预防将来犯错。此些技巧和实践已经成为广泛接受标准(如MISRA-C 和CERT-C),尤其是在汽车、医疗以及铁路等关键行业,以确保应用程序代码安全性(code safety)与防护能力(code security)。诸如IEC 61508、EN 50128以及ISO 26262这样的功能安全标准建议使用静态分析工具以满足要求,因为安全关键系统中的缺陷可能导致严重后果,如人员伤害或者环境破坏。
关注可靠性
安全编码技术必须综合考虑代码质量、安全性以及防护能力。代码安全性关注的是软件可靠,而防护能力则旨在阻止非法活动,并且当遭受攻击时保证系统稳定。这两者都高度依赖于代码质量,因为它是每个可靠应用程序基础上的基石。
为了推动软件安全并确保所需程度以上可靠性,我们需要遵循各种指导方针及实施各种策略。而且,提高源文件读取易度与维护效率同样重要,更清晰、高效便于理解意味着更健壮,更少bug并且未来更容易重新利用。
MISRA C是一种普遍认可最成熟的人类活动规则集,可以有效减少许多潜在漏洞。在此之上,还有一些其他指南,比如CWE (Common Weakness Enumeration) 和 CERT C/C++ 编码规范,它们对于任何嵌入式项目都是强烈推荐采纳下来的。此刻,让我们深入探讨一下这些具体准则:
MISRA C准则
由汽车行业软件可靠协会(Motor Industry Software Reliability Association, MISRA)创建,其目的是提高嵌入式设备中的信任度及其设计过程中的误差可能性,同时提升其适应新硬件平台特性的灵活性。
首版发布于1998年名为《车载软件C语言发展指南》,随后更新至2004年再次更新至2012年版本,其中还包含14条额外规定,以加强对ISO/IEC 9899:2011 中提出的基本规则。
MISRA规则通过消除潜在漏洞,使得发现并修正错误变得更加迅速有效,而且它们使得移植到不同工具链上变得更加简单。
虽然遵守所有关于通用弱点列表(CWE)、CERT Secure Coding Standards 的建议可以显著降低失败率,但手动添加检测逻辑以捕捉潜在地发生运行期故障的地方仍然非常耗费精力。
要完全遵守所有指导方针,你需要遵循超过700条规则要求,同时还要添加用于报告潜能运行期故障检测逻辑。但是,有哪种方法能够实现这一目标?
自动化工具
提高产品性能同时保证其完整性的最佳途径就是采用自动化工具。一旦你拥有高品质且经过功能验证确认过的整合环境(IDE),比如IAR Embedded Workbench,那么它将包括支持最新版本c(ISO/IEC 9899:2018) 和 c++ (ISO/IEC14882:2020 或称c++20 修订版) 的高性能构建器,以及静态分析师(SAST)- C-STAT - 用作自动检查源文件内容是否符合某些指定条件;还有运行时分析师(RAT)- C-RUN - 来监视实际执行过程即使不能预测到的操作,从而揭示那些隐藏但又危险隐患。
如果你的构建环境具有如此强大功能,那么你就能够创建出真正坚固、高效又难以受到恶意影响的情景下的产品——这正是当前市场需求最高的一个方面。你将能够抵御算术异常缓冲区溢出边界问题堆栈完整内存泄露等典型弱点,然后利用这个集成了SAST & RAT 自动化工具链来生成更多改进后的产品版本,每一次迭代都会让你的工程团队越发自信地相信他们正在生产出卓越品质不可思议优秀作品。此间,不仅如此,无论是在学校还是工作场合,即便只是想要保持自己持续学习技能提升的心态,您也应该始终准备好拥抱创新前沿永远不会停止变化的事物!