Siriporn Kaenseya |dreamstime.com.
程序员促销

使用安全编码技术解决缺陷

2021年3月18日
从机械过程到高级编程语言的转变带来了许多未知的副作用,这些副作用会导致缺陷。因此,需要编码标准来帮助您的代码经得起未来的考验,并确保易于重用。

本系列文章在提高软件代码质量我们内部的主题系列图书馆

你将学习:

  • 重点关注安全的软件编码标准。
  • 如何使用自动化工具来实现安全编码技术。

编程语言的现代化和更好的编码技术的重要性与机械计算机到现代软件开发过程的进化直接相关。我们从高度专业化的,主要是数学,符号的高级编程语言转移到接近人类语法。1虽然这是由编译器技术实现的,但它打开了缺陷的门。

像C和C ++这样的高级编程语言包含巨大数量的未定义行为,各种编译器可以略微解释。这可能导致将转化为缺陷的未知或不需要的副作用。

检测和修复缺陷可能需要80%的开发时间,这取决于开发组织的成熟度。显然,代码质量是一个非常重要的问题。为什么不避免这些缺陷并显著减少调试时间呢?

在侧面笔记中,最初来自哈佛大学的机械计算机的软件中的“错误”和“调试”。在继电器中陷入继电器中,该事件被记录为计算机历史中的第一个系统缺陷或“错误”。

我们对疯狂的定义:一次又一次地重复同样的错误

一些受人尊敬的机构,如NASA、贝尔实验室和MITRE,进行了一些调查和研究,得出了同样的结论:web、应用程序、桌面或嵌入式领域的开发者往往会偶然地将同样的错误重复地注入到他们的源代码中。

这些常见误差的示例包括在C ++代码(甚至在C代码中)和不使用原型设计的函数的分配,因此您不会在编译时进行严格的类型检查。除了识别这些共性之外,研究还确定了确定的最佳或推荐编程实践的列表,并有助于防止危险和不良编码行为。

一些最佳实践被定义为众所周知的标准,例如MISRA C和CERT C。这些对于确保在交通和医疗等行业应用程序中使用的代码安全和安全性尤为重要。

功能安全标准,如IEC 61508,2在50128年,3.和ISO 262624建议(或强烈建议,取决于安全完整性级别(SIL)或汽车安全完整性级别(ASIL))使用静态和运行时分析工具,以符合标准。安全关键系统的缺陷可能导致严重的后果,如生命的丧失或环境的破坏。

关注可靠性

安全编码技术代表代码质量,代码安全和代码安全性的组合。代码安全侧重于软件的可靠性,而代码安全是防止不需要的活动并在攻击期间保持系统安全。两者都依赖于每个固体应用的基础的代码质量。

虽然安全编码技术和标准驱动器软​​件安全确保所需的可靠性,但它也是提高源代码的可读性和可维护性至关重要的。更高效且可读的代码意味着未来校验源代码,缺陷较少,并使代码的重用成为可能。

MISRA C是最成熟的软件开发标准之一,旨在帮助避免常见的陷阱和漏洞。然而,对于任何嵌入式应用程序,都强烈建议使用CWE (Common Weakness Enumeration)和CERT C编码标准等附加指南。

MISRA C标准

MISRA C是由汽车工业软件可靠性协会开发的。它的目标是促进嵌入式系统的代码安全性、可移植性和可靠性,特别是那些用ISO C编程的系统。

MISRA C标准的第一版“基于车辆软件使用C语言的指南”,并于1998年制作,并正式称为Misra C:1998。它于2004年和2012年再次更新more rules. There’s also the MISRA C++ 2008 standard based on C++ 2003. Lately, MISRA C:2012, Amendment 1 adds 14 additional rules with a focus on security concerns highlighted by the ISO C Secure Guidelines. Several of these rules address specific issues pertaining to the use of untrustworthy data, a well-known security vulnerability in many embedded applications.

MISRA可以帮助您在将代码签入正式构建之前找到问题,因此以这种方式找到bug会使缺陷看起来从未发生过。MISRA规则的设计再次考虑到了安全性和可靠性,但它们也使代码更易于移植到其他工具和架构上。

CWE和CERT C/ c++

CWE是一个社区开发的软件弱点类型词典。CWE提供了一组统一的、可度量的软件弱点,以更好地理解和管理它们,并支持能够找到它们的高效软件安全工具和服务。

CERT C / C ++安全编码标准是计算机应急响应团队(CERT)发布的标准。它们提供规则和建议,以便在C / C ++编程语言中安全编码。

推行安全编码技术

作为一个普遍的建议,每个嵌入式应用程序最低限度地应该遵循CWE和CERT C/ c++标准。MISRA C对于安全关键系统是强制性的。

遵循同样的概念,在运行时期间,您仍然可能受到算术问题、缓冲区溢出、边界问题、堆完整性和内存泄漏的影响。这种错误可以通过在所有可能发生错误的地方插入特定的插装代码或断言来检测。但是,手动添加检查条件和在运行时报告问题的说明是一项非常耗时的任务。

应用所有的指导方针和标准意味着除了测试代码之外,您还需要遵从近700条规则和需求。那么,如何加强安全编码技术并跟上所有规则呢?

使用自动化工具

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

