源代码静态分析安全测试

在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。那在什么情况下需要进行静态程序分析呢?

静态程序分析往往作为一个多人参与的项目中代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析过程不需要执行整个程序,这有助于在项目早期发现以下问题:变量声明了但未使用、变量类型不匹配、变量在使用前未定义、不可达代码、死循环、数组越界、内存泄漏等。

静态代码分析工具的优势

1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。

2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。

3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。

静态代码分析理论基础和主要技术

类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类 型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。

模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归 结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的 目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。

数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行 分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的 数据域特性。

现有主流静态分析工具

  Fortify

Micro FocusFortify是一个静态的、白盒的软件源代码安全扫描工具。其扫描结果不但能够定位造成漏洞的代码所在行,而且能够提供详细的安全漏洞的信息,及相关的安全知识的说明,以及修复意见。

Fortify的分析引擎以最大和最全面的安全编码规则为基础,该规则中的漏洞类别超过700种。能够支持将扫描结果按照OWASP Top10 分类显示和统计, 提供比较性报表,方便对照。Fortify按代码错误,将源代码漏洞分为八个大类,其中七个大类都是关注于源代码的安 全,另一个是与软件的配置和环境有关的。它们分别是:

1)    输入验证和表示形式(Input Validation and Representation

5)    错误(Errors

2)    API 滥用(API Abuse

6)    代码质量(Code Quality

3)    安全特征(Security Features

7)    封装(Encapsulation

4)    时间和状态(Time and State

8)    环境(Environment

 

Fortify SCA支持JavaJSPASP.NETC#VB.NETCC++COBOLColdFusionTransact-SQLPL/SQLJavaScript/AjaxClassicASPVBScriptVB6PHP以及Python Flex ABAP等共计25种编程语言,是目前扫描语言种类最多的检测工具。

能够和现有成熟的软件开发环境集成,如Visual Studio  Eclipse JDeveloperWSADRAD工具。能够支持主流的操作系统:Windows Linux AIXHP-UnixMac OS SolarisAndroid

 CxSAST

CheckmarxCxSAST是一种非常准确和灵活的源代码分析产品,能够让企业自动扫描未编译/未构建的代码,并在流行的编程语言中识别数百个安全漏洞。CxSAST可作为独立产品提供,并能有效地整合到软件开发生命周期(SDLC)中,以简化检测和修复。CxSAST可以内部部署在私有数据中心或通过公共云来托管。

CxSAST扫描支持数百种漏洞,包括以下常见种类:

SQL注入

代码注入

参数篡改

跨站请求伪造

跨站脚本

缓冲区溢出

HTTP响应拆分

日志伪造

拒绝访问

会话完成攻击

会话中毒

未处理异常

资源未释放

未验证输入

危险文件上传

硬编码密码

能扫描未编译的代码: CxSAST扫描原始源代码,这意味着您能从开发生命周期的最早阶段开始扫描您的代码,并能有效地识别安全问题。也意味着您永远不必担心实现编译构建,它能让您在任何时间扫描代码段。

不重复扫描未变化的代码: CxSAST具有独特的增量扫描功能,分析自上次扫描后更改的代码及其相关文件,无需重新扫描整个代码库。从而快速得到结果,这在快节奏在敏捷开发环境中特别有用。

整合到开发过程中: CxSAST可以整合到现有的SDLC中,根据安全策略,Checkmarx会自动强制执行。我们支持最常见的源码库,构建服务器,bug跟踪工具,IDE和报告系统,以简化安全测试,并确保其尽可能有效。

涵盖最常用的编程语言:Checkmarx目前支持JavaJavaSriptPHPpythongroovyAndroidObjective-C (iOS)HTML 5MobileC++ ASP.net VB.NetVB6PL/SQLPerlRubyC#.netApexswiftScala.20种编程和脚本语言及其最流行的框架

CheckmarxPDFRTFCSVXML形式提供项目进度报告和可配置仪表盘。

1.1.   beSOURCE

BeyondbeSOURCE是一款在不运行代码的方式进行静态源代码扫描的工具,它通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行静态扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。

beSOURCE能广泛支持多种开发语言同时扫描,且无需安装任何语言的编译器;全面自动化扫描,基于代码变更,选择最佳分析流程,其基于变更影响分析的结构分析机制,提供最佳流程分析/结构分析机制,提高“分析准确度”;快速集成到SDLC支持增量式分析,自动识别并分析所有变更的代码,减少重复工作量,缩短检测时间,对于敏捷开发能明显缩短迭代时间;能够满足多种安全合规性报告(CWE/SANS OWASPCERT Secure Coding 等等)。

beSOURCE支持语言包括:JAVAJSPJAVA Script/AjaxAndroid JAVAJAVA WebHTMLXMLC99C++C#Objective CASP.NETPHPPythonPL/SQL15种语言。

beSOURCE扫描支持的漏洞,包括以下常见种类:

SQL注入

代码注入

参数篡改

跨站请求伪造

跨站脚本

缓冲区溢出

HTTP响应拆分

日志伪造

拒绝访问

会话完成攻击

会话中毒

未处理异常

资源未释放

未验证输入

危险文件上传

敏感数据暴露

不安全对象引用

重定向与转发

 

 

 

 

Coverity

SynopsysCoverity能够准确识别出研发工作流中的严重质量缺陷,并且提供可行的修正建议来降低软件错误和安全漏洞的修复成本、时间和风险。Coverity可使用高级源码分析技术在非常复杂的CC++JavaObjective-C、程序中发现严重的质量缺陷和安全漏洞。Coverity支持的语言种类包括:C/C++C#JavaJavaScriptPHPPythonASP.NETObjective CJSPNode.jsRubyAndroidSwiftFortran14种语言。

 Coverity是第一个能够快速、准确分析当今的大规模(几百万、甚至几千万行的代码)、高复杂度代码的工具,Coverity解决了影响源代码分析有效性的很多关键问题:构建集成、编译兼容性、高误报率、有效的错误根源分析等。

Coverity能够及时的发现并发缺陷、死锁、内存泄漏、空指针引用、释放后引用、逻辑错误导致的死代码、API错误处理等软件缺陷。

Coverity支持多种操作系统和多种嵌入式编译器: