如何将SAST融入DevSecOps流程中?
作者: 日期:2021年09月16日 阅:6,445

敏捷开发大幅提高了开发团队的工作效率和版本更新的速度,但却不利于运维工作的进行。为了让开发人员与运维人员更好地沟通合作,缩短系统开发生命周期,实现高质量的持续交付,开发团队逐步转向DevOps模式。

DevOps可以有效推进快速频繁的开发周期,但是过时的安全措施则可能会拖累整个流程,因此催生出了DevSecOps概念。DevSecOps强调在软件开发生命周期(SDLC)的早期引入安全防护,在软件研发开始阶段就要考虑应用和基础架构的安全性,为DevOps打下扎实的安全基础。

在DevSecOps的建设中,想要大幅度降低安全风险,核心是构建和利用好应用安全工具(AST)进行自动化漏洞发掘,确保执行缺陷检测的时机准确、及时,并且不会影响研发效率。

目前市场上的应用安全工具主要有Static AST (SAST)、Dynamic AST (DAST)、Interactive AST (IAST)以及Mobile AST,其中静态代码分析工具SAST采用白盒测试的方式,从直接从代码中发现查找问题,是目前较为广泛使用的工具。本文将介绍SAST在DevSecOps中常见的使用场景。

SAST融入Devsecops的不同场景

场景1. IDE研发阶段检测

  • 使用场景:将SAST集成到开发人员的IDE中,在开发人员键入代码时保存时,进行检测
  • 目的:在代码被提交到代码仓库之前发现修补并最常见的的安全问题,帮助代码研发人员在研发阶段发现缺陷
  • 检测耗时:秒级
  • 规则集:低误报的检测项,偏规则类,主要采用函数内分析技术

在前期阶段的检测中,为了最大程度降低安全工作对生产效率的影响,开发人员对于检测工具的要求是响应速度快,并且尽可能的低误报。故在此阶段,检测引擎在研发者本地,检测器通常只检测编码风格、API使用错误等低级错误。对于部分检测器无法确定的问题,SAST工具在预提交检测时会选择暂时不报出漏洞,避免给开发人员增加额外的负担。

场景2. 提交时检测

  • 使用场景:代码提交至代码仓库后自动触发
  • 目的:每次提交的结果快速返回给提交代码的开发人员
  • 检测耗时:分钟级
  • 规则集:可选有限检测项

此阶段检测由开发人员向版本管理工具提交代码时自动触发,每次提交都会触发一次。开发人员提交代码后,检测器对于单次提交的代码以及其影响的数个文件进行检测,收集本次提交中需要关注的重要缺陷和漏洞。与IDE检测不同的是,在该阶段会关注跨函数,跨文件的缺陷类型。对代码质量要求比较高,或接近发版的团队,往往选择该方式进行代码检测。

场景3. 构建时检测

  • 使用场景:代码提交成功并编译后,定时进行检测
  • 目的:每天定时反馈问题
  • 检测耗时:小时级
  • 规则集:允许配置更全面的检测项,例如OWASP Top 10 

此阶段检测由开发人员向版本管理工具提交代码时自动触发,每次提交都会触发一次。开发人员提交代码后,检测器对于单次提交的代码以及其影响的数个文件进行检测,收集本次提交中需要关注的重要缺陷和漏洞。与IDE检测不同的是,在该阶段会关注跨函数,跨文件的缺陷类型。对代码质量要求比较高,或接近发版的团队,往往选择该方式进行代码检测。

场景4. 测试时检测

  • 使用场景:成功构建后在环境中进行全量检测
  • 目的:将构建好的软件部署到模拟环境中,进行全量测试
  • 检测耗时:数小时级
  • 规则集:全部检测项

SAST检测结果将由QA进行分析和评估。QA期望发现尽可能多软件可能存在的问题,因此,与前三个场景要求低误报有所不同,此阶段需要SAST工具报告所有可能的漏洞或缺陷,保证低漏报,达到较高覆盖率。在这一阶段,使用工具的往往是测试部门,利用SAST工具对所有文件进行全量检测。

应用现状及发展

实际使用中,由于部分技术尚未成熟,代码分析工具出现的一些问题让开发人员抱怨频频,这使得在DevOps中融入SAST工具,阻力依然较大。一些企业用户的测试人员花费大量时间去除了误报,但在第二次检测后仍然报出类似问题,饱受开发团队诟病。

此外,漏报率高也不容忽视。研究人员曾使用三种国外主流的代码分析工具对CVE中100个缓冲区溢出错误进行检测,其中表现最好的工具也只检测出了其中的32个,漏报率接近70%。

但了解以上SAST工具的使用场景后,我们看到SAST工具已经在尽力适应开发人员的工作习惯。为满足各阶段开发人员对于代码分析工具的要求,SAST工具的规则集、检测时长在不同时期做出调整。例如,开发人员认为在编写代码时进行安全检测影响其生产效率,故SAST在初期只允许配置有限规则集,就是为了能够进行快速扫描、及时反馈,尽力降低开发与安全检测脱节的影响。

即使对于同一检测项,SAST工具在不同阶段的检测范围也有所不同。拿SQL注入举例,SAST工具在预提交时可能只检测单函数内部的问题,提交时检测单文件内的问题,最后阶段再进行跨文件检测。通过这种方式进行误报、漏报、检测时间的调节,最大程度提高开发人员对SAST工具的接受度。

我们认为,SAST工具的能力未来将不断增强,同时开发团队也应根据自身需要,在工作流程中选择适当的节点使用合适的SAST工具进行代码安全审查,向实现真正安全防护一体化的DevSecOps更进一步。

关键词:


相关文章