CERT C和CERT C ++

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

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

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

嵌入式系统在编程语言中使用手写或生成的代码,例如C.虽然这种语言允许低级操作,如直接内存访问,所关联的安全风险也更高。如果攻击者获得系统的控制,后果可能是灾难性的。

C语言中的某些代码构造介绍了安全漏洞。恶意演员可以利用这些漏洞,并执行代码注入,缓冲区溢出和电弧注入等操作。

例如,采取这个非常简单的案例:

#define size100 100 extern int tab [size100];int查找(int n,int aflag){if(!aflag && n 
            

抬头功能对缓冲区溢出具有明显的漏洞,因为在用作数组索引之前未检查参数n是否未查找负值。负值可以导致界限阵列索引,公开受限信息,或允许修改受限存储位置的内容。缓冲区溢出还可以风险引入更改执行过程的恶意代码,并对系统的功能安全产生不利影响。

CERT C规则和建议通过消除来自嵌入式软件的某些易受攻击的代码构造,帮助降低此类风险。CERT C特别专注于C语言中的安全编码,但组织也使用CWE.ISO / IEC TS 17961臭马克拉®C:2012修正案1以及其他标准,或制定自己的安全编码标准。CERT C标准由由Carnegie Mellon University附属的软件工程研究所(SEI)管理的基于社区的开发过程制定。证书C指南可用证书安全编码wiki。为C ++语言开发了类似的标准CERT C ++。

如何确保遵守证书C?

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

  • 规则如果违规最有可能引起缺陷,并且可以通过单独的自动或手动检查代码来建立一致性,而无需额外的假设。例如,ARR30-C.(“不要形成或使用界限指针或阵列下标”)是规则。
  • 推荐如果一致性提高了软件系统的安全性和安全性,但违规行为不一定会导致缺陷。例如,ARR02-C.(“显式指定数组界限,即使初始化程序隐含地定义)是一个推荐。

可以手动检查CERT C规则,但看几万,有时数百万的规则违规行为往往是不实际的。因此,证书C建议使用静态代码分析以确保合规性的工具。

通常,静态代码分析工具检查与安全相关的缺陷,例如受污染的数据,以及潜在的软件弱点,例如静态和动态存储器缺陷,数值缺陷和数据流缺陷。许多这些缺陷来自违反CERT C规则。因此,静态分析工具可以自动检查证书C规则违规。

检查CERT C遵守PolySpace®静态代码分析工具

Polyspace Bug Finder™是一个静态代码分析工具,支持CERT C安全编码标准开箱即用。万博1manbetx使用PolySpace Bug Finder,开发人员或优质工程师只需选择“全部或选择CERT C规则”,并在不执行任何其他配置的情况下查找违规。

例如,在先前所示的代码片段中,PolySpace Bug Finder通过检测Out-Out-of-star-Access,查找违反CERT C规则ARR30-C(“不要形成或使用界限指针或数组下标”)。界限或缓冲溢出缺陷。报告此违规是以规则信息,代码中的位置,可能的风险和修复程序报告。

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

除了支持几乎所有证书C规则和许万博1manbetx多证书C的建议外,PolySpace Bug Finder还支持相关的编码标准,如CWE,ISO / IEC TS 17961,Misra C:2012修正案1,以及Cert C ++编码标准的重要部分。

PolySpace Code Prover™,可以使用额外的检查层。当PolySpace Bug Finder报告违规时,您可以运行PolySpace代码先驱,以彻底检查软件中是否存在其他此类违规行为。例如,假设您通过检查如下负值的数组索引来修复先前的违规:

#define size100 100 extern int tab [size100];int查找(int n,int aflag){if(aflag &&(n <0 || n> = size100))return -1;返回标签[n];}

这是解决问题吗?您可以运行PolySpace Bug Finder,并查看规则ARR30-C仍违反。为了进一步洞察力,您可以运行PolySpace代码先驱。随着较深的分析,您认为取决于价值一只旗,n的值可能根本不受限制,并且仍有可能存在界限数组索引。然后,您可以重新编写代码,直到PolySpace代码先生证明没有界限索引,如绿色复选标记所示。

使用PolySpace代码先驱越界数组索引检查。

总之,您可以使用PolySpace Bug Finder自动检查几乎所有CERT C规则以及大量的CERT C建议书。您可以进一步深入了解PolySpace代码谚语的问题,并且有关具体规则,请彻底检查您的代码并证明缺乏这些问题。

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

也可以看看:静态分析确认嵌入式系统软件质量目标软件QA.