编译器和连接器应该支持现代编程语言,如最新的C (ISO/IEC 9899:2018)和c++ (ISO/IEC 14882,称为c++的最新c++ 17修订版)。因此,它们可以对可疑的情况或语法缺陷产生警告,例如,易失性内存访问,其计算顺序可能会影响应用程序的逻辑。

警告是您的第一次静态分析检查,不应该被忽略,特别是在功能安全设置中。最好的建议是通过更改编译器设置来将所有警告视为错误,从而将警告转换为错误。这将迫使开发人员修复代码中的所有歧义,因为所有问题都将作为真正的问题来处理。

静态分析工具可以帮助您定位代码中最常见的缺陷来源。然而,它们也有助于发现开发人员在编写代码时往往不会考虑或担心的问题,特别是当他们只是构建脚手架代码以使某些东西工作时。

这些工具确实有助于开发更好的代码,因为它们执行编码标准。此外,动态或运行时分析工具捕获并触发仅在运行时出现的缺陷。当在软件调试器中执行程序时,运行时分析工具可以发现代码中真正的和潜在的错误。

因此,当您查看系统中可能存在的所有缺陷时,静态分析能够很好地发现一些缺陷,而运行时分析则能够很好地定位其他缺陷。有时会有重叠,但在其他情况下,缺陷只能在一个域或另一个域中检测到。为了获得最好的代码分析,您需要将这两种方法结合使用,并与一流的构建工具集成。矩阵图1当组合不同的工具时,Best代表了完整的缺陷覆盖范围。


抓住漏洞

这个效应可以在图2这张照片拍摄于德国比勒菲尔德大学。5这张照片是由匿名贡献者拍摄的,并在2005年广泛传播。


打破系统的最简单方法通常是为了规避它而不是击败它。这主要是与软件漏洞连接到不安全的编码实践的情况。图像在图2这是一个很好的类比——门是按照建议设置的,并根据规范适当地运行。然而,安全措施很容易被绕过,在运行时分析工具就位之前(在本例中是snow),可能很难发现安全系统中的缺陷。自动运行时分析可以扫描代码中潜在的漏洞,这是检测这类问题的好方法。

在本案例中,安全漏洞是在硬件上固定的,即根据谷歌Street View在2020年安装混凝土护柱(图3)


编码标准有助于您的代码经得起未来的考验,并确保易于重用。这意味着代码的质量影响代码的可重用性,这是成熟的组织在开发新产品时的文化。执行安全编码技术是一个良性循环,它重申了我们的前提:一切都从代码质量开始。

更多信息请参阅提高软件代码质量我们内部的系列系列图书馆

参考

1.霍珀(1978)第16页。

2.https://www.iec.ch/functionalafety/standards/page2.htm.

3.https://standards.globalspec.com/std/14256883/EN%2050128
4.https://www.iso.org/standard/43464.html

5.https://wiki.sei.cmu.edu/confluence/display/seccode/Top+10+Secure+Coding+Practices?focusedCommentId=88044413

6。谷歌地图视图


从我们的合作伙伴

欢迎来到边缘

随着嵌入式网络设备成本的下降——以树莓派为例——它们变得无处不在。但是,这一激增的隐藏成本……

物联网设备调试工具和技术的专业指南

2021年3月23日
嵌入式系统的开发,其中软件和硬件必须很好地配合,已经变得极其复杂和具有挑战性,甚至…

欢迎来到边缘

照片/图像学分(按显示顺序)。pinkeyes - stock.adobe.com, Monopoly919 - stock.adobe.com, proindustrial2 - stock.adobe.com。加入我们吧…

汽车,3.75kVrms 30A单通道功能安全隔离门驱动IGBT/SiC

汽车,功能安全符合30-A隔离IGBT/SiC MOSFET栅极驱动器

功率完整性表征信心

定价适合任何预算,WavesURERER 4000HD具有比您想象的电源轨,电源测序和电源管理更多的能力更多。

你的科技指数是多少?

稍微看一下人工智能的技术图景——我们已经在哪里,我们在哪里,我们将走向哪里。然后与我们的合作伙伴Micr…

声音你的意见!

本网站要求您注册或登录后发表评论。
目前还没有任何评论。想开始对话吗?

从我们的合作伙伴

欢迎来到边缘

随着嵌入式网络设备成本的下降——以树莓派为例——它们变得无处不在。但是,这一激增的隐藏成本……

物联网设备调试工具和技术的专业指南

嵌入式系统的开发,其中软件和硬件必须很好地配合,已经变得极其复杂和具有挑战性,甚至…

欢迎来到边缘

照片/图像学分(按显示顺序)。pinkeyes - stock.adobe.com, Monopoly919 - stock.adobe.com, proindustrial2 - stock.adobe.com。加入我们吧…

汽车,3.75kVrms 30A单通道功能安全隔离门驱动IGBT/SiC

汽车,功能安全符合30-A隔离IGBT/SiC MOSFET栅极驱动器

功率完整性表征信心

定价适合任何预算,WavesURERER 4000HD具有比您想象的电源轨,电源测序和电源管理更多的能力更多。
BigStock.com/Copyright: pangrum提供
勒索软件促销
Igor Borisenko, Dreamstime.com
世界数据IGOR Borisenko Dreamstime L 167400850
Baidu