CI/CD 管道安全:构建和部署之外的最佳实践

鉴于对快速创新和敏捷方法论采用的需求,持续集成/持续部署 (CI/CD) 管道已成为构建所有 DevOps 流程的基础。他们是高效交付的支柱。 

事实上,根据持续交付状态报告,使用 CI/CD 工具与所有指标上更好的软件交付性能相关。

这些管道给组织带来了难以置信的安全风险,后果可能很严重。看似无害的代码更改通过受损的管道可能会导致安全漏洞、系统受损和严重的运营中断。这就是为什么 DevSecOps 团队必须遵循最佳实践来保护交付过程的每个阶段。 

在本文中,我们将深入研究 CI/CD 管道安全性的复杂性,探索风险和漏洞,并提供技巧和工具来帮助您增强 CI/CD 管道以抵御潜在威胁。

什么是 CI/CD 管道?

CI/CD 管道是一系列自动化流程,可简化从代码提交到生产的过程,并消除手动切换。这是自动化和控制之间紧密协调的舞蹈,帮助 DevOps 团队以闪电般的速度交付可靠的软件。 

想象一下用于软件更新的传送带。每次开发人员进行更改时,它都会自动跳到传送带上。传送带通过一系列检查点快速进行更改,例如构建代码、运行测试和修复任何错误。如果一切顺利,更新就会快速顺利地交付给用户!

简而言之,这基本上是一个 CI/CD 管道。CI 代表持续集成,不断合并和测试变更。CD 代表持续交付/部署,其中工作更改将发布给用户。

神奇之处在于:一切都是自动化的。这可以节省开发人员的时间和精力,同时尽早发现问题。将其视为软件更新的质量控制系统,确保只有最好的软件才能到达您的用户。因此,下次您听到 CI/CD 管道时,请记住,这只是自动软件更新传送带的一种奇特说法。

持续集成充当第一个检查点,自动合并代码更改并触发自动化测试,以确保新代码与现有代码库无缝集成。这有助于确保在开发过程的早期识别并解决错误和回归。

然后,持续交付接管、打包和暂存经过测试的代码以进行部署。持续部署是持续交付的扩展,它更进一步,将代码更改直接自动部署到生产中,前提是代码更改通过了所有必要的测试。 

重要的是,CI/CD 管道是软件供应链的重要组成部分,在“构建和发布”阶段发挥着重要作用。 

CI/CD 管道阶段

CI/CD 管道有几个不同的阶段。每个阶段在软件开发生命周期(SDLC)中都起着至关重要的作用。如果您想在整个管道中实施强大的安全措施,您首先必须了解各个阶段。

为什么 CI/CD 安全很重要?

CI/CD 管道是有吸引力的目标。恶意行为者经常以 CI/CD 管道为目标,以获取敏感数据的访问权限或操纵代码以瞄准下游客户。从代码提交到生产,每个阶段都是可能的目标。如果管道本身受到损害,即使是最安全的代码也容易受到攻击,可能导致恶意代码注入软件,就像2021 年Codecov 漏洞一样。攻击者从 CI 中窃取数据后,数千名 Codecov 客户受到影响。一个构建。

这些违规行为给组织造成了数百万美元的损失,削弱了客户的信任,并对品牌声誉产生了长期的负面影响。 

在确定可帮助您保护端到端 SDLC 的解决方案之前,让我们先探讨一些其他常见的 CI/CD 安全漏洞。

常见的 CI/CD 安全风险 

秘密泄密

有时,开发人员会无意中提交包含 API 密钥、密码或加密密钥等机密的代码。攻击者可以利用这些暴露的秘密并获得对关键系统和服务的未经授权的访问。 

2017 年 Uber就发生过这种情况,当时他们的 GitHub 存储库被意外暴露。该存储库包含访问凭据。攻击者发现并利用这些凭证对 Uber 的 AWS 账户进行未经授权的访问,从而泄露了近 6000 万用户的个人数据。

供应链攻击

