静态代码分析或源代码分析是指使用静态代码分析工具对软件的“静态”(不运行的) 代码进行分析的一种方法,找出代码中潜在的漏洞。静态代码分析器检查源代码,找出特定的漏洞,并检查代码是否符合各种编码标准。

为什么要进行静态代码分析?

  • 在执行代码之前获取代码洞见;
  • 与动态分析相比,执行速度更快;
  • 可以对代码质量维护进行自动化;
  • 在早期阶段 (尽管不是所有阶段) 可以自动检索 bug;
  • 在早期阶段可以自动发现安全问题;

    1. Apache Yetus

    image.png
    其官方网站是:https://yetus.apache.org/
    一个构建和发布工具的集合。包括 “precommit “模块,用于执行完整和部分/补丁CI构建,通过其他开源工具提供代码的静态分析,作为可配置报告的一部分。内置支持C、C++、Java、Perl、Python、Ruby、Shell和XML。可以通过一个插件框架进行扩展。

    2. Axivion Bauhaus Suite

    image.png
    其官方网站是:https://www.axivion.com/
    一个针对Ada、C、C、C++、C#和Java代码的静态代码分析工具套件,可执行各种分析,如架构检查、接口分析、MISRA检查和克隆检测等。

    3. Cigital SecureAssist

    其官方网站是:https://marketplace.eclipse.org/content/cigital-secureassist
    一个轻量级的IDE插件,可以在开发人员编写代码时实时指出常见的安全漏洞。支持Java、.NET和PHP。

    4. Code Dx

    其官方网站是:http://codedx.com/
    软件应用漏洞关联与管理系统,整合多种静态应用安全测试(SAST)和动态应用安全测试(DAST)工具检测到的软件漏洞,以及手动代码审查的结果,并将其归纳整理和规范化。支持C、C++、C#、Java、JavaScript、JSP、PHP、Python、Rails、Ruby、Scala、VB.NET和XML/XSL。

    5. Infer

    其官方网站是:https://fbinfer.com/
    一个适用于Java、C、C、C++和Objective-C的工具。针对空指针问题、泄漏、并发问题和Facebook移动应用的API使用问题。在github上以开放源代码的形式提供。

    6. Protecode

    image.png
    其官方网站是:http://www.protecode.com/
    分析软件源代码和二进制文件的组成,搜索开放源代码和第三方代码及其相关的许可。还可以检测安全漏洞。

    7. Rogue Wave Software OpenLogic

    其官方网站是:http://www.perforce.com/
    扫描源代码和二进制文件以识别开放源码和许可证,管理开放源码政策和审批,报告安全漏洞,并提供开放源码技术支持。

    8. SideCI

    image.png
    其官方网站是:
    https://sider.review/
    基于静态代码分析的自动代码审查工具,适用于Ruby、Python、PHP、JavaScript、CoffeeScript和Go。可以检查风格、质量、依赖性、安全性和bug。

    9. SofCheck Inspector

    其官方网站是:
    http://www.sofcheck.com/
    用于Ada和Java的逻辑错误、竞赛条件和冗余代码的静态检测;自动从代码中提取前置条件。

    10. Yet Another Source Code Analyzer

    image.png
    其官方网站是:http://yasca.org/
    是一个基于插件的框架,可以扫描任意文件类型,有C、C++、Java、Java、JavaScript、ASP、PHP、HTML-CSS、ColdFusion、COBOL等文件类型的插件。它集成了其他扫描器,包括FindBugs、PMD和Pixy。

    11. Raxis

    image.png
    其官方网站是:https://raxis.com/code-review
    如下是其官方网站对其产品的介绍:
    Raxis使用手动的、逐行的程序来审查实际代码的安全风险。我们的流程是为了满足PCI DSS要求6.3.2等合规性标准而设计的,该标准要求任何定制的内部或公开的代码必须由原作者以外的人进行审查。虽然这可能比使用自动化流程需要更长的时间,但PCI推荐的手动程序,使我们能够发现工具通常会忽略的逻辑错误。此外,我们会提出建议,在适用的情况下,即使代码没有出现直接的漏洞,我们也会提出转为安全编码最佳实践的建议。在某些情况下,我们可能会使用工具来帮助我们批量定位编码问题,但是这些工作都是由高素质的程序员和安全专家手动完成的。
    我们的Raxis渗透测试团队在整个工作过程中看到了大量的编码和逻辑错误。这些编码错误往往非常简单,但是错误的结果危害性却是很大的。例如,遗漏了一个隐藏字段的输入检查,就可能会导致系统完全被破坏,包括创建用户账户的能力。虽然这种情况比较少见,但我们也看到过客户没有加入适当的用户授权设计,导致整个应用的操作权限过高的案例。自动化的解决方案并不像我们的手工流程那样有效,可能会在生产代码中留下安全漏洞,被他人利用。”。

    12. Rips Technologies

    image.png
    官方网站为:https://www.ripstech.com/product/
    RIPS是唯一能执行特定语言安全分析的代码分析解决方案。它能检测出最复杂的安全漏洞,这些漏洞往往深藏在源代码中,其他工具无法发现。
    它支持主要框架、SDLC集成、相关行业标准,并可作为自托管软件部署或作为软件即服务使用。
    RIPS以其高精确度和无假阳性噪声,是分析Java和PHP应用程序的理想选择。

    13. PVS-Studio

    image.png
    官方网站为:https://www.viva64.com/en/pvs-studio-download/?promo=top40
    PVS-Studio是一个用于检测程序源代码中的BUG和安全漏洞的工具,它是用C、C++、C#和Java编写的。它可以在Windows、Linux和macOS环境中工作。
    它可以集成到Visual Studio、IntelliJ IDEA和其他广泛使用的IDE中。分析的结果可以导入到SonarQube中。

    14. Kiuwan

    image.png
    官方网站为:https://www.kiuwan.com/
    Kiuwan是目前市场上技术覆盖和集成度最高的SAST和SCA平台。
    通过DevSecOps的方法,Kiuwan获得了出色的基准分数(如Owasp、NIST、CWE等),并提供了丰富的功能,超越了静态分析的范畴,能够满足SDLC中每一个利益相关者的需求。

    15. Gamma

    image.png
    官方网站为:
    https://mygamma.io/
    Gamma是一个智能软件分析平台,由Acellere开发。它可以加快代码审查速度,支持开发人员和团队在更短的时间内构建更高质量的软件。
    它能自动优先处理代码中的热点,并提供清晰的可视化功能。凭借其多矢量诊断技术,它可以从多个角度来分析,包括软件设计等多个方面进行分析,使企业能够透明地管理和提高软件质量。

    16. Reshift

    Reshift 是一个基于 SaaS 的软件平台,它无缝地集成到软件开发工作流中,让企业可以持续地部署安全的软件产品,而不会减慢它们的速度。Reshift 减少了查找和修复漏洞、识别数据泄露的潜在风险以及帮助软件公司实现合规性和法规要求的成本和时间。
    image.png

    17. CodeScene

    官方网站为:https://empear.com/
    CodeScene根据公司如何实际使用代码来优先处理技术债务和代码质量问题。因此,CodeScene将结果限制在相关的、可操作的、直接转化为商业价值的信息上。
    CodeScene还超越了传统的工具,通过测量公司和人员的侧重点来检测软件架构中的协调瓶颈、离岗风险和知识差距。
    最后,CodeScene集成到您的CI/CD管道中,作为一个额外的监管员来预测交付风险,并提供上下文感知的质量门来监督您的代码的健康状况。

    18. Visual Expert

    image.png
    官方网站为:https://www.visual-expert.com/
    Visual Expert是一款针对SQL Server、Oracle和PowerBuilder代码的独特静态代码分析工具。
    Visual Expert工具箱提供了200多个功能,在进行修改时可以减少维护和避免衰退。

  • l 代码审查

  • l CRUD矩阵
  • l E/R图与代码视图同步。
  • l 代码性能分析
  • l 代码探索
  • l 影响分析
  • l 源代码文档
  • l 代码比较

    19. Veracode

