全面的 DevSecOps 指南:有效保护 CI/CD 管道的关键注意事项

news2024/11/17 19:46:26

数字化转型时代带来了对更快、更高效、更安全的软件开发流程的需求。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 管道。通过从一开始就优先考虑安全并实施安全门,组织可以节省资源、降低风险,并最终向市场提供更好、更安全的产品。

让安全成为您产品的基础!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序人生 - 爬虫者,教育也!

作为一个站长,你是不是对爬虫不胜其烦?爬虫天天来爬,速度又快,频率又高,服务器的大量资源被白白浪费。 看这篇文章的你有福了,我们今天一起来报复一下爬虫,直接把爬虫的服务器给干死机。 本文有…

RStudio更换R语言版本

今天下载R语言用于读取.xlsx文件的readxl包时,RStudio提示该包是使用R-4.3.3版本构建,而我现在使用的是R-4.3.2版本,所以需要升级一下R语言版本,这里先下载最新版本的R语言, 下载地址:The Comprehensive R…

HTML 学习笔记 总结

总结 【标签按照功能进行分类】&#xff1a; <!DOCTYPE html>&#xff1a;声明为 HTML5 文档 <html>&#xff08;双标记、块标记&#xff09;&#xff1a;是 HTML 页面的根元素&#xff0c;定义 HTML 文档 <head>&#xff08;双标记、块标记&#xff09;&a…

机器学习-04-分类算法-01决策树

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中分类算法&#xff0c;本篇为分类算法开篇与决策树部分。 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

【Linux杂货铺】操作系统

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 冯诺依曼体系结构 &#x1f4c2; 拓展问题&#xff1a;程序为什么要被加载到内存&#xff1f; &#x1f4c2; 主机与主机的交互 &#x1f4c1; 操作系统的概念 &#x1f4c2; 作用 &#x1f4c2; 理解“管理” &#x…

基于Python实现电商订单的数据分析

基于Python实现电商订单的数据分析 数据集&#xff1a;技术&#xff1a;功能&#xff1a;创新点&#xff1a;明确需求和目的&#xff1a; 数据集&#xff1a; 项目使用一家全球超市4年内的电商销售订单数据&#xff0c;数据集名为superstore_dataset2011-2015.csv。数据集共有…

线性代数(一)——向量基础

向量基础 1、向量和线性组合2、向量的模和点乘3、矩阵4、参考 线性代数的核心是向量的加和乘两种运算的组合&#xff0c;本篇博客为线性代数的一个引子&#xff0c;主要从向量、线性组合和矩阵逐步引出线性代数的相关知识。 1、向量和线性组合 首先介绍的是向量相关&#xff0…

使用nexus3搭建npm私有仓库

一、下载解压安装包 下载地址&#xff1a;nexus-3.66.0-02-win.zip 二、安装并运行私服 在cmd中进入到文件夹中的bin目录下运行一下命令 nexus.exe /run等几分钟启动后&#xff0c;浏览器访问&#xff1a;默认端口8081 http://127.0.0.1:8081/ #修改端口在etc文件下 nexus-…

Oracle集群ASM磁盘扩容

先通过lsblk来查看集群两端磁盘是否扩容成功 lsblk -a查看自己两边磁盘UUID是否相同(for i in 后面为磁盘sd后字母名) for i in x y z aa ab ac ad ae do echo "KERNEL\"sd*\", SUBSYSTEM\"block\", PROGRAM\"/lib/udev/scsi_id --whitelist…

javaEE4(预习第3章,做课后习题1:简答)

1、简答 &#xff08;1&#xff09;Jsp页面翻译成的Servlet类的源文件在哪里可以找到&#xff1f;servlet实例是每次请求页面都会创建一个&#xff0c;还是只有一个&#xff08;单例&#xff09;&#xff1f; tomcat工作目录下的work目录下 只有一个 页面中定义变量加和不加…

扫雷小游戏制作教程:用HTML5和JavaScript打造经典游戏

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

