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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

抖音视频提取gif怎么做?分分钟帮你生成gif

通过将视频转换成gif动图的方式能够方便的在各种平台上分享、传播。相较于视频文件,gif动图的体积更小,传播起来更方便,能够吸引大众的注意力。下面,就来给大家分享一个gif图片制作(https://www.gif.cn/)的…

mybatisplus的条件构造器

条件构造器wrapper,主要用于构造sql语句的where条件,他更擅长这个,但也可以用于构造其他类型的条件,比如order by、group by等。 条件构造器的使用经验: 基于QueryWrapper的查询 练习1. void testQueryWrapper(){Q…

服务器集群 -- nginx配置tcp负载均衡

当面临高流量、高可用性、水平扩展、会话保持或跨地域流量分发等需求时,单台服务器受限于硬件资源、性能有限不能满足应用场景的并发需求量时,引入负载均衡器部署多个服务器共同处理客户端的并发请求,可以帮助优化系统架构,提高系…

猫咪挑食怎么治?排行榜靠前适口性好的主食冻干推荐

在如今,养猫人士几乎都将自己的小猫咪视作珍宝,宠溺有加。但宠爱过度有时也会导致猫咪养成挑食的坏习惯。猫咪挑食怎么治呢?今天,我要分享一个既能让猫咪不受苦,又能纠正挑食问题的方法。 一、为什么猫会挑食呢&#x…

Linux调试器--gdb的介绍以及使用

文章目录 1.前言 ✒️2.介绍gdb✒️3.Debug模式和Release模式的区别✒️4.如何使用gdb✒️1️⃣.在debug模式下编译2️⃣.进入调试3️⃣ .调试命令集合⭐️⭐️ 1.前言 ✒️ 🕗在我们之前的学习中已经学会了使用vim编译器编写c/c代码,但是对于一个程序员…

ThreadLocal出现内存泄露原因分析

ThreadLocal 导致内存泄漏的主要原因是它的工作方式。在 Java 中,ThreadLocal 通过维护一个以 Thread 为键,以用户设置的值为值的映射来工作。每个线程都拥有其自身的线程局部变量副本,不同线程间的这些变量互不干扰。这个映射是存储在每个 T…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

Java学习笔记------拼图游戏

图形化界面GUI GUI:Graphical User Interface(图像用户接口),指采用图形化的方式显示操作界面 两套体系:AWT包中和Swing包中 组件 JFrame:最外层的窗体 JMenuBar:最上层菜单 JLaber&#…

微信小程序开发系列(二十四)·wxml语法·列表渲染·wx:for-item 和 wx:for-index

目录 1. 如果需要对默认的变量名和下标进行修改,可以使用wx:for-item 和 wx:for-index 2. 将 wx:for 用在 标签上,以渲染一个包含多个节点的结构块 方法一 方法二 3. 总结 3.1 wx:for-item 和 wx:for-index总结 3.2 总结 1. 如果需要对默…

从mysql 数据库表导入数据到elasticSearch的几种方式

从MySQL数据库导入数据到Elasticsearch有几种方式,主要包括以下几种: 1. 使用Logstash: Logstash是一个开源的数据收集引擎,可以用来从不同的数据源导入数据到Elasticsearch。它具有强大的数据处理能力和插件生态系统&…

xlsx.js读取本地文件,按行转成数组数据

1.下包 //1. npm install xlsx //2. yarn add xlsx2.结构 <template><input type"file" change"onFileChange" /> </template>3.代码 <script> import * as XLSX from xlsxexport default {methods: {onFileChange (event) {/…

【“双碳”目标】Acrel-2000Z分布式光伏发电监测系统解决方案

1 概述 “十四五”期间&#xff0c;随着“双碳”目标提出及逐步落实&#xff0c;本就呈现出较好发展势头的分布式光伏发展有望大幅提速。就“十四五”光伏发展规划&#xff0c;国家发改委能源研究所可再生能源发展中心副主任陶冶表示&#xff0c;“双碳”目标意味着国家产业结…

【JS逆向学习】猿人学 第五题 js混淆 乱码

逆向目标 网址&#xff1a;https://match.yuanrenxue.cn/match/5接口&#xff1a;https://match.yuanrenxue.cn/api/match/5?page2&m1709806560791&f1709806560000参数&#xff1a; Cookie(m、RM4hZBv0dDon443M)payload(m、f) 逆向过程 老规矩&#xff0c;上来先分…

Java后端八股文之Redis

文章目录 1. Redis是什么&#xff1f;2. Redis为什么这么快&#xff1f;3. 为什么要使用缓存&#xff1f;4. Redis几种使用场景&#xff1a;5. Redis的Zset底层为什么要使用跳表而不是平衡树、红黑树或者B树&#xff1f;6.Redis持久化6.1 什么是RDB持久化6.1.1RDB创建快照会阻塞…

修改Android打包apk的名字和目录

app打包生成apk后通常需要进行备份&#xff0c;但是要区分好哪个apk是什么版本的、什么时候打包的&#xff0c;以方便以后区分使用。 最开始的想法是把版本号、创建时间这些加在apk文件名上即可&#xff0c;但是公司要求apk使用一个固定的名称&#xff0c;那我怎么保存版本号信…

OpenGL学习——19.模板测试

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

Vue+OpenLayers7入门到实战:OpenLayers鼠标移动事件使用,实现鼠标移动到点位上方后高亮显示点位要素

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上监听鼠标移动事件,并简单实现鼠标移动到点位上方后高亮显示点位要素的功能,带领大家快速上手OpenLayers鼠标移动事件的应用。 二、依赖和使用 "ol": &quo…

趣味看图-Linux 文件系统的组成

/&#xff08;根目录&#xff09;&#xff1a;根目录是Linux文件系统中的顶级目录。所有其他目录都是根目录的子目录&#xff0c;使其成为整个文件系统的父目录。 /bin&#xff1a;包含启动系统和执行基本操作所需的基本二进制可执行文件。这些对所有用户都可用。 /boot&…

利用yaml文件部署NacosXxl-job到阿里云的ACK

背景介绍 随着容器化的技术成熟落地&#xff0c;拥抱各种成熟的容器化集群平台是加速我们落地的必然之路&#xff0c;目前国内以阿里云、华为云、腾讯云为平台的供应商为主&#xff0c;国外则以AWS&#xff0c;Azure为主&#xff0c;让我们借助平台已有的优势进行快速落地提高…

G-LAB郭主任公开课:Docker容器,3月18日开课!

带你一起走进Linux的世界&#xff01; 【G-LAB】 Linux最新技术—Docker容器 免费公开课即将开讲&#xff01; 不容错过&#xff01; 公开课课程为期两天&#xff0c;3月18日&#xff06;3月19日晚20&#xff1a;00 分享主题&#xff1a; —3月18日 Docker概念、安装、架…