静态源代码安全检测工具

发布时间 2023-11-29 13:34:34作者: 没刮胡子

1. 概述

​ 随着网络的飞速发展,各种网络应用不断成熟,各种开发技术层出不穷。在享受互联网带来的各种方便之处的同时,安全问题也变得越来越重要。黑客、病毒、木马等不断攻击着各种网站,如何保证安全成为一个非常热门的话题。

​ 根据IT研究与顾问咨询公司Gartner统计数据显示,75%的黑客攻击发生在应用层。而由NIST的统计显示92%的漏洞属于应用层而非网络层。因此,应用软件的自身的安全问题是我们信息安全领域最为关心的问题,也是我们面临的一个新的领域,需要我们所有的在应用软件开发和管理的各个层面的成员共同的努力来完成。越来越多的安全产品厂商也已经在考虑关注软件开发的整个流程,将安全检测与监测融入需求分析、概要设计、详细设计、编码、测试等各个阶段以全面的保证应用安全。

​ 对于应用安全性的检测目前大多数是通过测试的方式来实现。测试大体上分为黑盒测试和白盒测试两种。黑盒测试一般使用的是渗透的方法,这种方法仍然带有明显的黑盒测试本身的不足,需要大量的测试用例来进行覆盖,且测试完成后仍无法保证软件是否仍然存在风险。现在白盒测试中源代码扫描越来越成为一种流行的技术,使用源代码扫描产品对软件进行代码扫描,一方面可以找出潜在的风险,从内对软件进行检测,提高代码的安全性,另一方面也可以进一步提高代码的质量。黑盒的渗透测试和白盒的源代码扫描内外结合,可以使得软件的安全性得到很大程度的提高。

​ 源代码分析技术由来已久,Colorado 大学的 Lloyd D. Fosdick 和 Leon J. Osterweil 1976 年的 9 月曾在 ACM Computing Surveys 上发表了著名的 Data Flow Analysis in Software Reliability,其中就提到了数据流分析、状态机系统、边界检测、数据类型验证、控制流分析等技术。随着计算机语言的不断演进,源代码分析的技术 也在日趋完善,在不同的细分领域,出现了很多不错的源代码分析产品,如 Klocwork Insight、Rational Software Analyzer 和 Coverity、Parasoft 等公司的产品。而在静态源代码安全分析方面,Fortify 公司和 Ounce Labs 公司的静态代码分析器都是非常不错的产品。对于源代码安全检测领域目前的供应商有很多,这里我们选择其中的三款具有代表性的进行对比,分别是 Fortify公司的Fortify SCA,Security Innovation公司的Checkmarx Suite和Armorize公司的CodeSecure。

2. 工具介绍

2.1. Fortify SCA(Source Code Analysis)

Fortify Software公司是一家总部位于美国硅谷,致力于提供应用软件安全开发工具和管理方案的厂商。Fortify为应用软件开发组织、安全审计人员和应用 安全管理人员提供工具并确立最佳的应用软件安全实践和策略,帮助他们在软件开发生命周期中花最少的时间和成本去识别和修复软件源代码中的安全隐患。 Fortify SCA是Fortify360产品套装中的一部分,它使用fortify公司特有的X-Tier Dataflow™ analysis技术去检测软件安全问题。

Fortify SCA是一款代码审计工具,也做白盒测试工具用,内置的分析引擎、安全编码规则包、审查工作台、规则自定义编辑器和向导、IDE 插件五部分组成专门,用来检测源代码中的漏洞!

功能介绍

**审计功能 **
  1、安全问题审计结果、审计类别划分和问题旁注功能。
  2、安全审计自动导航功能
  3、安全漏洞扫描果的汇总和问题优先级别划分功能。
  4、安全问题定位和问题传递过程跟踪功能。
  5、安全问题查询和过滤功能。
  6、安全问题描述和推荐修复建议。

**扫描分析功能 **
  1、独特的控制流分析技术精确地跟踪业务操作的先后顺序,发现因代码构造不合理而带来的软件安全隐患。
  2、独特的配置流分析技术分析软件的配置和代码的关系,发现在软件配置和代码之间,配置丢失或者不一致而带来的安全隐患
  3、独特的数据流分析技术,跟踪被感染的、可疑的输入数据,直到该数据被不安全使用的全过程,并跨越整个软件的各个层次和编程语言的边界。
  4、独特的语义分析技术发现易于遭受攻击的语言函数或者过程,并理解它们使用的上下文环境,并标识出使用特定函数或者过程带来的软件安全的隐患
  5、独特的代码结构分析技术从代码的结构方面分析代码,识别代码结构不合理而带来的安全弱点和问题。
  6、自定义安全代码规则功能。
  

软件特色

1、扫描引擎介绍:
  主要包含的五大分析引擎:
 数据流引擎:跟踪,记录并分析程序中的数据传递过程所产生的安全问题。
