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

关于证书的®C和CERT c++编码标准是C和c++语言的安全编码实践。嵌入式软件的安全漏洞增加了来自恶意行为者的攻击机会。这些攻击注入恶意软件、窃取信息或执行其他未经授权的任务。安全编码实践填补了这些漏洞,有效地减少了攻击的表面。

为什么CERT C对于嵌入式系统很重要?

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

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

举个简单的例子:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *int查找(int n, int aFlag) {if(!aFlag&& n < SIZE100) return tab[n]; else return -1; }

查找函数有一个明显的缓冲区溢出漏洞,因为参数n在用作数组索引之前没有检查是否为负值。负值可能导致数组索引越界、公开受限制的信息或允许修改受限制的内存位置的内容。缓冲区溢出还可能引入恶意代码,从而改变执行过程,并对系统的功能安全造成不利影响。

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

如何确保符合CERT C?

CERT指南以规则和建议的形式编写。准则被标记为:

  • 规则如果一个违反最可能导致一个缺陷,并且如果一致性可以通过对代码的自动或手动检查来建立,而不需要额外的假设。例如,ARR30-C(“不要形成或使用界外指针或数组下标”)是一条规则。
  • 建议如果一致性提高了软件系统的安全性,但是违反一致性并不一定会导致缺陷。例如,ARR02-C(“显式指定数组边界,即使初始化器是隐式定义的”)是一个建议。

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

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

检查证书C是否符合Polyspace®静态代码分析工具

Polyspace错误发现者™是一个静态代码分析工具,支持CERT C安全编码标准开箱即用。金宝app使用Polyspace Bug Finder,开发人员或质量工程师可以简单地选择检查所有或选择CERT C规则并发现违规,而不需要执行任何额外的配置。

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

使用Polyspace Bug Finder检测CERT C违规。

除了支持几乎所有的CERT C金宝app规则和许多CERT C建议外,Polyspace Bug Finder还支持相关的编码标准,如CWE、ISO/IEC TS 17961、MISRA C:2012修订1,以及CERT c++编码标准的一个重要部分。

Polyspace代码验证™,一个额外的检查层是可用的。当Polyspace Bug Finder报告一个违规时,您可以运行Polyspace Code Prover来彻底检查软件中是否没有其他类似的违规。例如,假设您通过检查数组索引中的负值来修正前面的错误,如下所示:

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *int lookup(int n, int aFlag) {if(aFlag && (n<0 || n >= SIZE100))返回-1;返回标签[n];}

这解决问题了吗?您可以运行Polyspace Bug Finder,然后看到仍然违反了ARR30-C规则。要获得更深入的了解,可以运行Polyspace代码验证器。随着分析的深入,你会发现这取决于的值aFlag, n的值可能完全不受约束,仍然存在越界数组索引的可能性。然后,您可以重新编写代码,直到Polyspace代码验证器通过一个绿色的复选标记证明不存在越界索引。

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

总之,您可以使用Polyspace Bug Finder自动检查几乎所有的CERT C规则和大量的CERT C建议。您可以进一步深入了解Polyspace代码验证器的问题,对于特定的规则,可以详细检查代码并证明这些问题的不存在。

要了解更多关于Polyspace产品的嵌入式安全功能,下载188bet金宝搏联系专家

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

7种方法使嵌入式软件安全可靠