数字化转型时代带来了对更快、更高效、更安全的软件开发流程的需求。DevSecOps:一种将安全实践集成到 DevOps 流程中的理念,旨在将安全性嵌入到开发生命周期的每个阶段 - 从代码编写到生产中的应用程序部署。DevSecOps 的结合可以带来许多好处,例如早期识别漏洞、节省成本和更快的交付时间。
左移原理
术语“左移”是指将安全检查和控制的重点转移到软件开发生命周期 (SDLC) 的开始或“左”。传统上,安全检查是在 SDLC 的末尾或“右侧”执行的,通常会导致在流程后期检测到漏洞,而应用程序已经部署在生产中,并且修复此类漏洞的成本更高且更耗时。
左移原则有很多好处:
- 早期检测漏洞——通过在 SDLC 中更早地集成安全检查,可以更快地检测和解决漏洞。这降低了安全漏洞的风险并确保产品更安全。
- 降低成本——在开发过程后期解决安全问题的成本可能很高。通过左移,可以及早发现并修复这些问题,从而减少相关成本和所需资源。
- 提高合规性——通过从一开始就集成安全性,可以更轻松地确保符合行业法规和标准。
- 提高产品质量——从一开始就考虑到安全性的产品可能具有更高的质量,并且错误和漏洞更少。
- 更快的上市时间——通过减少后期修复安全问题所花费的时间,可以更快地将产品交付到市场。
这种集成确保测试成为开发组织 DNA 的内在组成部分,从而培育一种文化,即从项目一开始就根深蒂固地考虑质量因素精心制作软件。
图 1.将安全控制移至左侧
DevSecOps 实施的关键考虑因素
成功实施 DevSecOps 需要仔细考虑有助于安全高效的开发管道的关键因素。将 DevSecOps 集成到 CI/CD 管道中可以尽早发现安全问题,减少漏洞进入生产的可能性,同时还允许开发人员快速修复这些问题并了解如何避免将来重现这些问题。
自动化安全测试工具
由于应用程序有不同的形式(例如,移动、Web、胖客户端、容器化),因此您可能需要设置不同类型的控件,甚至需要设置不同类型的工具来保护应用程序的每个组件。让我们回顾一下您应该使用的主要测试类型。
静态应用程序安全测试
静态应用程序安全测试 (SAST) 工具无需执行程序即可分析应用程序的源代码(开发人员编写的代码)是否存在潜在漏洞。通过在开发阶段扫描代码库,SAST 为开发人员提供了有关安全缺陷和编码错误的见解。一个好的 SAST 工具可以检测代码异味以及任何可能导致 SQL 或路径注入、缓冲区溢出、XSS 和输入验证等漏洞的不良做法。
软件构成分析
软件组合分析 (SCA) 对于识别和管理与软件开发中使用的开源组件相关的安全风险至关重要,这些组件通常来自附加包(例如,用于 JavaScript 的 NPM 数据包、用于 .NET 的 NuGet、Maven、gems)。大多数开发人员在需要时加载软件包,但从不检查该软件包是否存在已知漏洞。当您的应用程序使用易受攻击的包以及修复程序已存在但您没有使用依赖项的固定版本时,SCA 工具会向您发出警告。
动态应用程序安全测试
动态应用程序安全测试 (DAST) 工具评估应用程序的运行状态,模拟现实世界的攻击来识别漏洞。通过将 DAST 纳入测试过程,DevSecOps 团队可以发现静态分析期间可能不明显的安全漏洞。DAST 工具就像一个完全自动化的渗透测试工具,将测试主要已知漏洞(OWASP) 以及许多其他不良做法,例如信息泄漏/暴露。
交互式应用程序安全测试
交互式应用程序安全测试 (IAST) 工具是 DAST 工具和 SAST 工具的组合,因为通过允许访问源代码(“灰盒”),它将帮助 DAST 更好地执行,同时也限制误报的数量。IAST 非常高效,但设置起来更具挑战性,因为它倾向于深入测试每个应用程序。
集装箱扫描仪
容器提供了敏捷性和可扩展性,但也带来了独特的安全挑战。例如,如果您的应用程序是容器化的,则必须执行额外的控制。主要是,扫描器将分析您的 Dockerfile 以检查基础映像是否包含已知漏洞,并且它们还将查找不良做法,例如以 root 身份运行、使用“最新”标签或暴露危险端口。
以下 Dockerfile 示例至少包含三个不良做法,并且可能在 Node.js 基础映像中包含漏洞:
FROM节点:最新br
工作目录 /usr/src/appbr
复制包*.json ./br
运行npm安装br
复制 。。br
曝光3000 22br
HealthCheck CMD卷发 - fail http:// localhost:3000 || 1号出口 br
CMD [ “节点”,“app.js” ]
基础设施即代码扫描器
基础设施即代码 (IaC) 允许组织通过代码管理和配置基础设施,为基础设施层带来版本控制和自动化的优势。IaC 扫描可确保基础设施代码经过严格的安全控制,例如验证配置、遵循最佳实践、扫描安全错误配置以及在整个基础设施部署过程中强制执行安全策略。
秘密扫描仪
一个秘密(例如,API密钥,密码,数据库的连接字符串)应存储在源代码(硬编码)或存储在代码存储库中的配置文件中,因为可以访问该代码的黑客访问权限访问生产和/或其他关键环境。秘密扫描器可以检测开发人员可能留在代码中的 150 多种秘密,一旦秘密被存储在代码中(提交),它就应该被视为“泄露”并立即撤销。
选择正确的第三方产品的标准:
- 科学技术协会支持的语言数量,最好是一种适用于所有代码的工具检测准确度用一组规则定制分析的仪表板
- 斯卡识别的包裹数量自动修复(可以使用更新的包创建拉取请求)
- 达斯特应该能够涵盖 API 以及 GUI 应用程序涵盖的不仅仅是 OWASP
- IAST能够涵盖丰富的应用(例如,使用微服务)提供修复/建议来修复检测到的问题
- 集装箱扫描仪基本图像的最新CVE数据库可以提起码头并检查最佳实践
- IAC扫描仪查找模板文件中的问题 支持您的云提供商的格式(例如,Azure 的ARM + Bicep 、 AWS 的CloudFormation 、 Google Cloud 的Deployment Manager )或Terraform(如果您正在使用)
- 秘密扫描仪确认的凭证类型的数量仪表板,允许安全团队监视检测到的秘密并确保已被撤销定制规则,以防止误报和/或添加新格式
在 CI/CD 管道中建立安全门
分析工具是一个良好的开始,但是如果不属于全球治理的一部分,它们是没有用的。这种治理必须建立在明确定义的安全策略和强制控制的基础上,以确保组织的数据和系统始终受到保护,免受潜在威胁和漏洞的影响。
定义和执行安全策略
CI/CD 管道中的有效安全始于定义明确且特定于项目的安全策略。这些政策应根据每个项目的独特要求和风险进行定制。无论是合规性标准、数据保护法规还是行业特定的安全措施(例如 PCI DSS、HDS、FedRamp),组织都需要定义和执行与其安全目标相符的策略。
一旦定义了安全策略,自动化将在执法中起着至关重要的作用。自动化工具可以扫描代码、基础设施配置和部署工件,以确保符合既定的安全策略。这种自动化不仅加速了安全验证过程,还减少了人为错误的可能性,确保了一致和可靠的执行。
安检门一体化
在DevSecops范式中,CI/CD管道中安全门的集成对于确保安全措施是软件开发生命周期的固有部分。如果您设置了用户可以绕过的安全扫描或控制,那么这些方法将变得完全无用 - 您希望它们成为强制性的。
安全门充当整个 CI/CD 管道的检查点,确保每个阶段都遵守预定义的安全标准。通过在代码提交、构建过程和部署阶段等关键点集成自动化安全检查,组织可以系统、及时地识别和解决安全问题。这些封闭的控件可以以不同的形式:
- 自动安全控制(例如SAST,SCA,CREDSCAN)
- 手动批准(例如,代码审查)
- 手动测试(例如,由专业团队进行渗透测试)
- 性能测试
- 质量(例如,查询可以监视质量跟踪工具中打开的缺陷数量的查询)
图 2.具有门控安全控制的标准 DevSecOps 管道
连续监控和反馈
在快速节奏的软件开发世界中,实时监控对安全性和快速修复的重要性也不能被夸大,因为即使使用封闭式控件,也可以在生产中部署应用程序后发现漏洞。
实时监控安全性
实时监控使团队能够主动检测并响应出现的安全威胁。通过利用自动化工具和高级分析,组织可以持续监控其应用程序、基础设施和网络是否存在潜在漏洞或可疑活动。这种主动方法不仅增强了安全性,还最大限度地降低了安全漏洞和数据泄露的风险。它能够获得整个技术堆栈的全面可见性。DevSecOps 团队可以跟踪和分析从应用程序代码到生产环境的每一层的安全指标。这种可见性可以快速识别安全漏洞,并有助于实施有针对性的补救措施,确保对不断变化的网络威胁进行强有力的防御。
解决安全发现和调整过程
识别安全问题只是第一步;有效的 DevSecOps 需要采取积极主动的方法来及时解决和修复这些问题。当发现安全问题时,跨职能团队将共同评估影响、确定修复任务的优先级并实施纠正措施。这种协作努力确保安全是每个人的责任,而不仅仅局限于组织内的特定部门。适应性是 DevSecOps 的核心原则。组织必须培养持续学习的文化,安全团队根据不断变化的威胁和行业最佳实践定期更新其知识、流程和工具。这种适应性思维可确保安全措施在面对新挑战时保持有效,并不断完善 DevSecOps 管道以获得最佳安全结果。
结论
随着软件开发流程的不断发展,CI/CD 管道中强大的安全措施的需求变得更加重要。采用 DevSecOps 方法可以帮助组织创建安全、高效且可靠的 CI/CD 管道。通过从一开始就优先考虑安全并实施安全门,组织可以节省资源、降低风险,并最终向市场提供更好、更安全的产品。
让安全成为您产品的基础!