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

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

3天内不再提示

适用于您应用的安全编码技术

IAR爱亚系统 来源:IAR爱亚系统 2023-09-21 17:24 次阅读

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

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

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

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

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

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

关注可靠性

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

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

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)指南中强调的安全(Security)问题。其中一些规则解决了在许多嵌入式应用程序中已知的安全漏洞之一:与使用不可信数据相关的特定问题。

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

CWE and CERT C/C++

CWE,即通用弱点枚举(Common Weakness Enumeration),是一个由社区开发的有关软件弱点的字典。CWE提供了一套统一的、可衡量的软件弱点,以更好地理解和管理它们,并支持能够找到它们的高效软件安全工具和服务。

CERT C/C++安全(Secure)编码标准是由计算机紧急响应团队(CERT)发布的标准,提供了有关C/C++编程语言中安全(Secure)编码的规则和建议。

实施安全编码技术

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

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

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

使用自动化工具

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

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

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

静态分析工具可以帮助您发现代码中最常见的缺陷,同时还可以帮助您找出开发人员在试图编写代码时通常不会考虑或担心的问题,尤其是当他们只是在编写脚手架代码以使某些功能正常运行时。这些类型的静态分析工具确实可以帮助您开发更高质量的代码,因为它们可以帮助您实施编码标准。此外,还有动态或运行时分析工具可以捕获仅在运行时出现的代码缺陷。动态或运行时分析工具可以在通过软件调试器中执行程序时发现代码中的实际和潜在错误。

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

40fcfde0-585f-11ee-939d-92fbcf53809c.png

捕获漏洞

这个效应可以通过下面的图片很好地解释,这张图片来自德国比勒费尔德大学[5],由一位匿名贡献者拍摄,并在2005年广泛传播:

41168170-585f-11ee-939d-92fbcf53809c.jpg

通常,破坏系统最简单的方法是绕过它而不是战胜它。这主要是与不安全编码实践相关的软件漏洞。上面的图片很好地阐释了这一点:根据建议,门已按规范设置并正常运行。然而,安全措施很容易被绕过,直到运行时分析工具(在本例中是雪)投入使用之前,可能很难发现安全系统中的漏洞。自动化运行时分析工具可以扫描您的代码以寻找潜在的漏洞,这是检测此类问题的绝佳方式。

在本例中,安全漏洞通过硬件修复,具体来说,根据2020年谷歌街景的信息,安装了混凝土护柱[6]:

编码标准有助于让您的代码面向未来并易于重用。这意味着代码质量影响了代码的可重用性,这是成熟组织在开发新产品时的文化。实施安全编码技术形成了一个良性循环,并且它再次验证了我们的前提:一切都始于代码质量。

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

    关注

    22

    文章

    2104

    浏览量

    73497
  • 代码
    +关注

    关注

    30

    文章

    4751

    浏览量

    68357
  • 编码技术
    +关注

    关注

    1

    文章

    35

    浏览量

    11043

原文标题:适用于您应用的安全编码技术