语义引擎:分析程序中不安全的函数,方法的使用的安全问题。
  结构引擎:分析程序上下文环境,结构中的安全问题。
  控制流引擎:分析程序特定时间,状态下执行操作指令的安全问题。
  配置引擎:分析项目配置文件中的敏感信息和配置缺失的安全问题。
  特有的X-Tier跟踪器:跨跃项目的上下层次,贯穿程序来综合分析问题

  2、工作原理:首先通过调用语言的编译器或者解释器把前端的语言代码(如JAVA,CIC++源代码)转换成一种中间媒体文件NST(Normal Syntax Tree将其源代码之间的调用关系,执行环境,上下文等分析清楚。然后再通过上述的五大分析引擎从五个切面来分析这个NST,匹配所有规则库中的漏洞特征,一旦发现漏洞就抓取出来。最后形成包含详细漏洞信息的FPR结果文件,用AWB打开查看。

  3、Fortify SCA扫描的结果如下:
  结果文件为.FPR文件,包括详细的漏洞信息:漏洞分类,漏洞产生的全路径,漏洞所在的源代码行,漏洞的详细说明及修复建议等。
  4、能够扫描的安全漏洞种类有:
  可以扫描出约350种漏洞,将所有安全漏洞整理分类,根据开发语言分项目,再细分为8个大类,约350个子类。
  5、支持混合语言的分析,包括ASP、.NET、C/C++、C#、Java、 JSP;支持Windows、Linux、Mac OS等多种操作系统。
  6、支持自定义软件安全代码规则。
  7、集成软件开发环境(Microsoft Visual Studio, IBM RAD, and Eclipse.)和自动产品构建过程。

优点:目前全球最大静态源代码检测厂商、支持语言最多
缺点:价格昂贵、使用不方便

2.2. Checkmarx CxSuite

​ Checkmarx 是以色列的一家高科技软件公司。它的产品CheckmarxCxSuite专门设计为识别、跟踪和修复软件源代码上的技术和逻辑方面的安全风险。首创了以查询语言定位代码安全问题,其采用独特的词汇分析技术和CxQL专利查询技术来扫描和分析源代码中的安全漏洞和弱点。

​ Checkmarx 是一款强大的源码检测(Source Code Analysis)解决方案,专门为识别、追踪和修复软体原始码技术上和逻辑方面的安全漏洞而设计。Checkmarx可检测最多程式安全弱点、支援多种系统平台、程式语言和开发框架。融入软体开发生命周期(Software Development Life Cycle, SDLC)的CxSuite程式码自动化检测机制,允许开发团队以最少的时间和成本,解决原始码安全面临的挑战。

checkmarx源代码安全扫描工具主要组成部分
1.CxAudit - 调查或者研究源代码,分析技术和逻辑安全问题,定制代码安全查询规则,实现公司安全策略。
2.CxManager - 直观的源代码安全扫描结果管理
3.CxConsole- 命令行接口实现团队项目集中扫描和自动化。
4.CxDeveloper –自动扫描源代码,定位安全缺陷,误报几乎为零。

**特色 **

1.操作简单、user friendly:非开发人员也能快速上手

2.精准度高

3.可扫描未编译的程式码 ( uncompiled code):无须准备各式开发环境

4.支援多数主要语言(含iOS, Android, Windows Phone)

5.提供中文报表、中文介面

优点:利用CxQL 查询语言自定义规则

缺点:输出报告不够美观、语言支持种类不全面

2.3. Armorize CodeSecure

阿码科技成立于2006年,总部设立于美国加州圣克拉拉市,研发中心位于台湾的南港软件工业园区。阿码科技提供全方位网络安全解决方案,捍卫企业免于受到黑客利用 Web 应用程序的漏洞所发动的攻击。阿码科技 CodeSecure可有效地协助企业与开发人员在软件开发过程及项目上线后找出 Web 应用程序风险,并清楚交代风险的来龙去脉 (如何进入程序,如何造成问题) 。CodeSecure内建语法剖析功能无需依赖编译环境,任何人员均可利用 Web操作与集成开发环境双接口,找出存在信息安全问题的源代码,并提供修补建议进行调整。CodeSecure依托于自行开发的主机进行远程源代码检 测,在保证速度稳定的同时方便用户进行Web远程操作。

CodeSecure V4是业界领先的静态代码分析工具,用于构建安全的应用程序。

优点:Web结合硬件,速度快、独具特色的深度分析

缺点:支持语言种类较少、价格不菲

对比

Fortify SCA简写为SCA,Checkmarx CxSuite简写为CxSuite,Armonize CodeSecure简写为CodeSecure。

2.4 cppcheck

CppCheck是一个C/C++代码缺陷静态检查工具。不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误。所谓静态代码检查就是使用一个工具检查我们写的代码是否安全和健壮,是否有隐藏的问题。比如无意间写了这样的代码:这完全是符合语法规范的,但是静态代码检查工具会提示此处会溢出。也就是说,它是一个更加严格的编译器。目前使用比较广泛的C/C++静态代码检查工具有cppcheck 和 pc-lint等。pc-lint是资格最老,最强力的代码检查工具,是收费软件。