很多团队在开始做软件供应链管理时,都会先试着用Veracode的SCA来识别开源组件。不过在实际项目里,经常可以看到“识别不全”“扫描里缺少库”“组件来源不明确”之类的情况,尤其是多模块项目更明显。大多数时候问题并不是扫描引擎本身,而是扫描材料准备不足,或者策略开得比较保守,使得扫描无法全面覆盖。
一、Veracode软件成分为何识别不全
软件成分识别依赖项目自身提供的信息,如果这些信息不完整,扫描结果往往“缺一块”
1、产物里实际没有依赖
上传的包只是程序本身,依赖没进入构建结果,那扫描自然只能看见当前文件。
2、依赖放的位置比较随意
有些工程习惯把库直接放到libs目录或手动复制,这种方式Veracode很难自动识别来源和版本。
3、源码上传没有带依赖说明
没有pom、build、package之类的说明文件,扫描端就无法建立依赖树,也就得不到完整结果。
4、镜像扫描缺少包描述
镜像里如果只有运行环境,却缺乏package lock或requirements文件,SCA就只能看到镜像内容本身。
5、策略过滤造成“表面缺失”
策略里如果关闭了间接依赖或者过滤低风险依赖,即便识别到了也不会显示出来。
二、Veracode SCA策略应怎样调整
比较有效的方法,其实都是围绕“让扫描能看到依赖”这个目标展开
1、上传完整构建结果
产物包含依赖,扫描就比较好建立关系。
2、把依赖说明文件一起放进扫描包
只要依赖说明在,扫描识别准确度通常明显提高。
3、打开间接依赖展示开关
很多依赖是层层嵌套出来的,如果不开,扫描看不到下层内容。
4、明确扫描范围
对于结构比较特殊的工程,指定路径比自动扫描更稳妥。
5、命令行方式更有控制力
命令行可以明确写出路径,不用依赖默认策略。
三、Veracode识别能力与项目结构也有关
结构不是工具能完全推断的,需要项目本身给出足够线索
1、多模块项目尽量拆分扫描
模块之间独立扫描,依赖关系更清晰。
2、本地库难以判断来源
手动复制库文件这种方式人能看懂,但扫描引擎没法确定出处。
3、动态下载依赖需要另外处理
动态获取依赖比较适合结合镜像扫描或使用完整CI产物。
4、许可证信息可能有延迟
遇到新库,许可证分类可能还在更新过程中,会出现暂时缺失。
5、扫描任务最好统一安排
不同团队分别上传扫描内容,很容易造成识别结果不一致。
总结
Veracode的识别能力并不只取决于扫描引擎本身,真正影响识别效果的是上传什么、缺什么、策略怎么配。只要把依赖说明补全,扫描范围配置清楚,同时打开间接依赖识别,通常就能看到比较完整的软件成分列表,也方便后续做供应链风险和许可证方面的评估。