【Parasoft C/C++ Test】没有理由忽略CERT C++标准
安全性正在成为软件开发团队的新口号,特别是那些负责安全或关键型软件任务的人员。在过去,安全性通常是团队在开发周期的最后阶段添加到系统的特征,但现在安全性是一个由多种研究计划和标准支持的工程学科。
如果您希望系统在设计上是安全的,则需要从开发过程的最初阶段开始,确保所创建的代码的每一行都遵循安全最佳实践。对于使用C++开发的团队来说,最好的选择之一是SEI CERT C++标准。
Parasoft C/C++ Test是一款优秀的并且全面支持该标准的工具,是C/C++代码完整的安全测试和合规性解决方案。本文旨在向大家介绍CERT C++的重点内容,以及了解Parasoft C/C++ Test对C++开发团队的重要作用。
CERT C++大量的编码指南
SEI CERT C++标准引入了一系列规则来强制执行安全编码实践并消除易受攻击的代码构造。该标准由11章组成,包含特定主题领域的规则。与CERT C不同,CERT C++编码标准只有规则,没有建议(它们有待进一步审查和开发)。
SEI CERT C++依赖于CERT C标准,并包含适用于C++的CERT C规则子集。目前为止有98个CERT C++规则和80个继承自CERT C的规则。标准概述如下表所示:
从版本10.4.1开始,Parasoft C/C++ Test完全支持CERT C++规则。使用C/C++的团队可以从CERT C和C++的专用合规报告中受益,从而构建可持续的合规流程。通过报告扩展,用户可以动态查看合规性流程,并根据CERT风险评估框架审查优先级的违规行为。
CERT根据以下三个因素对每个违规行为进行归类:
- 严重程度
- 发生的可能性
- 补救成本
优先级计算为这三个因素的乘积,并分为以下级别:L1,L2和L3。L1表示高严重性违规,具有高可能性和低补救成本,这是我们最想看到的修复。使用CERT的评分框架可以帮助您节省精力并使团队能够充分利用他们的时间。
除了在小工具、和风险评分框架的帮助下快速推进合规流程的进展,Parasoft C/C++ Test的报告框架还可以自动生成适合代码审核的合规性报告来节省您的时间,
您如何从CERT C++中受益
C++是一门具有许多功能的现代优秀语言,能够设计具有高级模式的复杂系统。而且允许直接通过指针访问内存而无需检查其访问权限是否正确,因此提高了效率。
但是C++也有劣势的一面,即使是非常有经验的开发人员开发的代码也容易受攻击,最常见的原因是内存访问和管理访问缓冲区溢出、悬空引用的使用以及整数溢出。攻击者可以利用电弧注入或代码注入以获得对具有受损程序系统的特权控制,更糟糕的是获得内核访问级别。
那么,我们如何防止攻击者进入我们的系统呢?不可能采用现有的代码库尝试所有可能的安全漏洞。当前可用于C/C++程序员的最佳选择是首先创建不受某些被证明是安全漏洞源的构造影响的代码。让我们看一个简单的例子:
auto g() { int i = 12; return [&] { i = 100; // Problem return i; }; } void f() { int j = g()(); }
在此示例中,函数g()通过引用隐式捕获自动局部变量i,当从g()调用返回函数时,它捕获的引用将引用其生命周期结束的变量(g函数消失)。因此当f()执行时,悬空引用的使用会影响未定义的行为。攻击者可以利用这种未定义的行为来控制程序,造成损失。
总结
正如标题所说,很难找到不遵循CERT C++安全标准的理由,有了这个标准,才让C++的开发变得有迹可循,变得更加安全稳定。CERT C++包含许多可以检测潜在问题的规则,并将帮助您促进安全编码实践。它的安全编码指南在使用时可以帮助加强源代码的安全性,是确保整体系统安全的有效策略。