保护软件开发生命周期的最佳实践
在理想的情况下,安全风险只会出现在软件开发生命周期中的一个点上,工程师可以通过一组工具和实践来解决它们。
但不幸的是,这不是我们生活的世界。相反,软件开发生命周期——这意味着团队为设计、实现、测试和部署软件而执行的一组过程——由多个阶段组成。每一个都可能产生多种类型的安全威胁。
这就是为什么保护软件开发生命周期需要多管齐下、多层安全策略的原因。本文通过识别软件开发生命周期中出现的各种风险,并解释哪些过程和工具可以帮助减轻每种风险,讨论了该策略应该包含哪些内容。
软件开发生命周期安全风险
正如我们所注意到的,软件开发生命周期涉及多个阶段,并且每个阶段都有自己的安全风险。
软件设计安全挑战
软件开发的第一个阶段是计划阶段。这是开发人员设计新应用程序或应用程序更新的时候。
因为还没有编写任何代码,所以在此阶段还没有活动的安全威胁。尽管如此,开发人员应该在应用程序规划和设计期间采取措施,评估他们计划编写的代码的安全状况。
例如,他们应该考虑他们计划实现的微服务的数量,以及这些微服务交互的方式,可能会影响应用程序的攻击面。他们还应该考虑如何在他们正在计划的应用程序架构中实施零信任和微分割等最佳实践。他们还应该考虑他们计划使用的第三方依赖关系(如开源库或模块)会如何在他们的代码库中引入安全漏洞。
编码安全挑战
开发生命周期的下一个阶段是编码。这是开发人员编写新代码来实现他们在SDLC的第一阶段设计的应用程序功能的时候。
由于此阶段的代码通常不会暴露给第三方访问,因此主动攻击的风险很低。尽管如此,在持续集成服务器、源代码管理系统和开发人员在此阶段使用的其他开发工具中确保强大的访问控制是至关重要的。否则,就存在攻击者破坏开发环境并将恶意代码插入应用程序的风险——例如,在SolarWinds攻击.
秘密金库对于在开发阶段保护代码也很有用。秘密金库提供了一种安全的方法来管理密码、访问密钥和开发人员在开发生命周期中可能使用的其他敏感数据。如果没有秘密金库,这些数据可能以源代码中的明文形式结束,这很容易受到未经授权的第三方访问。
测试和软件安全
代码编写完成后,开发人员在登台环境中对其进行测试。这个阶段是团队在将代码部署到生产环境之前识别代码中存在的安全风险的最佳机会。
在此阶段,主要有两种类型的安全检查:
- 软件组成分析它可以识别零日应用程序安全风险,如易受攻击的开放源码库。SCA通过扫描应用程序以查找已知的安全风险来工作。
- 动态应用安全测试它涉及评估运行中的应用程序的输入和输出。DAST可以检测安全风险,例如数据注入漏洞,这些风险在扫描静态应用程序文件时可能不明显。
理想情况下,在软件开发生命周期的测试阶段,将针对应用程序运行一套全面的SCA和DAST测试。
部署安全风险
开发生命周期的最后一个主要阶段是部署。在此阶段,将新的或更新的应用程序部署到生产环境中,并向最终用户公开。
由于总有可能在应用程序投入生产之后才会发现一些漏洞,因此在部署阶段期间和之后继续执行SCA和DAST测试是最佳实践“右移”安全战略.团队还可以在部署阶段使用安全信息和事件管理(SIEM)以及安全编排、自动化和响应(SOAR)工具来监视生产环境,并根据行为异常检测风险。
此外,工程师还应该解决部署阶段基础设施配置方式可能带来的安全风险。例如,他们应该扫描云身份和访问管理(IAM)策略,以确保对应用程序的主机环境的访问控制被正确地锁定。他们还应该检查网络政策,以确保实施微分割。云安全态势管理(CSPM)工具可以自动扫描基础设施配置以发现安全风险,可以用于此目的。
SDLC安全的多个阶段
正如软件开发生命周期本身包括多个阶段和多个工具一样,SDLC安全性也需要多层方法。现代开发团队应该有适当的解决方案,以降低在应用程序中引入安全漏洞的风险,同时最大限度地提高他们检测风险的能力,尽管他们尽了最大努力。