供应链攻击针对 CI/CD 管道中使用的依赖项和组件。例如,攻击者可能会将恶意代码注入常用库或破坏包管理器,从而导致受感染软件的分发。这意味着受影响的不仅仅是目标组织。客户、供应商、合作伙伴和其他第三方也是如此。

当组织在不知不觉中将这些受损的依赖项纳入其 CI/CD 管道时,攻击者就会获得立足点并造成严重破坏。

最近最引人注目的供应链攻击示例之一发生在 2020 年,当时恶意行为者破坏了 SolarWinds 软件构建流程,在其 Orion 软件更新中注入了后门。然后,组织在不知不觉中安装了受感染的更新,导致广泛的漏洞和对敏感网络的未经授权的访问。

配置错误

CI/CD 工具、脚本或基础设施设置中的错误配置可能会暴露攻击者可以利用的漏洞。这可能包括访问控制配置不当、默认设置不安全或权限管理不善。这可能允许未经授权的用户查看或修改敏感代码和配置,从而损害管道的整体安全性。

代码注入

代码注入涉及将恶意代码引入 CI/CD 管道,可能导致未经授权的代码执行或在正在开发的软件中引入漏洞。

这正是 2021 年发生的情况,当时恶意脚本被注入Codecov 的 CI/CD 流程。受损的脚本暴露了凭据,使攻击者能够从 CI/CD 环境中窃取敏感信息并危害多个组织的代码存储库。

访问控制不足

访问控制薄弱或不足可能会导致对 CI/CD 管道的关键组件进行未经授权的访问。这可能使他们能够修改代码、插入恶意脚本或损害管道的完整性,从而构成重大安全风险。

2022 年 LastPass就发生了这种情况,当时攻击者在其开发环境中获得了部分源代码和专有技术信息的访问权限。然后,他们利用这些信息发起了一系列攻击,其中包括针对具有高级安全身份验证的高级 DevOps 工程师的攻击。

最终,他们窃取了工程师的主密码,并获得了加密的安全笔记和解密密钥,从而打开了关键数据库备份的大门。

此列表只是可能导致 CI​​/CD 管道受损的数千种攻击路径的几个示例。还想吃更多吗?NCC Group 的研究团队在本文中分享了他们执行的 10 个复杂攻击示例。 

CI/CD 管道安全最佳实践

以下最佳实践技巧将有助于降低违规的可能性。注意:务必不断地重新评估您的状况,以跟上不断发展的安全标准和新出现的威胁。

如需更多提示,请查看NSA 和 CISA 的联合备忘录。

访问控制

适当的访问控制(包括角色、权限和身份验证机制)对于防止未经授权的访问和操纵 CI/CD 管道至关重要。通过将访问权限限制为仅需要的人员并强制执行最小权限原则,组织可以降低恶意活动的风险。

扫码

通过将自动代码扫描集成到 CI/CD 管道中,可以在部署易受攻击的代码之前检测并解决已知漏洞或常见应用程序安全风险等问题。这降低了将漏洞引入生产环境的风险。

漏洞管理

通过主动识别、确定优先级和减轻软件和基础设施组件中的安全漏洞,领先于潜在威胁并确保您的管道保持弹性。这包括定期扫描漏洞、评估其严重性以及实施措施来修复或减轻风险。

安全环境配置

正如我们在 Uber 中看到的那样,错误配置可能会导致安全漏洞。这意味着正确配置服务器、容器、数据库和其他组件的设置对于防止潜在的攻击至关重要。

避免错误配置的一些重要提示:

■ 使用最小权限策略限制访问和权限
■ 使用安全且集中的方法来管理环境变量
■ 使用最新的安全补丁使所有 CI/CD 组件保持最新状态

DevOps 和安全团队之间的协作

DevOps 和安全团队之间的有效协作可确保安全性不会被视为事后的想法,而是嵌入到整个 CI/CD 流程中。 不幸的是,76% 的安全专业人员发现在安全团队和开发人员团队之间实现协作文化具有挑战性。

那么团队如何才能建立更好的工作关系呢?高层的支持和承诺、培训和激励都会有所帮助。最好的方法就是我们所说的受控左移。 

