、Coverity概述
Coverity公司是由一流的斯坦福大学的科学家于2002年成立的,产品核心技术是1998年至2002年在斯坦福大学计算机系统实验室开发的,用于解决一个计算机科学领域最困难的问题,在2003年发布了第一个能够帮助Linux、FreeBSD等开源项目检测大量关键缺陷的系统。Coverity公司推出的综合开发测试平台,基于新一代的不做代码规则检查、只专注检测代码中的Bug静态分析技术,可以更好地帮助开发人员在写代码的时候就能发现并修复安全缺陷,缩短产品上市时间和降低风险。Coverity是唯一位列IDC前10名软件质量工具供应商的静态分析工具厂商,被VDC评为静态源代码分析领域的领导者。
二、使用Coverity的优势
从2006年开始,Coverity与美国国土安全部一起,研发了Coverity SCAN项目,来保证开源软件的安全性和完整性。Coverity SCAN分析了超过290个开源项目,包括Linux、Apache、PHP和Android,以下表格展示出了开源软件中最常出现的缺陷类型,商业软件也与之类似。
SCAN项目中的出现频率 风险程度
空指针引用 27.60% 中
资源泄露 23.19% 高
错误的表达式 9.76% 中
未初始化变量 8.41% 高
释放后使用 5.91% 高
缓冲区溢出 5.52% 高
像空指针引用、资源泄漏和缓冲区溢出等缺陷类型常常会带来严重的质量和安全风险。使用Coverity,相比于传统的测试方法,会更易于发现这样的缺陷。
在开发阶段使用Coverity,一方面开发人员可以对产品的质量更有信心,另一方面,测试人员可以把更多的精力放在业务逻辑的测试上面,而不是花大量精力去确认一些要在特殊条件下才可能出现的BUG(典型的如空指针引用),从而可以提高测试的效率。
三、Coverity典型缺陷说明
1、空指针引用(Null pointer dereferences)
描述:程序调用值为null的指针的任何方法,会引发空指针异
可能的后果:程序Crash,exit, restart,执行未授权代码或命令
Checker:FORWARD_NULL
Checker: NULL_RETURNS
2、资源泄漏(Resource leaks)
描述:程序未释放资源,或程序错误地释放了资源
可能的后果:Dos攻击,敏感数据泄漏,资源消耗
Checker: RESOURCE_LEAK
3、内存破坏(Memory - corruptions)
描述:
读写预期边界以外的内存缓冲区
使用未初始化的变量
函数/功能调用过程中使用了错误的参数取值
重复使用释放后的内存
可能的后果:程序Crash,exit, restart,执行未授权代码或命令
Checker: OVERRUN
4、内存非法访问(Memory - illegal accesses)
描述:
使用未初始化的变量
使用释放后的资源(CPU、内存、Socket、文件等)
函数返回堆栈变量的地址
可能的后果:程序Crash,exit, restart,资源消耗等
Checker: OVERRUN
Checker: USE_AFTER_FREE
5、错误的表达式(Incorrect expression)
描述:使用错误的变量,不正确的类型转换
可能的后果:不符合预期的输出值,程序逻辑错误,运行时错误
Checker: COPY_PASTE_ERROR
6、未初始化变量(Uninitialized variables)
描述:变量使用前未初始化
可能的后果:程序逻辑不正确,产生错误的数据,程序Crash
Checker: UNINIT
四、Coverity支持的语言和能检测出的缺陷列表
Coverity支持以下语言和框架:
C/C++ C# Java JavaScript PHP Python ASP.NET Objective-C JSP Node.js Ruby Android
支持检测的主要缺陷类型列表:
- API usage errors
- Best practice coding errors
- Build system issues
- Buffer overflows
- Class hierarchy inconsistencies
- Code maintainability issues
- Concurrent data access violations
- Control flow issues
- Cross-site scripting (XSS)
- Cross-site request forgery (CSRF)
- Deadlocks
- Error handling issues
- Hard-coded credentials
- Incorrect expression
- Insecure data handling
- Integer handling issues
- Integer overflows
- Memory – corruptions
- Memory – illegal accesses
- Null pointer dereferences
- Path manipulation
- Performance inefficiencies
- Program hangs
- Race conditions
- Resource leaks
- Rule violations
- Security best practices violations
- Security misconfigurations
- SQL Injection
- Uninitialized members
Coverity更多详细信息参见:
https://www.synopsys.com/software-integrity/resources/datasheets/coverity.html#CWEcoverage