代码质量与安全 | 9款流行SAST工具大对比,来看哪一款适合你

越来越多的开发人员开始意识到,SAST(静态代码分析)有助于提高产品质量、安全性,甚至缩短上市时间。据MarketWatch调查,2019全球SAST软件市场规模为6亿4320万美元,预计到2026年底将达到17亿3940万美元。静态代码分析市场的惊人增长趋势,市场上也充斥着各种静态分析工具,然而哪一种才是你的菜?

龙智作为DevSecOps研发安全运营一体化解决方案供应商,持续关注代码质量与安全领域的动态与发展,为您提供SAST工具的选型参考与专家建议。联系我们,立即了解优秀的SAST工具如何帮助您加快上市时间、交付高质量代码。

什么是静态代码分析?

静态代码分析也称为静态应用程序安全测试 (SAST),它是一组旨在分析应用程序源代码、字节码和二进制文件以识别缺陷和漏洞的技术。简而言之就是在未运行程序的情况下通过对程序的分析,发现程序中潜在的漏洞和安全隐患。

​SAST工具的好处

  • 在执行之前洞察代码

  • 与动态分析相比,执行速度更快

  • 可以对代码质量维护进行自动化

  • 在早期阶段 (尽管不是所有阶段) 可以自动检索bug

  • 在早期阶段可以自动发现安全问题

在知道了什么是静态代码分析以及它的好处后,您就有必要了解一下市场上都有哪些好用的SAST工具。

流行的静态应用程序安全测试 (SAST) 工具

Klocwork:

适用于C、C++、C#、Java、JavaScript、Python和Kotlin,可识别软件安全性、质量和可靠性问题,帮助强制遵守标准。
Klocwork专为企业DevOps和DevSecOps构建,可扩展到任何规模的项目,与大型复杂环境、CI/CD等各种开发人员工具集成,并为整个企业提供控制、协作和报告, 这使得Klocwork成为静态分析器的上佳选择,它可以保持高开发速度,同时强制执行持续的安全和质量合规性。

Klocwork能够自动化扫描1000多种代码缺陷,包括空指针、资源及内存泄漏、未捕获的异常、除零等。支持静态检测软件应用的安全漏洞,包括SQL注入、被污染的数据、缓存溢出、弱代码实现及其它多种常见应用安全漏洞。

支持语言:
C, C++, C#, Java, JavaScript, Python, Kotlin

Helix QAC:

静态测试 – Helix QAC

一款适用于功能安全和标准合规性领域的领先静态代码分析器。30多年来,Helix QAC凭借其对C/C++语言深入且精准的分析而享誉业界,并成为需要满足苛刻合规要求的严格监管和安全关键行业的首选静态代码分析器。

Helix QAC提供权威的度量指标分析能力,包括60 多种C语言度量和20多种C++度量。并且提供方便的二次开发接口,让软件质量工程师定制符合自身要求的规范。它与Visual Studio和Eclipse完全集成,同时能够与第三方CI(如Jenkins)集成。

Helix QAC已经获得SGS-TÜV的一系列功能安全认证,包括IEC 61508,ISO 26262,EN 50128,IEC 60880和IEC 62304。此外,它也取得了ISO 9001 | TickITplus Foundation Level认证。

支持语言

C, C++11, C++14, C++17, C++20等各种版本的C/C++语言标准

SonarQube:

SonarQube是一个管理代码质量的平台(社区版免费),用于管理代码的质量,它会从多个角度维护检测代码质量,通过插件形式支持多种语言的代码质量管理和检测。它可以安装sonar-cxx插件,内置了一系列C/C++代码检查工具,还可以应用在CI/CD流程中,和Jenkins打通,可以在提交代码后检查代码是否有坏味道,不符合规范的代码就拒绝被合入master。

支持语言

包括Java、C#、JavaScript、TypeScript、C/C++、COBOL及其他29种语言。

Coverity:

位列IDC前10名软件质量⼯具供应商的静态分析⼯具⼚商,能够快速、准确地分析当今的⼤规模(⼏百万、甚⾄⼏千万⾏的代码)、⾼复杂度代码。Coverity解决了影响源代码分析有效性的很多关键问题:构建集成、编译兼容性、⾼误报率、有效的错误根源分析等。

Coverity误报率小于15%,可与现有环境无缝集成,拥有灵活的可扩展性和强大的可配置性。

尽管误报率低,但是Coverity漏报率过高,不适合Web应用程序编程语言,如Dot Net,Java,PHP,Python。集成Coverity到GitHub/GitLab/bibuket开发环境中较为麻烦,需要大量自定义工作。当被测代码库庞大且复杂时,为了满足覆盖范围,其运行时间较长。

支持语言:

JavaScript,Java,PHP,Python,Swift,Go.Net,C,C++,C#,Android,Ruby,Perl,Objective-C,Swift,Kotlin

Fortify:

Fortify Software为30多种主要语言及其框架提供准确的支持,并提供由行业领先的软件安全研究 (SSR) 团队支持的敏捷更新。它使您的应用程序符合广泛的漏洞覆盖范围,包括超过1000个SAST漏洞类别,这些漏洞类别能够符合OWASP Top 10、CWE/SANS Top 25、DISA STIG和PCI DSS等标准。

