不管是SAST工具还是SCA工具,能够检测出代码中的CVE无疑是一种检测能力的证明,SAST是基于缺陷模式编写检测规则发现代码中的安全漏洞和缺陷,SCA工具则是通过代码克隆技术检测出已知的安全漏洞,两者相同点是都是针对源代码进行检测,不同点是SAST模式匹配检测的出的缺陷是与CVE漏洞具有相似代码结构,可能是数据流相似、也可能是控制流相似的,所以检测出的缺陷/漏洞可能是过程间的,也可能是过程内的,漏洞触发点具有一定的特征,例如select语句、执行DOS或shell脚本的system语句等。而SCA检测出的漏洞也是基于代码结构的,但是是过程内的代码结构匹配出来的,因为大多采用克隆1型或克隆2型的溯源分析,都是针对代码片段做相似匹配进行分析的。
迄今为止,具有CVE编号的安全漏洞大约有25万多个,这些安全漏大部分存在于开源项目中,在github、gitee等开源代码仓库中大多能够找到项目源代码,很多工具厂商下载这些开源项目,尤其是具有CVE安全漏洞的项目版本,需要下载含有漏洞的项目版本,又需要下载该安全漏洞修复后的项目版本,在代码仓库上面还有相应的修复代码片段,类似下面结构,与上面某工具的修复建议给出的代码片段结构是一致的。
SCA工具要实现类似功能,需要把上面的数据全部抓取下来并存储进入知识库,对于还有安全漏洞的文件要提取特征信息,便于克隆分析时使用。