Veracode 是一种流行的静态代码分析工具。它只针对安全问题,跨管道执行代码检查,以便发现安全漏洞,并将 IDE 扫描、管道扫描和策略扫描作为其服务的一部分。它会创建用于审计的代码评估,作为程序的一部分。
关键特性

  • 编码时的安全性问题反馈;
  • 在管道中快速获得结果;
  • 令人满意的审计能力;
  • 不需要调整就可以获得高精确度;
  • 专注于修复问题

缺点

  • 不支持自定义扫描规则;
  • 用户体验不是很好

支持的语言:Java、.Net、JavaScript、Scala、Python、PHP、Ruby on Rails、ColdFusion、Swift、C/C++、COBOL、Visual Basic 6、RPG,等等。

20. Fortify

image.png
官方网站为:https://www.microfocus.com
Fortify是惠普公司的一款工具,它的目的是让开发人员创建无错误的安全代码。
这款工具, 开发团队和安全团队都能使用。可以让开发团队和安全团队共同发现并修复安全相关的问题,
在扫描代码的同时,它会对发现的问题进行排序,从而可以确保首先修复最关键的问题。

21. Parasoft

image.png
官方网站为:https://www.parasoft.com
Parasoft是静态分析测试的最佳工具之一。与其他静态分析工具相比,Parasoft的静态分析工具略有不同,因为它能够支持各种类型的静态分析技术,如基于模式的、基于流程的、第三方分析、度量和多变量分析。
该工具的另一个好处是除了识别缺陷之外,它还提供一个防止出现缺陷的功能。

