在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。那在什么情况下需要进行静态程序分析呢?
静态程序分析往往作为一个多人参与的项目中代码审查过程的一个阶段,因编写完一部分代码之后就可以进行静态分析,分析过程不需要执行整个程序,这有助于在项目早期发现以下问题:变量声明了但未使用、变量类型不匹配、变量在使用前未定义、不可达代码、死循环、数组越界、内存泄漏等。
静态代码分析工具的优势
1. 帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
静态代码分析理论基础和主要技术
类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类 型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归 结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的 目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。
数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行 分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的 数据域特性。
现有主流静态分析工具
Fortify
Micro Focus的Fortify是一个静态的、白盒的软件源代码安全扫描工具。其扫描结果不但能够定位造成漏洞的代码所在行,而且能够提供详细的安全漏洞的信息,及相关的安全知识的说明,以及修复意见。
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支持Java、JSP、ASP.NET、C#、VB.NET、C、C++、COBOL、ColdFusion、Transact-SQL、PL/SQL、JavaScript/Ajax、Classic、ASP、VBScript、VB6、PHP以及Python、 Flex、 ABAP等共计25种编程语言,是目前扫描语言种类最多的检测工具。
能够和现有成熟的软件开发环境集成,如Visual Studio, Eclipse JDeveloper和WSAD,RAD工具。能够支持主流的操作系统:Windows、 Linux 、AIX,HP-Unix,Mac OS, Solaris,Android
Checkmarx的CxSAST是一种非常准确和灵活的源代码分析产品,能够让企业自动扫描未编译/未构建的代码,并在流行的编程语言中识别数百个安全漏洞。CxSAST可作为独立产品提供,并能有效地整合到软件开发生命周期(SDLC)中,以简化检测和修复。CxSAST可以内部部署在私有数据中心或通过公共云来托管。
CxSAST扫描支持数百种漏洞,包括以下常见种类:
SQL注入
|
代码注入
|
参数篡改
|
跨站请求伪造
|
跨站脚本
|
缓冲区溢出
|
HTTP响应拆分
|
日志伪造
|
拒绝访问
|
会话完成攻击
|
会话中毒
|
未处理异常
|
资源未释放
|
未验证输入
|
危险文件上传
|
硬编码密码
|
能扫描未编译的代码: CxSAST扫描原始源代码,这意味着您能从开发生命周期的最早阶段开始扫描您的代码,并能有效地识别安全问题。也意味着您永远不必担心实现编译构建,它能让您在任何时间扫描代码段。
不重复扫描未变化的代码: CxSAST具有独特的增量扫描功能,分析自上次扫描后更改的代码及其相关文件,无需重新扫描整个代码库。从而快速得到结果,这在快节奏在敏捷开发环境中特别有用。
整合到开发过程中: CxSAST可以整合到现有的SDLC中,根据安全策略,Checkmarx会自动强制执行。我们支持最常见的源码库,构建服务器,bug跟踪工具,IDE和报告系统,以简化安全测试,并确保其尽可能有效。
涵盖最常用的编程语言:Checkmarx目前支持Java、JavaSript、PHP、python、groovy、 Android、Objective-C (iOS)、HTML 5、Mobile、C++ 、ASP.net 、VB.Net、VB6、PL/SQL、Perl、Ruby、C#.net、Apex、swift、Scala.等20种编程和脚本语言及其最流行的框架
Checkmarx以PDF、RTF、CSV或XML形式提供项目进度报告和可配置仪表盘。
Beyond的beSOURCE是一款在不运行代码的方式进行静态源代码扫描的工具,它通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行静态扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
beSOURCE能广泛支持多种开发语言同时扫描,且无需安装任何语言的编译器;全面自动化扫描,基于代码变更,选择最佳分析流程,其基于变更影响分析的结构分析机制,提供最佳流程分析/结构分析机制,提高“分析准确度”;快速集成到SDLC支持增量式分析,自动识别并分析所有变更的代码,减少重复工作量,缩短检测时间,对于敏捷开发能明显缩短迭代时间;能够满足多种安全合规性报告(CWE/SANS ,OWASP,CERT Secure Coding 等等)。
beSOURCE支持语言包括:JAVA、JSP、JAVA Script/Ajax、Android JAVA、JAVA Web、HTML、XML、C99、C++、C#、Objective C、ASP.NET、PHP、Python、PL/SQL等15种语言。
beSOURCE扫描支持的漏洞,包括以下常见种类:
SQL注入
|
代码注入
|
参数篡改
|
跨站请求伪造
|
跨站脚本
|
缓冲区溢出
|
HTTP响应拆分
|
日志伪造
|
拒绝访问
|
会话完成攻击
|
会话中毒
|
未处理异常
|
资源未释放
|
未验证输入
|
危险文件上传
|
敏感数据暴露
|
不安全对象引用
|
重定向与转发
|
|
|
Synopsys的Coverity能够准确识别出研发工作流中的严重质量缺陷,并且提供可行的修正建议来降低软件错误和安全漏洞的修复成本、时间和风险。Coverity可使用高级源码分析技术在非常复杂的C、C++、Java、Objective-C、程序中发现严重的质量缺陷和安全漏洞。Coverity支持的语言种类包括:C/C++、C#、Java、JavaScript、PHP、Python、ASP.NET、Objective C、JSP、Node.js、Ruby、Android、Swift、Fortran等14种语言。
Coverity是第一个能够快速、准确分析当今的大规模(几百万、甚至几千万行的代码)、高复杂度代码的工具,Coverity解决了影响源代码分析有效性的很多关键问题:构建集成、编译兼容性、高误报率、有效的错误根源分析等。
Coverity能够及时的发现并发缺陷、死锁、内存泄漏、空指针引用、释放后引用、逻辑错误导致的死代码、API错误处理等软件缺陷。
Coverity支持多种操作系统和多种嵌入式编译器:
Solar appScreener
Solar appScreener 是静态应用程序安全分析器。使用它能够使您高效地识别 漏洞和风险,并在代码中突出显示它们。Solar appScreener 的显著优势是,它不 仅可以对源代码进行静态分析,还可以在没有调试信息的情况下分析可执行文件 (二进制代码)。
Solar appScreener 使用逆向工程(反编译)专利技术以高精度从可执行文件 中还原源代码,对可执行文件进行静态分析。Solar appScreener 支持分析 36 种编 程语言编写的应用程序以及 9 种可执行文件,包括 Google Android,Apple iOS 和 Apple macOS 的应用程序。
Solar appScreener 通过词法,语法,语义,污点解析,常量传播,类型传播, 同义词解析和控制流图解析等 10 多种分析方法进行检测分析,极大的提高了检测 的正确性和覆盖率。 Solar appScreener 由两个主要部分组成:一个处理源代码和二进制代码的分 析系统,以及一个报告系统,该系统除了提供修复漏洞和风险的建议,还提供配 置 WAF 的建议,通过与 IDE、CI/CD 服务器和漏洞跟踪系统的集成功能,您可 以快速修复发现的漏洞和风险点,从而提供安全的 SDLC。