Fortify的安全编码规则包拥有数十万条规则,覆盖600多种安全漏洞,可以对漏洞进行筛选、排序、过滤,调整级别,并生成报表。 

但Fortify误报率和漏报率都较高,并且与DevOps消息传递工具集成不佳,难以集成。它缺少API支持,二次开发难度高。对语言的支持也很落后,不支持Dart编程语言,对IaC的支持也需要扩展到其他平台。

支持语言:

ABAP/BSP、ActionScript、Apex、ASP.NET、C# (.NET)、C/C++、Classic、ASP(带有VBScript)、COBOL、ColdFusion CFML、Go、HTML、Java(包括Android), JavaScript/ AJAX, JSP, Kotlin, MXML (Flex), Objective C/C++, PHP, PL/SQL, Python, Ruby, Swift, T-SQL,VB.NET, VBScript, Visual Basic, XML, JSON/ YAML、Terraform HCL和Docker(Dockerfile)

​Checkmarx:

Checkmarx提供了一个全面的白盒代码安全审计解决方案,帮助企业在软件开发过程中查找、识别、追踪绝大部分主流编码中的技术漏洞和逻辑漏洞,帮助企业以低成本控制应用程序安全⻛险。

​lCheckmarx CxSAST扫描源代码高度准确且灵活,也可扫描开源组件、交互式代码和基础架构。扫描的结果能够无缝集成到超过25种开发工作流、环境和基础架构中。Checkmarx支持本地部署、云端部署和混合部署,对APPSec友好。 

Checkmarx的误报率较高,许多误报需要人工筛选,并且它扫描API的功能不齐全。在特定用例的情况下,它与CI集成有些困难。

支持语言:

JavaScript,Java,PHP,Python,Swift,Go Scala,.Net,C,C++,Android,Ruby,Perl,Groovy

Veracode:

对于寻找企业级SAST工具的公司来说,Veracode是很好的选择。Veracode只针对安全问题,跨流水线执行代码检查,以便发现安全漏洞,并将IDE扫描、流水线扫描和策略扫描作为其服务的一部分。它会创建用于审计的代码评估,作为程序的一部分。

Veracode易于配置和快速上手提供二进制扫描,能够减少对于代码的误报可指出代码中的真实漏洞,并提出解决方案提供可自定义的仪表板,带有直观、友好的用户界面。

Veracode不提供免费试用,不支持自定义扫描规则。集成CI/CD流水线也很困难。初次扫描时,会有大量的误报,动态扫描时间很长,且结果并不准确。

支持语言:

JavaScript,Java,PHP,Python,Swift,GoScala,.Net,C,C++,C#,Cordova,Kotlin,Groovy,Titanium

PolySpace:

Mathwork旗下的代码静态检查工具,可以识别嵌入式软件C和C++代码中的运行时错误、并发问题、安全漏洞和其他缺陷。使用静态分析,包括语义分析,Polyspace Bug Finder可分析软件控制流、数据流和过程间行为。它在检测到缺陷之后立即突出显示错误,可在开发过程的早期阶段鉴别和修复Bug。

可检查代码是否符合编码规则标准,如MISRA C®、AUTOSAR C++14、CERT® C、和自定义命名约定。它可以生成报告,其中包括发现的Bug、代码违规和代码质量指标,如圈复杂度。Mathwork通过IEC Certification Kit (for ISO 26262 and IEC 61508)和DO Qualification Kit (for DO-178),可提供对行业标准的支持。

对于嵌入式开发,国内应用较少,且工程搭建配置复杂。不同的芯片、不同的编译器经常在搭建完工程后,编译不能通过,需要修改代码和配置。

支持编译器:

GCC,Visual C++®,Clang,Keil,Diab™ (Wind River®),NXP™ CodeWarrior®,Green Hills®,IAR Embedded Workbench ,TASKING®,Texas Instruments™,ARM®

是什么造就了出色的SAST工具?

支持左移

越早发现编码缺陷,修复该缺陷就越快、越容易。优秀的SAST工具能够与现有的开发人员工作流和工具链集成,支持左移理念。

最大限度降低误报率

所有具有安全意识的团队都在与误报作斗争。评估误报会浪费时间,还会导致警觉疲劳。此外,它还可以分散安全人员的注意力,将他们的注意力从真正的安全问题上转移开。 

检测误报的一种方法是使用已知安全问题的示例应用程序。使用多种工具扫描应用程序,并选择误报率最低的SAST工具。此过程将帮助您评估该工具与规则和策略的配合情况。除此之外,好的SAST还需要能够创建常见误报的知识库,并与团队共享。  

与CI/CD有效集成

如果遇到安全问题,CI/CD流水线可能会破坏构建。与此流水线集成的SAST工具能够在开发人员提交存在安全问题的代码时立即警告他们,包括漏洞的详细信息以及如何修复它。

快速扫描

扫描速度在快节奏的DevSecOps环境中至关重要。一旦SAST工具进入流水线的关键路径,慢速扫描就会降低开发人员的工作效率,并可能导致开发人员减少提交频率。或者,有的开发人员会绕过安全测试。