22. Coverity

image.png
官方网站为:https://scan.coverity.com/
Coverity Scan是一个基于云计算的开源工具。它适用于使用C、C++、Java、C#或JavaScript编写的项目。这个工具提供了一个非常详细而清晰的问题描述,有助于更快的解决问题。
如果你正在寻找一个开源工具,这是个不错的选择。

23. Cast

官方网站为:http://www.castsoftware.com/
一个可以用来分析50多种语言的自动化工具,无论项目规模大小,它都能出色地工作。此外,它还为用户提供了一个仪表板,有助于衡量质量和生产力。

24. CodeSonar

官方网站为:
http://www.grammatech.com/products/source-code-analysis
Grammatech的静态分析工具,不仅可以让用户找到编程错误,还可以帮助用户找出域相关的编码错误。它还允许自定义检查点,并且还可以根据需求配置内置检查。
总的来说,它是一个很好的检测安全漏洞的工具,它的深度静态分析能力使它从众多的静态分析工具中脱颖而出。

25. Understand

官方网站为:https://scitools.com/
正如它的名字一样,这个工具可以让用户通过分析、测量、可视化和维护来理解代码。这使得用户可以快速分析大量的代码。这是一个主要用于航空航天和汽车行业的工具。支持C/C++、ADA、COBOL、FORTRAN、PASCAL、Python等主流语言和其他网络语言。

26. Code Compare

官方网站为:
https://www.devart.com/codecompare/
Code Compare - 是一个文件和文件夹比较和合并工具。超过70,000名用户在解决合并冲突和部署源代码修改时使用Code Compare。
Code Compare是一个免费的比较工具,用于比较和合并不同的文件和文件夹。Code Compare集成了所有流行的源码控制系统:TFS, SVN, Git, Mercurial, 和Perforce。Code Compare可以作为一个独立的文件比较工具和Visual Studio的扩展使用。
主要功能:
l 文本比较和合并
l 语义源码比较
l 文件夹比较
l Visual Studio集成
l 版本控制集成和其他

27. Clang Static Analyzer

官方网站为:http://clang-analyzer.llvm.org/
这是一个开源工具,可以用来分析C,C++代码。它使用clang库,是一个可重用的组件,可以被多个客户端使用。

28. CppDepend

官方网站为:https://www.cppdepend.com/
与其他静态分析工具相比,是一款非常容易使用的工具。顾名思义,这个工具是用来分析C/C++代码的。它支持不同的代码质量指标,提供了监控趋势的功能,有一个与Visual Studio集成的插件,允许编写自定义查询,并带有非常好的诊断功能。

29. Klocwork

除了查找语义和语法错误,这个工具还可以让用户检测代码中的漏洞。这个工具很好地集成了许多常用的IDE,如Eclipse、Visual Studio和Intellij IDEA。该工具可以与代码创建并行运行,它可以逐行检查,并提供了实时处理缺陷的功能。

30. Cppcheck

官方网站为:http://cppcheck.sourceforge.net/
一个免费的C/C++静态分析工具。这个工具的好处在于它与其他几个开发工具的集成,如Eclipse、Jenkins、CLion、Visual Studio等。

31. Helix QAC

Helix QAC是Perforce(原PRQA)推出的一款优秀的C和C++代码静态分析测试工具。该工具自带一个安装程序,支持Windows 7、Linex Rhel 5和Solaris 10等平台。它提供了非常清晰的诊断程序,有助于识别根本原因和快速修复缺陷。

33. Polyspace

Polyspace bug-finder可以帮助查找C/C++的缺陷;它与Eclipse集成,同时符合MISRA C、MISRA C++和JSF++等编码规则标准。

34. Sourcemeter

官方网站为:https://www.sourcemeter.com/
一个帮助分析C/C++、Java、C#、RPG和Python代码的工具。这个工具的另一个好处是它允许与免费的静态检查工具如cppcheck、PMD、FindBugs集成。
这个工具的基本版是免费的,但它的功能较少。根据需要,你可以根据自己的需求来判断免费版是否满足要求。