在这种模式下,安全团队仍然专注于减少漏洞,同时也注意修复缺陷对开发人员的影响。通过这种方式,两个团队可以共同构建适合每个人的流程和工作流程。通过受控的左移,开发人员可以保持速度,同时安全性可以保护管道,从而改善组织的安全状况。

工具/技术

正确的工具和技术可以自动化安全流程、简化漏洞检测并强制执行安全策略。将这些工具集成到 CI/CD 管道中可以提高安全措施的效率。这使组织能够识别和解决安全问题,同时保持持续交付的节奏。 

虽然数十种不同的工具(SCA、SAST、CI/CD 安全工具)可以帮助您的组织保护其 CI/CD 管道,但只有一种工具可以提供完整的保护并让您高枕无忧:完整的应用程序安全状态管理 (ASPM)。

完整的 ASPM可在管道内和管道外提供持续的安全性,在整个软件生命周期中从多个来源获取数据,并为安全团队提供持续、实时的风险视图。问题可以更快、更容易地检测、响应和修复。 

完整的 ASPM 解决方案提供了一套应用程序安全测试工具(例如 SCA 和 SAST)、提供 CI/CD 安全性并从其他第三方扫描仪获取数据。

安全第一、开发人员友好的ASPM 平台为 CI/CD 管道每个阶段的安全、工程和 DevOps 团队提供可见性、优先级和修复。

通过提供一个关联管道安全、秘密扫描、代码泄漏检测、SAST、SCA和IaC 扫描的单一、统一的安全平台,让安全团队和开发人员高枕无忧。 

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

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

相关文章

java代码中调用自定义函数

定义函数 CREATE DEFINERrootlocalhost FUNCTION test_fun1(num1 FLOAT,num2 FLOAT) RETURNS float BEGINDECLARE SUM FLOAT DEFAULT 0;SET SUMnum1num2;RETURN SUM; END <select id"cunchu" resultType"java.util.Map">SELECT test_fun1(1,2) as r…

MySQL索引原理以及SQL优化

案例 struct index_failure_t{int id;string name;int cid;int score;string phonenumber;}Map<int,index_failure>; 熟悉C的同学知道&#xff0c;上述案例中&#xff0c;我们map底层是一颗红黑树&#xff0c;一个节点存储了一对kv&#xff08;键值对&#xff09;&…

WPF应用程序(.Net Framework 4.8) 国际化

1、新建两个资源字典文件zh-CN.xaml和en-US.xaml&#xff0c;分别存储中文模板和英文模板 (1) zh-CN.xaml <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&q…

机器学习:Logistic回归(Python)

Logistic回归&#xff08;二分类&#xff09; logistic_regression_class2.py import numpy as np import matplotlib.pyplot as pltclass LogisticRegression:"""逻辑回归&#xff0c;采用梯度下降算法 正则化&#xff0c;交叉熵损失函数&#xff0c;实现二分…

机器学习 强化学习 深度学习的区别与联系

机器学习 强化学习 深度学习 机器学习 按道理来说&#xff0c; 这个领域&#xff08;机器学习&#xff09;应该叫做 统计学习 &#xff08;Statistical Learning&#xff09;&#xff0c;因为它的方法都是由概率统计领域拿来的。这些人中的领军人物很有商业头脑&#xff0c; 把…

[docker] 利用Dockerfile多级构建缩减镜像大小

一、nginx FROM centos:7 as build #基于centos7镜像 MAINTAINER nginx on centos7 by lxy-20240125 #注释信息 ADD nginx-1.24.0.tar.gz /opt/ #将nginx安装包传输到镜像中 RUN yum -y install pcre-devel zlib-devel gcc gcc-c make && \cd /opt/nginx-1.24.0 &…

什么是DDOS流量攻击,DDoS防护安全方案

随着互联网的发展普及&#xff0c;云计算成新趋势&#xff0c;人们对生活方式逐渐发生改变的同时&#xff0c;随之而来的网络安全威胁也日益严重&#xff01; 目前在网络安全方面&#xff0c;网络攻击是最主要的威胁之一&#xff0c;其中DDoS攻击是目前最为常见的网络攻击手段…