文章出处:【微信号:IAR爱亚系统,微信公众号:IAR爱亚系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    NVIDIA推出适用于网络安全的NIM Blueprint

    德勤使用适用于容器安全的 NVIDIA NIM Agent Blueprint 帮助企业利用开源软件构建安全的 AI。
    的头像 发表于 11-20 09:58 139次阅读

    适用于工业应用的使用MDIO的以太网PHY配置

    电子发烧友网站提供《适用于工业应用的使用MDIO的以太网PHY配置.pdf》资料免费下载
    发表于 09-21 10:24 0次下载
    <b class='flag-5'>适用于</b>工业应用的使用MDIO的以太网PHY配置

    选择适用于汽车应用的基准电压

    电子发烧友网站提供《选择适用于汽车应用的基准电压.pdf》资料免费下载
    发表于 09-02 11:26 0次下载
    选择<b class='flag-5'>适用于</b>汽车应用的基准电压

    适用于3D机器视觉的高度可扩展的TI DLP技术

    电子发烧友网站提供《适用于3D机器视觉的高度可扩展的TI DLP技术.pdf》资料免费下载
    发表于 08-23 09:57 0次下载
    <b class='flag-5'>适用于</b>3D机器视觉的高度可扩展的TI DLP<b class='flag-5'>技术</b>

    适用于类人机器人的TI DLP® Pico™技术

    电子发烧友网站提供《适用于类人机器人的TI DLP® Pico™技术.pdf》资料免费下载
    发表于 08-23 09:26 0次下载
    <b class='flag-5'>适用于</b>类人机器人的TI DLP® Pico™<b class='flag-5'>技术</b>

    适用于AR眼镜的TI DLP® Pico™技术

    电子发烧友网站提供《适用于AR眼镜的TI DLP® Pico™技术.pdf》资料免费下载
    发表于 08-23 09:21 0次下载
    <b class='flag-5'>适用于</b>AR眼镜的TI DLP® Pico™<b class='flag-5'>技术</b>

    适用于安全相关应用中微控制器的TPS653850-Q1多轨电源数据表

    电子发烧友网站提供《适用于安全相关应用中微控制器的TPS653850-Q1多轨电源数据表.pdf》资料免费下载
    发表于 04-09 10:17 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>安全</b>相关应用中微控制器的TPS653850-Q1多轨电源数据表

    NVIDIA cuPQC帮助开发适用于量子计算时代的加密技术

    NVIDIA cuPQC 可为相关开发者提供加速计算支持,帮助开发适用于量子计算时代的加密技术。cuPQC 库可利用 GPU 并行性,为要求严苛的安全算法提供支持。
    的头像 发表于 03-22 09:53 389次阅读

    适用于安全相关应用的电源管理IC TPS653860/61-Q1 数据表

    电子发烧友网站提供《适用于安全相关应用的电源管理IC TPS653860/61-Q1 数据表.pdf》资料免费下载
    发表于 03-21 10:59 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>安全</b>相关应用的电源管理IC TPS653860/61-Q1 数据表

    微软正式发布适用于Windows的Sudo

    微软已在 Windows 11 Insider Preview Build 26052 中发布适用于 Windows 的 Sudo,并将其在 MIT 协议下进行开源。
    的头像 发表于 03-19 09:20 797次阅读
    微软正式发布<b class='flag-5'>适用于</b>Windows的Sudo

    适用于安全相关应用的电源管理 IC TPS653860/61-Q1数据表

    电子发烧友网站提供《适用于安全相关应用的电源管理 IC TPS653860/61-Q1数据表.pdf》资料免费下载
    发表于 03-05 16:19 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>安全</b>相关应用的电源管理 IC TPS653860/61-Q1数据表

    适用于安全相关应用中微控制器的TPS653850-Q1多轨电源数据表

    电子发烧友网站提供《适用于安全相关应用中微控制器的TPS653850-Q1多轨电源数据表.pdf》资料免费下载
    发表于 03-05 14:32 0次下载
    <b class='flag-5'>适用于</b><b class='flag-5'>安全</b>相关应用中微控制器的TPS653850-Q1多轨电源数据表

    适用于汽车安全相关应用的电源管理 IC (PMIC)TPS6593-Q1数据表

    电子发烧友网站提供《适用于汽车安全相关应用的电源管理 IC (PMIC)TPS6593-Q1数据表.pdf》资料免费下载
    发表于 03-05 10:34 0次下载
    <b class='flag-5'>适用于</b>汽车<b class='flag-5'>安全</b>相关应用的电源管理 IC (PMIC)TPS6593-Q1数据表

    是否有适用于CYBT-343026-01的SPICE型号?

    您是否有适用于 CYBT-343026-01 的 SPICE 型号? 该模块将在本质安全应用中使用,并且需要知道内部电容/电感。
    发表于 03-01 07:56

    IGBT适用于ZVS 还是 ZCS?

    IGBT适用于ZVS 还是 ZCS?
    的头像 发表于 12-01 16:10 1192次阅读
    IGBT<b class='flag-5'>适用于</b>ZVS 还是 ZCS?