35. Conqat

官方网站为:https://www.cqse.eu/en/blog/conqat-end-of-life/
一个优秀的工具,可以用于克隆检测,支持多种语言,允许与其他静态分析工具集成,提供一个仪表板,显示发现问题的详细信息和其他质量指标。

36. JArchitect

官方网站为:http://www.jarchitect.com/
该工具可以让分析Java代码变得简单易行,支持通过LINQ进行代码查询,提供了大量的代码指标,允许在不同的构建之间进行代码比较,并且具有很好的自定义报告功能。

37. Oclint

官方网站为:http://oclint.org/
是一个独立的工具,用于分析C/C++和Objective-C程序,支持Linux和Mac OX平台。它可以完成静态分析工具所要做的一切工作,如查找bug、未使用的代码、冗余代码等,除此之外,它还带有一个可定制的配置,可以帮助用户根据自己的需求进行定制。

38. Watchtower

官方网站为:https://github.com/chrisallenlane/watchtower
该工具主要用于安全专家进行手动代码审查,在本地系统上的效果最好,但也可以扫描远程网站。
有一个广泛的配置文件,可以配置不同的报告选项。创建备用的配置文件有助于同时执行多个项目。

39. OWASP Code Crawle

官方网站为:https://archive.codeplex.com/?p=codecrawler
用于.NET和Java/J2EE代码的静态分析工具

41. PC Lint

官方网站为:https://pclintplus.com/
用于测试C/C++源代码。PC Lint可以在windows操作系统上工作,而Flexe Lint是专为非windows操作系统设计的,可以在包括UNIX在内的支持C语言编译器的系统上运行。

42. IBM Rational

官方网站为:https://www.ibm.com/support/knowledgecenter/hr/SSQ2R2_9.5.1/com.ibm.help.common.rational.doc/topics/c_overview_rational.html
IBM Rational为用户提供了不同类型的工具,其中一个工具是软件分析器,它可以用来对代码进行静态分析。这个工具是在一个可扩展的框架上设计的,并与其他Rational产品很好地集成。

43. Eclair

官方网站为:https://www.bugseng.com/eclair-0
这个静态分析工具是一个非常灵活和易于配置的工具,几乎支持所有平台,如Windows、UNIX、Linus、Mac OS X。

44. SonarQube

官方网站为:http://www.sonarqube.org/
SonarQube 是一种很流行的静态分析工具,用于持续检查代码库的代码质量和安全性,并在代码评审期间指导开发团队。SonarQube 可与 CI/CD 集成,进行自动化代码检查。它还提供了质量管理工具帮你主动纠正错误:IDE 集成、Jenkins 集成和代码评审工具。
关键特性

  • 多语言支持;
  • 安全性分析;
  • 发布质量代码;
  • 可维护性;
  • 可以识别蹊跷的问题。

缺点

  • 并不是每个 IDE 都支持 SonarQube;
  • 不能选择忽略团队不需要去修复的问题。

支持的语言: 25 种以上的编程语言,包括 Java、C#、JavaScript、TypeScript、C/C++、COBOL 及其他。
定价 : 社区版是免费和开源的。商业版起步价为 120 欧元。

45. Embold

Embold 是一个通用的静态分析器,可以帮助开发人员在关键代码问题成为障碍之前把它们找出来。它是一个有效诊断、转换和维护应用程序的得力工具。它集成了人工智能和机器学习技术,可以找出一级问题,提供最佳解决方案,并在必要时重构应用程序。你可以在已有的 DevOps 技术栈中使用它,可以在内部使用,也可以在私有云和公共云中使用它。

关键特性

  • 直观的 UI;
  • 更深入和更快的代码检查;
  • 智能地提高性能;
  • 无缝集成。

缺点: 价格相对较高。
支持的语言: Java、C、C++、C#、Objective-C、TypeScript、JavaScript、Python、PHP、Go、Kotlin、Solidity、SQL。
定价: 对开源免费,付费用户每月 10 欧元。
image.png

46. Frama-C

官方网站为:http://frama-c.com/
image.png
一个开源工具,针对C语言的分析,自带一个非常灵活的框架。

47. Semmle

官方网站为:https://semmle.com/
开源的安全分析工具,用于Java和C语言代码。

48. PMD

官方网站为:https://pmd.github.io/
PMD是一个开源的代码分析工具,适用于C/C++、Java、JavaScript。这是一个简单的工具,可以用来查找常见的缺陷。它还可以检测java中的重复代码。

