浅析SAST静态应用安全测试工具的分析引擎

2022-04-26 16:03

众所周知,SAST 工具可以深度检测源代码中的漏洞,是有效保障代码安全的利器,但 SAST 工具中最难的技术在于对底层引擎的开发,本文简单介绍一下 SAST 工具所使用引擎。根据引擎采用的技术可以分成三类:


一、针对源代码进行检测

主要是指对于 C、C++、Java、C# 编译型开发语言,不需要编译,而是直接对于源代码本身进行检测。虽然不需要编译,但是往往采用先行编译的方法,这样在编译时,能够得到缺少的文件,在分析中可以进行代码补齐技术。

Checkmarx 最早是编译后进行检测的技术引擎,但是最近也是调整为针对源代码本身进行检测。至于为什么这么做?我想面向嵌入式领域销售的销售、售前都理解这个问题,就是大多数软件由于缺少文件而无法编译,从而导致无法检测。

二、编译检测一体的技术引擎

像 Klocwork 主要是调用工具本身的编译器进行编译,编译为 .o.bc.obj等工具可以分析的中间文件后进行扫描分析。只有编译成功后才能进行检测,所以对被检测项目的要求必须编译通过。这对于测试中心、测试机构来说往往比较困难,原因是他们拿到的客户代码往往是不完整的。

三、编译和检测分离的技术引擎

像 Fortify、Coverity 则采用该种技术。编译环境和扫描检测引擎可以分别在两台服务器上。Fortify 在 C/C++ 编译上支持的类型比较少,而 Coverity 提供了几十种编译器,这也是为什么 Coverity 工具强大之处。但是对于安全漏洞检测上,Coverity 不及 Fortify 等支持的漏洞类型更多。

所以通过上述分析可以看到,一种是对源代码本身进行分析的检测引擎,另一种就是对中间码进行分析的检测引擎。

有的朋友可能会问,哪种检测引擎效率更高,精度更高呢?其实要看引擎实现是否考虑全面,针对一类缺陷,其在代码中表现形式可能有数十种情况,这些情况是否在设计引擎时是否都考虑到,直接影响检测精度。

根据本人经常使用的两种引擎来看,基本上不分伯仲。大家可能会想,如果一款工具既能对源代码本身进行分析,又能对中间码进行分析,是否兼容性更好,检测精度更高呢?

开源网安 CodeSec 代码审核平台能够对 Java 语言源代码本身进行检测,也能对 Java 语言编译后的字节码.class 文件进行检测。国外工具 Fortify、Checkmarx、Klocwork 和 Coverity 等都无法做到这一点。

另外,我需要补充一点,国内工具厂商能够支持对安全代码规范/标准的支持,对语义、运行时缺陷的检测分析,对安全漏洞的检测分析,而国外工具往往只支持其中的1-2个方面。



开源网安完全拥有“自主知识产权”,十年磨一剑,专注“软件安全”行业,其主要产品 CodeSec 代码审核平台是全新一代静态应用安全测试(SAST)解决方案,主要用于软件代码安全审核和质量分析,提供漏洞详情和修复方案,出色的功能亮点,包括:

更安全的代码审核工具,开源网安拥有多年的 S-SDLC 的实施经验并且完全应用在自身产品上,使得 CodeSec 相比于同类产品更加安全可靠。

代码扫描更准确更高效,误报率远低于国产同类产品,支持多引擎分布式部署,并行扫描无上限;

强大的扩展性和易用性,支持多种扫描方式并集成其他扫描引擎,更可以无缝对接各类 DevOps 平台和缺陷管理平台;

优秀的安全检测能力,不但支持第三方漏洞库扫描,而且具备开源组件检测(SCA)能力,为软件供应链安全进一步提升保障;

去专业化描述更适合国内开发人员,快速定位漏洞问题并给予代码级修复方案,描述符合开发人员思路,更易于理解;

提供完整的 CWASP 开发安全认证培训,开源网安的核心自研课程,全方位提升开发人员的“安全开发”意识。

CodeSec 依托开源网安强大的产品交付和安全服务能力,为客户提供多维度、专业化的原厂技术支持,成功案例遍及金融、通信、能源、测评机构等行业。