smart-doc 社区 Committer 晋升公告

我们非常荣幸地宣布&#xff0c;经过 PMC 委员会的提名和讨论&#xff0c;社区成员李星志&#xff08;GitHub ID: netdied&#xff09;、陈琪&#xff08;GitHub ID: chenqi146&#xff09;和李兵&#xff08;GitHub ID: abing22333&#xff09;正式晋升为同程旅行 smart-doc 开…

Jenkins自动构建 CI/CD流水线学习笔记(从入门到入土,理论+示例)

文章目录 1、什么是Jenkins的流水线?2、流水线语法2.1、声明式流水线2.2、脚本化流水线 3、流水线示例3.1、使用声明式流水线的语法编写的 Jenkinsfile 文件3.2、Pipeline 各种语言示例3.2.1 Java&#xff1a;3.2.2 Node.js / JavaScript3.2.3 Python 4、一套完整的Devops Jen…

Adobe Photoshop 2024 v25.5.1 for mac 强大的图形编辑工具 兼容 M1/M2/M3

Mac毒搜集到的Adobe Photoshop 2024 v25.5.1 是一款强大的图形编辑和设计工具! v25.5.1版本AI生成式无法使用 应用介绍 Adobe Photoshop 2024是一款强大的图像处理软件&#xff0c;由Adobe公司开发。它可以用于编辑和处理照片、图形和其他类型的图像&#xff0c;包括设计、绘画…

YOLOv5独家改进:backbone改进 | 最新大卷积核CNN架构UniRepLKNet,ImageNet 88% | CVPR2024

💡💡💡本文独家改进:大核卷积一统多种模态!RepLK正统续作UniRepLKNet,代替YOLOv5 Backbone 改进结构图如下: 收录 YOLOv5原创自研 https://blog.csdn.net/m0_63774211/category_12511931.html 💡💡💡全网独家首发创新(原创),适合paper !!! 💡…

Linux查看磁盘命令df-h详解

df -h 是一个常用的 Linux 命令&#xff0c;用于查看文件系统的磁盘使用情况并以易于阅读的方式显示。以下是 df -h 命令的详细解释&#xff1a; -h&#xff1a;以人类可读的格式显示磁盘空间大小。例如&#xff0c;使用 GB、MB、KB 等单位代替字节。 执行 df -h 命令后&…

基于ElasticSearch存储海量AIS数据:时空立方体索引篇

文章目录 引言I 时间维切分II 空间范围切分引言 索引结构制约着查询请求的类型和处理方式,索引整体架构制约着查询请求的处理效率。随着时间推移,AIS数据在空间分布上具备局部聚集性,如 果简单地将所有AIS数据插入一个索引结构,随着数据量增长,索引的更新效率、查询效率及…

Codeforces Round 933 (Div. 3)(A~E)

还在HACK&#xff0c;代码仅供参考。 A. Rudolf and the Ticket 关键句&#xff0c;直接枚举所有可能 #include <bits/stdc.h> //#define int long long #define per(i,j,k) for(int (i)(j);(i)<(k);(i)) #define rep(i,j,k) for(int (i)(j);(i)>(k);--(i)) #defi…

使用 IDEA 将本地jar上传到本地maven仓库

IDEA中的操作步骤 创建一个 Maven 运行配置 在开发工具的导航栏中&#xff0c;点击选择配置&#xff1a; 在配置界面点击左上角的加号&#xff0c;随后选择增加一个maven运行配置&#xff1a; 编辑 Maven 配置 上图中的含义&#xff1a; Name 对应的是本配置的名字、用处或功…

Tomcat Web 开发项目构建教程

1下载Tomcat安装包&#xff0c;下载链接&#xff1a;Apache Tomcat - Welcome!&#xff0c;我电脑环境为JDK8,所以下载Tomcat9.0 2、下载完压缩包后&#xff0c;解压到指定位置 3.在intelij中新建一个项目 4.选中创建的项目&#xff0c;双击shift&#xff0c;输入add frame...然…