49. FindBugs

官方网站为:http://findbugs.sourceforge.net/
免费工具,用于查找Java代码中的BUG。它支持任何版本的Java,但需要JRE(或JDK)1.7.0或更高的版本才能运行。

50. IBM AppScan Source

官方网站为:http://www-03.ibm.com/software/products/en/appscan-source
用于在SDLC阶段的早期识别漏洞。同时支持移动扫描。

51. Flawfinder

官方网站为:https://www.dwheeler.com/flawfinder/
这是一个开源工具,主要用于查找C/C++程序中的安全漏洞。它可以下载、安装并在UNIX等系统上运行。

52. Splint

官方网站为:http://www.splint.org/
一个开源的C语言程序静态和安全分析工具。它的功能非常基本,经过额外的配置,也可以像其他标准工具一样执行。

53. Hfcca

官方网站为:https://code.google.com/archive/p/headerfile-free-cyclomatic-complexity-analyzer/
Header Free Cyclomatic Complexity Analyser是一个执行分析的工具,它不关心C/C++头和Java导入。使用简单,不需要安装。可用于C/C++、Java和Objective C。

54. Cloc

官方网站为:https://github.com/AlDanial/cloc
该工具用Perl编写,用户可以区分空行、注释行和物理行,并支持多种语言。总的来说,这是一个易用的工具,具有良好的功能,如提供多种格式的输出,可以在多个系统上运行,并附带一个简单的安装包。

55. Sloccount

官方网站为:https://www.dwheeler.com/sloccount/
一个开放源码工具,让用户在多语言和多平台上计算物理源码行数。

56. JSHint

官方网站为:http://jshint.com/about/
这是一个支持JavaScript静态分析的免费工具。

57. DeepScan

官方网站为:https://deepscan.io/
DeepScan是一个高级静态分析工具,支持JavaScript、TypeScript、React和Vue.js。
你可以使用DeepScan来查找可能的运行时错误和质量问题,而不是编码惯例。可与你的GitHub仓库集成,以获得对Web项目的质量洞察。
image.png

58. DeepSource

DeepSource 可以帮你在代码评审期间自动发现并修复代码中的问题。它可以与 Bitbucket、GitHub 或 GitLab 帐户集成。这个工具可以找出反模式、bug 风险、性能问题。DeepSource 还会生成并跟踪各种指标(例如依赖项计数、文档覆盖率等)。分析器先发现文件级别的问题 (如在特定位置发现反模式),并进一步发现代码库级别的问题 (如发现有些依赖项没有安装)。DeepSource Autofix 会为检测到的问题提出修复建议,并创建一个修复的拉取请求。
dashboard.d7bd45c.jpg

关键特性

  • 单个文件配置;
  • 对拉取请求进行质量检查;问题频谱;
  • 维护活跃度分析器;
  • 可以详细了解每一个问题;
  • 跟踪代码指标;
  • 定制分析,可以忽略掉一些问题;
  • 分析器可以为经常发生的问题提出修复建议,如果允许的话,它们还可以创建修复过的拉取请求;
  • 对每个代码提交和拉取请求进行 Black、YAPF、Go fmt 等代码格式化。不需要进行 CI 设置。

缺点: 不支持 PHP
支持的语言: Python、JavaScript、Go、Ruby、Java、Docker、SQL、Terraform、Shell,以及 TestIdentify 和修复 bug 风险、提交代码中的反模式、性能问题和安全缺陷。
定价:开源项目、学生和非营利组织可以免费使用。付费用户从 12 美元 / 月起算。

59. Codacy

Codacy()是一个静态分析工具,可以帮助开发人员处理技术债务并提高代码质量。Codacy 监控每一次代码提交和 PR 的代码质量。你可以用它来加强代码质量标准,加强安全实践,并节省代码评审时间。

关键特性

  • 代码评审自动化;
  • 代码质量分析;
  • 安全代码分析;
  • 集群安装 / 多个实例。

缺点

  • 缺乏与其他 SaaS 服务集成 (Sonatype、Blackduck、AWS API 网关的 API QOS 指标或 UI/E2E SaaS 测试服务) 的能力;
  • 无法加密项目信息或限制对源代码的访问;
  • 社区相对较小。

支持的语言
30 多种语言,包括 Elixir、Go、Java、JavaScript、JSON、Kotlin、Python、Ruby、Scala、Swift、TypeScript 等等。

定价:对开源免费,付费用户起步价为 15 美元 / 月。