一种嵌入式软件的安全编码标准

证书®C和CURT C++编码标准是C语言和C++语言的安全编码实践,嵌入式软件的安全漏洞增加了恶意软件攻击的可能性,这些攻击会导致恶意软件、窃取信息或执行其他未授权任务。安全编码实践会堵塞这些漏洞,有效地减少这些漏洞。攻击面。

为什么证书C对嵌入式系统很重要?

嵌入式系统使用C等编程语言编写或生成的代码。尽管这种语言允许直接访问内存等低级操作,但相关的安全风险也更高。如果攻击者获得对系统的控制权,后果可能是灾难性的。

C语言中的某些代码构造引入了安全漏洞。恶意参与者可以利用这些漏洞并执行代码注入、缓冲区溢出和arc注入等操作。

例如,以这个非常简单的案例为例:

#定义SIZE100外部内部选项卡[SIZE100];int lookup(intn,intaflag){if(!aFlag&&n
            

这个查找函数存在明显的缓冲区溢出漏洞,因为在用作数组索引之前未检查参数n的负值。负值可能导致数组索引越界、暴露受限信息或允许修改受限内存位置的内容。缓冲区溢出还可能导致f改变执行过程并对系统功能安全产生不利影响的恶意代码。

CERT C规则和建议通过消除嵌入式软件中某些易受攻击的代码结构来帮助降低此类风险。CERT C特别关注C语言中的安全编码,但组织也使用CWE,ISO/IEC TS 17961,米斯拉®C:2012年修正案1,以及其他标准,或制定自己的安全编码标准。CERT C标准是根据卡内基梅隆大学附属软件工程研究所(SEI)管理的基于社区的开发过程开发的。证书C指南可在证书安全编码维基. 类似的标准,CERP C++,是为C++语言开发的。

我如何确保遵守证书C?

证书C指南以规则和建议的形式编写。指南标记为:

  • 规则如果违规行为最有可能导致缺陷,并且仅通过自动或手动检查代码即可确定合规性,而无需额外假设。例如,ARR30-C(“不要形成或使用越界指针或数组下标”)是一条规则。
  • 正式建议如果一致性提高了软件系统的安全性,但违规不一定导致缺陷。例如,ARR02-C建议使用(“显式指定数组边界,即使由初始值设定项隐式定义”)。

CERT C规则可以手动检查,但查看数十万行(有时是数百万行)代码来检查是否存在违反规则的情况通常是不切实际的。因此,证书C建议使用静态代码分析确保法规遵从性的工具。

通常,静态代码分析工具会检查与安全相关的缺陷,如受污染的数据,以及潜在的软件缺陷,如静态和动态内存缺陷、数字缺陷和数据流缺陷。这些缺陷中有许多是由于违反了CERT C规则造成的。因此,静态分析工具可以自动检查证书C规则冲突。

使用Polyspace检查证书C的合规性®静态代码分析工具

多空间Bug查找器™是一个静态代码分析工具,支持CERT C安全编码标准的开箱即用。使用Po万博1manbetxlyspace Bug Finder,开发人员或质量工程师可以简单地选择检查所有或选择CERT C规则并查找违规情况,而无需执行任何其他配置。

例如,在前面显示的代码片段中,Polyspace Bug Finder通过检测数组访问越界或缓冲区溢出缺陷来发现违反CERT C规则ARR30-C(“不要形成或使用越界指针或数组下标”)的行为。报告此违规行为时会提供规则信息、代码中的位置以及可能的风险和修复。

使用Polyspace Bug Finder检测证书C冲突。

除了支持几乎所有的CERP C万博1manbetx规则和许多CERP C建议之外,多空间错误查找器还支持相关的编码标准,如CWE、ISO/IEC TS 17961、MISRAC C:2012修订1以及CURT C++编码标准的重要部分。

具有多空间码验证器™,可以使用附加的检查层。当Polyspace Bug Finder报告违规时,您可以运行Polyspace Code Prover以彻底检查软件中是否存在其他此类违规。例如,假设您通过检查数组索引中的负值来修复以前的冲突,如下所示:

#定义SIZE100外部内部选项卡[SIZE100];int lookup(intn,intaflag){if(aFlag&&(n<0 | | n>=SIZE100))返回-1;返回选项卡[n];}

这解决了问题吗?您可以运行Polyspace Bug Finder并查看规则ARR30-C仍然被违反。为了进一步了解,您可以运行Polyspace代码验证程序。通过更深入的分析,您可以看到,这取决于aFlag,n的值可能根本不受约束,并且仍然存在数组索引越界的可能性。然后可以重新编写代码,直到Polyspace code Prover证明没有越界索引,如绿色复选标记所示。

使用Polyspace代码验证程序进行越界数组索引检查。

总之,您可以使用Polyspace Bug Finder自动检查几乎所有的CERT C规则和大量的CERT C建议。您可以使用Polyspace Code Prover进一步了解问题,对于特定的规则,可以彻底检查代码并证明没有这些问题。

了解有关Polyspace产品的嵌入式安全功能的更多信息。s manbetx 845

另见:静力分析,验证,嵌入式系统,软件质量目标,软件质量保证

7种确保嵌入式软件安全的方法