CERT C和CERT c++

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

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

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

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

C语言中的某些代码构造引入了安全漏洞。恶意行为者可以利用这些漏洞进行代码注入、缓冲区溢出、弧线注入等操作。

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

#define SIZE100 100 extern int tab[SIZE100];int查找(int n, int flag) {if(!aFlag&& n < SIZE100) return tab[n]; else return -1; }

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

CERT C规则和建议通过消除来自嵌入式软件的某些易受攻击的代码构造,帮助降低此类风险。CERT C特别专注于C语言中的安全编码,但组织也使用CWEISO / IEC TS 17961臭马克拉®C,或开发自己的安全编码标准。CERT C标准是根据基于社区的开发过程开发的,该开发过程由卡内基梅隆大学附属的软件工程研究所(SEI)管理。CERT C指南可在CERT安全编码wiki.为c++语言开发了一个类似的标准CERT c++。

如何确保遵守证书C?

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

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

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

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

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

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

例如,在先前所示的代码片段中,PolySpace Bug Finder通过检测Out-Out-of-star-Access,查找违反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 Code Prover™,则需要另外一层检查。当Polyspace Bug Finder报告违规时,您可以运行Polyspace Code Prover来全面检查软件中是否存在其他此类违规。例如,假设你通过检查数组索引的负数来修复前面的冲突,如下所示:

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

这样解决问题了吗?您可以运行Polyspace Bug Finder,并看到仍然违反了规则ARR30-C。要获得更深入的了解,可以运行Polyspace Code Prover。通过更深入的分析,您会发现这取决于aFlag, n的值可能完全不受约束,仍然存在数组下标越界的可能性。然后,您可以重新编写代码,直到Polyspace code Prover证明没有出界索引(如图绿色复选标记所示)为止。

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

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

要了解有关PolySpace产品的嵌入式安全功能的更多信息。下载188bet金宝搏

参见:静态分析确认嵌入式系统软件质量目标软件QA.