Android studio打包apk比较大

1.遇到的问题 在集成linphone打包时发现有118m&#xff0c;为什么如此之大额。用studio打开后发现都是c不同的pu架构。 2.解决办法 增加ndk配置&#xff0c;不选配置那么多的cpu结构&#xff0c;根据自己需要调整。 defaultConfig { applicationId "com.matt.linphoneca…

2023美赛A题之Lotka-Volterra【完整思路+代码】

这是2023年的成功&#xff0c;考虑到曾经付费用户的负责&#xff0c;2024年可以发出来了。去年我辅导队伍数量&#xff1a;15&#xff0c;获奖M为主&#xff0c;个别F&#xff0c;H&#xff0c;零S。言归正传&#xff0c;这里我开始分享去年的方案。由于时间久远&#xff0c;我…

FPGA——芯片手册学习(AD7606)

芯片手册学习&#xff08;AD7606&#xff09; 芯片封装图引脚功能图总结要操作的端口芯片时序 芯片封装图 引脚功能图 总结要操作的端口 6 PAR/SER/BYTE/ SEL :并行、串行、字节选择&#xff0c;我们使用并行&#xff0c;设置为0 7 STBY:睡眠控制&#xff0c;0电平睡眠 9 10 C…

8-小程序数据promise化、共享、分包、自定义tabbar

小程序API Promise化 wx.requet 官网入口 默认情况下&#xff0c;小程序官方异步API都是基于回调函数实现的 wx.request({method: , url: , data: {},header: {content-type: application/json // 默认值},success (res) {console.log(res.data)},fail () {},complete () { }…

银行数据仓库体系实践(14)--数据应用之内部报表及数据分析

在银行日常经营中&#xff0c;每个部门、分支行随时随地都需要进行数据统计和分析&#xff0c;才能对银行当前业务状况及时了解&#xff0c;以进行后续经营策略、营销活动、风险策略的调整和决策。那在平时进行数据分析时除了各数据应用系统&#xff08;如各类监管报表系统、财…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为&#xff1a; 运行效果为&#xff1a; from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

Android悬浮窗实现步骤详解

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

基于springboot招生管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括招生管理系统的网络应用&#xff0c;在外国招生管理系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。招生管理系统具有招生公告信息管理功能的选择…

三款精选数字孪生产品大比拼

作为一名数据可视化领域的资深用户&#xff0c;我接触过众多数据可视化产品。本文将介绍三款备受关注的数据可视化工具&#xff0c;并对它们进行详细的比较。 首先&#xff0c;让我们了解一下数据可视化产品的核心价值。在信息爆炸的时代&#xff0c;数据可视化成为快速理解复…

Kubernetes k8s

Kubernetes k8s 一个开源的容器编排引擎&#xff0c;用来对容器化应用进行自动化部署、 扩缩和管理。 从架构设计层面&#xff0c;k8s能很好的解决可用性&#xff0c;伸缩性&#xff1b;从部署运维层面&#xff0c;服务部署&#xff0c;服务监控&#xff0c;应用扩容和故障处…

C++——特殊类

特殊类 文章目录 特殊类一、请设计一个类&#xff0c;不能被拷贝二、请设计一个类&#xff0c;只能在堆上创建对象方案一&#xff1a;析构函数私有化方案二&#xff1a;构造函数私有化 三、请设计一个类&#xff0c;只能在栈上创建对象四、请设计一个类&#xff0c;不能被继承五…

互联网加竞赛 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

初学者在Python中的基本图像处理库 - OpenCV和imutils

处理图像处理和操作的最常用的库之一是 Python 的 OpenCV。对于图像分类、目标检测或光学字符识别&#xff0c;在人工智能领域与图像相关的任何工作大多数时候都需要某种形式的图像处理和操作。 在本教程中&#xff0c;我们将专注于 OpenCV 的一些基本功能。这些功能基础且有时…