代码质量利器:Fortify SCA使用指南:1
发布日期:2021-06-30 20:30:29 浏览次数:2 分类:技术文章

本文共 2377 字,大约阅读时间需要 7 分钟。

静态代码分析器SCA(Static Code Analyzer):包含多种语言的安全相关的规则,而对于这些规则相关的违反状况则是SCA重点确认的内容。SCA可以做到快速准确定位修正场所,同时还可以定制安全规则。

在使用上SCA主要按照如下步骤进行:

  • 步骤1: 单独运行SCA或者将SCA与构建工具进行集成
  • 步骤2: 将代码转换为临时的中间格式
  • 步骤3: 对转换的中间格式的代码进行扫描,生成安全合规性的报告
  • 步骤4: 对结果进行审计,一般通过使用Fortify Audit Workbench打开FPR(Fortify Project Results)文件或者将结果上传至SSC(Fortify Software Security Center)来进行分析,从而直接看到最终的结果信息

解析器(Analyzers)

Fortify SCA对于脆弱性的检测是通过如下八个解析器来实现的:

  • Buffer(缓冲区):缓冲区可能是堆类型的缓冲区也可以是栈类型的缓冲区,此解析器主要用于检测对于产生缓冲区溢出的状况进行检测和分析,并将其报告给使用者。
  • Configuration(配置):此解析器用于检测和应用部署配置文件相关的一些错误或者不安全的设定,比如会分析和检查Web应用的用户会话的超时设定是否合理。
  • Content(内容):此解析器用于检查静态HTML页面一确认是否包含安全上脆弱性相关的内容,除了静态HTML页面,此解析器还可以检查动态页面的文件比如PHP/JSP等。
  • Control Flow(控制流):此解析器用于检测潜在的操作顺序上的危险性,通过对程序中的控制流路径进行分析来实现。比如XML Reader是否在使用之前进行了相应的配置。
  • Dataflow(数据流):此解析器主要用于检测与用户输入导致潜在使用上的风险性,比如输入的字符串是否被拷贝到静态定长的缓冲区中导致了缓冲区溢出,或者SQL查询中是否包含用户输入的动态内容等。
  • Higher Order:很多现代的动态语言诸如JavaScript、Python、Ruby和Swift等,对函数都可以像对值的操作一样,可以创建匿名函数表达式,将函数作为参数进行传递,也可以作为返回值而存在,而此解析器正是对这种特性进行分析和检查。当扫描Python、Ruby和Swift代码的时候,缺省方式下此解析器是是启用状态的,而JavaScript也可以通过设定启用此解析器进行解析。
  • Semantic(语义):此解析器会检测函数或者API使用上潜在的危险,比如Java中会检测那些deprecated的函数的使用情况,而在C/C++的情况下,使用上不安全的函数比如gets()函数则也会被作为检测的重点对象。
  • Structural(结构):此解析器会检查程序的定义和结构上的问题,比如会检测出那些由于入口恒为false而导致永远都不会执行的代码块,这些无意义的代码有时是缺陷,有的时候则是冗余的代码块,但是无论哪种情况,都增加了理解和维护的难度,都是代码质量上技术负债的组成部分。

版本确认

使用如下命令可以确认SCA的版本信息

执行命令:sourceanalyzer -version

转换阶段

使用sourceanalyzer进行转换,常见使用方式如下所示

  • 清除某构建ID下的临时文件

执行命令:sourceanalyzer -b 构建ID -clean

此命令用于在进行分析之前清除之前既存的SCA生成的临时文件。

  • 转换工程代码为中间格式

执行命令:sourceanalyzer -b 构建ID 选项

选项: -show-build-warnings : 列出转换阶段时遇到的所有警告和错误的信息
选项:-show-files: 列出和此构建ID相关联的所有文件的信息

  • 分析工程代码并生成PFR结果文件
    分析阶段通过扫描转换阶段生成的中间临时文件,从而生成脆弱性相关的结果文件(FPR)。缺省情况下Fortify SCA在生成的FRP文件中包含源码文件。

执行命令:sourceanalyzer -b 构建ID -scan -f 结果文件.fpr

如有需要将多个构建合并一次执行,可使用如下操作进行。

执行命令:sourceanalyzer -b 构建ID1 -b 构建ID2 -b 构建ID3 -b 构建ID4 -scan -f 结果文件.fpr

并行处理

对于大型的工程,Fortify SCA使用并行分析模式以减少扫描所需要的时间。这种方式会充分利用所在机器的CPU可用的核,由于这种使用上的资源独占性的特点,所以尽量避免因其他需要大量使用资源的进程启动所导致的Fortify服务所需资源不足的问题产生。

增量分析

当待分析的工程过大,增量分析是提高速度的一个有效方式。这种情况之下只有那些变化的增量代码才会被分析,增量分析是降低扫描分析所需时间的一个有效方法。

限制

  • 支持的解析器:支持Configuration解析器和Semantic解析器。
  • 支持的语言: Java,C,C++,C#,Visual Basic
  • 构建ID:在增量分析时必须使用初始全量分析时所使用的构建ID
  • FPR文件:在初始全量分析和后续的增量分析中需要使用相同的FPR文件名称

使用步骤

  • 步骤1: 初始全量构建

执行命令:

sourceanalyzer -b 构建ID …
sourceanalyzer -b 构建ID -scan -incremental-base -f 结果文件.fpr

  • 步骤2: 增量构建
    需要注意的是使用相同的构建ID

执行命令:

sourceanalyzer -b 构建ID …
sourceanalyzer -b 构建ID -scan -incremental -f 结果文件.fpr

转载地址:https://liumiaocn.blog.csdn.net/article/details/91251822 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Redmine基础:主题安装与设定
下一篇:持续集成之jenkins实践教程

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月22日 03时44分08秒