在过去的几年里,应用平台和第三方库中发现的漏洞引起了越来越多的关注,这给DevOps团队带来了压力,他们需要检测和解决软件开发生命周期(SDLC)中的漏洞。
以NVD(国家漏洞数据库)为例,它跟踪和记录软件供应商发布和披露的所有重大漏洞。NVD发现在过去五年中发现的漏洞数量呈增长趋势,仅在2021年就记录了惊人的 20,136 个漏洞(与上一年相比增加了9.7%)。
同时,CISA(网络安全与基础设施安全局)表示,在所有记录的漏洞中,威胁行为者目前正在利用504。
那么,所有这些对开发人员意味着什么呢?
我们如何进一步提高SDLC的安全性呢?让我们从基础开始:
什么是SDLC?
开发团队采用一种SDLC形式来构建他们的流程并获得高质量的结果。从这个意义上说,SDLC只不过是一个定义构建应用程序过程的框架。它跨越了应用程序的整个生命周期。
自传统瀑布模型以来,出现了不同的SDLC模型,其中更健壮的CI/CD和敏捷模型在当今流行度最高。但他们的目标往往是相似的:尽可能快地生产出高质量、低成本的软件。
安全 SDLC (SSDLC) 如何工作?
安全软件开发生命周期 (SSDLC) 将安全组件引入生命周期,从而为开发人员提供了一个框架,以确保在软件开发的每个阶段都要考虑安全性,而不是事后再考虑。这种方法防止了稍后在生产环境中出现漏洞,从而减少了修复这些漏洞的成本。
安全软件开发生命周期的例子定义了在每个开发阶段帮助确保软件安全的最低安全控制。每个阶段都需要专门的 安全测试工具和方法,如(SAST、SCA、IAST和DAST等),并将继续运行每个软件版本的所有阶段。
提高 SDLC 安全性的实践
安全的SDLC实践旨在解决共享的安全问题,包括:
对反复出现的漏洞进行补救,一旦软件部署,就需要付出高昂的代价来补救
设计架构中的安全问题
解决集成到更大系统中的组件内的安全问题
一些提高SDLC安全性的实践:
1、转变心态
左移思维的目的是将传统上在生命周期后期完成的安全实践(如测试组件)引入开发的早期阶段。换句话说,我们已经从DevOps发展到DevOpsSec,再发展到DevSecOps——所有这些都是通过把“Sec”向左移动实现的。
2、根据常识进行威胁建模
威胁建模是在SDLC的最早阶段研究系统设计、它们如何运行以及数据如何在所有系统组件内部和之间流动的过程,旨在识别所有可能的利用途径。进行威胁建模可确保架构设计和开发能够解决所有已识别的安全漏洞。
但是威胁建模通常需要相当长的时间才能完成,因为它需要人工来确定所有可能的攻击途径。反过来,当 SDLC 的几乎每个组件都是自动化的并且期望每个阶段都能快速完成时,威胁建模可能会成为开发过程的瓶颈,新版本每两到四周就会发布一次。因此,建议利用常识进行威胁建模。
3、利用开源、开发人员优先的工具
利用开源工具是降低成本同时确保安全性的一个简单方法。但开源工具也会有些局限性,因此考虑可以根据企业情况进行定制化的工具更利于提高开发人员效率。
4、尽早检查第三方组件中的漏洞
第三方组件是开发人员在无需自己开发整个功能的情况下将附加功能引入其应用程序的快速简便的选择。尽管这些组件可能很便宜,但它们确实是有代价的:可能会间接地将漏洞引入应用程序。
因此,最好在安全开发评估中尽早检查这些组件是否存在漏洞,换句话说:扫描一切!扫描代码、配置、二进制文件或代码库中的任何其他材料,以发现明显可见和隐藏的问题。
5、扫描所有软件层的错误配置
当今市场上可用的大多数安全错误配置检测工具往往侧重于扫描软件基础设施中的错误配置,但不涵盖数据层和应用程序框架层中存在的错误配置。然而这一部分并不可忽略。
SDLC的安全性将取决于DevOps团队、出发点、技能和工具。