当前位置: 首页 > news >正文

了解容器运行时安全:保护你的容器应用

前言

容器是一种虚拟化技术,用于封装和运行应用程序及其依赖项,以便在不同的计算环境中保持一致性和可移植性。自2013年容器诞生至今,容器Docker镜像的下载量超20亿,虽然容器行业发展如火如荼,但是其安全风险却不容乐观, 据《Sysdig 2022 云原生安全和使用报告》显示,超过75%的运行容器存在高危或严重漏洞、62%的容器被检测出包含shell命令、76%的容器使用root权限运行,这些信息表明大部分企业中的容器没有在安全的环境中运行使用。

介绍

容器运行时安全是在容器运行时通过检测和防止恶意行为来提供主动保护,整个容器生命周期中的最后一道安全屏障。容器运行时则是指负责启动、管理和监视容器的组件,例如 Docker、containerd 或 CRI-O。容器运行时安全是容器生命周期的一个关键阶段,旨在降低容器化应用程序受到威胁的风险,是容器生态系统中不可或缺的一部分。

Capabilities

虽然容器本身利用了 Namespace 和 Cgroup 技术将容器和宿主机之间的资源进行了隔离并加以限制,但是由于容器与宿主机共享内核仍有带来风险的可能,借助Linux内核的安全特性Capabilities 和 Seccomp可以进一步加固容器的安全性。

在 Linux 中,进程可以被授予各种权限和特权,称为“capabilities”,通常情况下,容器中的进程不需要完整的 root 权限,因此可以通过减少能力来增加容器的安全性。下表中列举了部分可能的 "Capabilities",默认情况下,容器中的进程通常只具备一部分最小的 "Capabilities",以减少潜在的安全风险。

名称

权限

CAP_CHOWN

修改文件的所有者。

CAP_FSETID

设置文件的 setgid 位。

CAP_KILL

发送信号给其他进程。

CAP_SETPCAP

在进程间传递权限。

CAP_SYS_CHROOT

执行 chroot 操作。

CAP_SYS_ADMIN

系统管理员权限,包括加载内核模块、修改网络参数、挂载文件系统等。

CAP_SETFCAP

设置文件能力。

Seccomp

相对capabilities,Seccomp 则是对系统调用更细粒度的单点控制,它通过定义一个系统调用过滤策略来实现,可以对任意的系统调用及其参数(仅常数,无法指针解引用)进行过滤。

Seccomp 的工作原理是在进程启动时,通过调用prctl()系统调用来加载一个特定的Seccomp策略,然后将进程的系统调用限制为该策略中所定义的允许的系统调用列表。一旦策略被加载,进程就无法再执行策略之外的系统调用。

Seccomp有两种模式:

  • Strict Mode(严格模式):在严格模式下,只有少数几个系统调用(如read()、write()和exit()等)是允许的,所有其他系统调用都会被拒绝。这可以极大地减少进程的攻击面,但也限制了应用程序的功能。

  • Filter Mode(过滤模式):在过滤模式下,可以自定义一个策略文件,其中包含了允许或拒绝的系统调用列表。这种模式更加灵活,允许应用程序定义自己的访问控制策略。

Seccomp是Linux系统中的一项强大的安全机制,可以帮助限制应用程序的攻击面,提高系统的安全性。然而,它需要仔细的策略设计和测试,以确保不会影响应用程序的正常运行。

Selinux

相对Seccomp的系统调用过滤机制,Selinux则基于强制访问控制(MAC)模型,它将系统资源(如文件、进程、端口等)与安全上下文相关联,通过策略文件定义了哪些操作可以在特定上下文之间执行。 SELinux的关键组件包括策略(Policy)、安全上下文(Security Context)、标签(Label)、策略管理工具以及SELinux模式,在容器安全方面,SELinux可以为容器提供额外的安全层,保护容器环境免受潜在的威胁。SELinux在容器安全中的作用:

  • 隔离容器:SELinux可以强化容器隔离,确保容器只能访问其允许的资源。这可以防止容器逃逸和恶意容器之间的攻击。

  • 细粒度访问控制:SELinux允许管理员定义非常详细的访问控制规则,以确保容器只能执行其允许的操作,从而减少容器的攻击面。

  • 进程隔离:SELinux可以限制容器内进程的能力,确保它们只能执行必要的操作,从而减少权限滥用的风险。

  • 审计和追踪:SELinux可以记录容器内的安全事件,包括拒绝的操作,以便进行审计和故障排除。

  • 完整性保护:SELinux可以确保系统资源的完整性,防止未经授权的修改或访问。 SELinux允许管理者可以基于程序的功能和安全属性,加上用户要完成任务所需的访问权作出访问决策,将程序限制到功能合适、权限最小化的程度。

eBPF

eBPF(Extended Berkeley Packet Filter)是一种先进的、高性能的系统级编程技术,最初由伯克利大学开发用于网络数据包过滤,但现在已经扩展到用于更广泛的用途。eBPF在容器安全方面具有广泛的应用,可以帮助监控、保护和提高容器环境的安全性。以下是一些eBPF在容器运行时安全方面的主要应用:

  • 网络安全:eBPF可以用于捕获容器内部和容器间的网络流量,以检测潜在的恶意行为,如入侵、DDoS攻击或未授权的数据访问。eBPF可以根据特定的网络规则来过滤流量,允许或拒绝特定的网络连接,以保护容器免受网络攻击。

  • 性能分析:eBPF可以捕获容器内部的性能数据,如CPU、内存、磁盘和网络使用情况,以便进行性能分析和优化。通过eBPF,可以监控容器内进程的系统调用,以识别性能瓶颈、异常行为或资源泄漏。

  • 运行时安全性监控:eBPF可以监控容器内进程的行为,包括文件访问、网络连接和系统调用,以识别潜在的恶意行为。同时eBPF可以用于验证容器的配置是否符合最佳实践和安全标准,以确保容器环境的安全性。

  • 容器漏洞补丁:eBPF可以用于临时修补容器中的漏洞,例如拦截可能导致漏洞利用的系统调用,从而减轻漏洞的影响。

  • 自动化安全控制:eBPF可以与容器编排工具集成,自动响应安全事件,如关闭容器、隔离容器或重新配置网络规则,以减少攻击面。

图1 eBPF在网络、存储中的使用范围及进程函数调用

eBPF在容器安全方面提供了强大的工具和机制,可以帮助监控、保护和加强容器环境的安全性。它具有高度的灵活性和性能,适用于各种容器化部署,从而提高了容器化应用程序的安全性和可管理性。

总结

容器安全领域面临着很大挑战,同时也充满了机会。但毫无疑问,它会越来越重要越来越好。通过了解并采用适合的容器安全技术,比如容器镜像安全、容器运行时安全、容器编排平台的安全性等,组织可以更好地保护其容器化应用程序和数据。

相关文章:

了解容器运行时安全:保护你的容器应用

前言 容器是一种虚拟化技术,用于封装和运行应用程序及其依赖项,以便在不同的计算环境中保持一致性和可移植性。自2013年容器诞生至今,容器Docker镜像的下载量超20亿,虽然容器行业发展如火如荼,但是其安全风险却不容乐…...

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求

大规模语言LLaVA:多模态GPT-4智能助手,融合语言与视觉,满足用户复杂需求 一个面向多模式GPT-4级别能力构建的助手。它结合了自然语言处理和计算机视觉,为用户提供了强大的多模式交互和理解。LLaVA旨在更深入地理解和处理语言和视…...

Element UI定义方法校验邮箱格式

1. .vue中定义了3个邮箱输入框&#xff0c;前面两个是输入多个邮件地址&#xff0c;最后一个是使用element自带的校验来校验单个邮件地址 <el-row><el-col :span"24"><el-form-item label"收件人" prop"to"><el-input v-mo…...

DigiCert代码签名证书

在当今的数字化时代&#xff0c;确保软件的完整性和来源的可靠性至关重要。DigiCert代码签名证书是一种专业而受信任的数字签名解决方案&#xff0c;帮助开发者保护其软件免受篡改和恶意行为的侵害。本文将介绍DigiCert代码签名证书的特点和优势&#xff0c;并讨论为何选择Digi…...

HTML5+CSS3小实例:网页底部间隔波浪动画特效

实例:网页底部间隔波浪动画特效 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content…...

前端 js 之 代码执行的一个过程 02

嘿&#xff0c;欢迎你来 &#xff01;&#x1f495; 文章目录 前言一、运行一个 js 文件二、运行环境三、js执行代码的过程&#xff08;普通变量&#xff09;四、打印 window五、js执行代码的过程&#xff08;函数变量&#xff09;六、函数调用函数的过程注意&#xff01;&…...

【经验分享】如何构建openGauss开发编译提交一体化环境

前文 本文适合对openGauss源代码有好奇心的爱好者&#xff0c;那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的&#xff1f;openGauss的编译环境是如何构建的&#xff1f;如何向openGauss提交代码&#xff0c;笔者集合官方和几位博主实践提…...

儿童疫苗接种:安全与注意事项

引言&#xff1a; 儿童的疫苗接种是维护其健康和预防传染病的重要措施。疫苗可以有效地保护儿童免受各种疾病的威胁&#xff0c;但在接种过程中需要家长和监护人特别关注一些注意事项&#xff0c;以确保接种的安全性和有效性。本文将深入探讨儿童疫苗接种的重要性&#xff0c;…...

Go 代码块与作用域,变量遮蔽问题详解

Go 代码块与作用域详解 文章目录 Go 代码块与作用域详解一、引入二、代码块 (Block)2.1 代码块介绍2.2 显式代码块2.3 隐式代码块2.4 空代码块2.5 支持嵌套代码块 三、作用域 (Scope)3.1 作用域介绍3.2 作用域划定原则3.3 标识符的作用域范围3.3.1 预定义标识符作用域3.3.2 包代…...

可观测性-Metrics-WebClient异步Http远程Call

代码示例 1.依赖导入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><ar…...

Android之播放本地视频和Url视频方法

一、播放本地视频文件 根据文件路径在浏览器中播放&#xff0c;可用于视频预览等场景 效果&#xff1a; 用浏览器播放本地视频 文件路径例子&#xff1a; /storage/emulated/0/Android/data/com.custom.jfrb/files/Movies/1697687179497.mp4 File file new File("文件…...

设计模式:工厂方法模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

本节主要介绍设计模式中的工厂方法模式。 简介&#xff1a; 工厂方法模式&#xff0c;它是对简单工厂模式的进一步抽象化&#xff0c;其好处是可以使系统在不修改原来代码的情况下引进新的产品&#xff0c;即满足开闭原则。 它定义了一个用于创建对象的工厂接口&#xff0c;让…...

C++基础——指针

1 概述 指针的作用&#xff1a;可以通过指针间接访问内存 内存编号从0开始&#xff0c;一般使用十六进制数字表示&#xff0c;指针可以保存地址 2 指针变量定义和作用 int main() {//1、指针的定义int a 10; //定义整型变量a//指针定义语法&#xff1a; 数据类型 * 变量名 …...

PLC 学习day02 硬件输入/输入的知识

1.资料来源 1.链接&#xff1a;三菱PLC视频教程全集之FX3U基本单元输入接线_哔哩哔哩_bilibili 2. 链接&#xff1a; 三菱plc视频教程全集之FX3U基本单元输出接线_哔哩哔哩_bilibili 2. PLC 的输入部分器件连接。 2.1 PLC输入部分的硬件知识 1. 一般输入部分是PLC获取信息的地…...

rabbitMq (2)

RabbitMQ 消息应答与发布 文章目录 1. 消息应答1.2 自动应答1.2 手动应答1.3 代码案例 2. RabbitMQ 持久化2.1 队列持久化2.2 消息持久化 3. 不公平分发4. 预取值分发5. 发布确认5.1 发布确认逻辑5.2 开启发布确认的方法5.3 单个确认发布5.4 批量确认发布5.5 异步确认5.5.1 处理…...

通讯协议学习之路:RS422协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 一、…...

剪映failed to initialize,cuda.is_available()为false解决

debug记录帖 错误1&#xff1a;打开剪映发现弹窗提示failed to initialize graphics backed for D3D11 错误2&#xff1a;torch版本、cuda版本&#xff08;之前的正常环境&#xff09;都对但是torch.cuda.is_available()为false 怀疑是显卡驱动的问题 打开Nvidia Geforce Exp…...

基于Spring Boot的LDAP开发全教程

写在前面 协议概述 LDAP&#xff08;轻量级目录访问协议&#xff0c;Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录服务的开放标准协议,是一种基于TCP/IP协议的客户端-服务器协议&#xff0c;用于访问和管理分布式目录服务&#xff0c;如企业内部的…...

在 Linux 上保护 SSH 服务器连接的 8 种方法

SSH 是一种广泛使用的协议&#xff0c;用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是&#xff0c;不安全的默认配置也会带来各种安全风险。 具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其是如果使用的是公共 IP 地…...

摩尔信使MThings的协议转换(数据网关)功能

摩尔信使MThings可以作为现场总线&#xff08;RS485&#xff09;和以太网的数据中枢&#xff0c;并拥有强大的Modbus协议转换功能。 数据网关功能提供协议转换和数据汇聚功能&#xff0c;可实现多维度映射&#xff0c;包括&#xff1a;不同的通道(总线)类型、协议类型&#xff…...

Mac安装Kali保姆级教程

Mac安装Kali保姆级教程 其他安装教程&#xff1a;使用VMware安装系统Window、Linux&#xff08;kali&#xff09;、Mac操作系统 1 虚拟机安装VM Fusion 去官网下载VM Fusion 地址&#xff1a;https://customerconnect.vmware.com/en/evalcenter?pfusion-player-personal-13 …...

利用Spring Boot框架做事件发布和监听

一、编写事件 1.编写事件类并集成spring boot 事件接口&#xff0c;提供访问事件参数属性 public class PeriodicityRuleChangeEvent extends ApplicationEvent {private final JwpDeployWorkOrderRuleDTO jwpDeployWorkOrderRuleDTO;public PeriodicityRuleChangeEvent(Obje…...

KingBase库模式表空间和客户端认证(kylin)

库、模式、表空间 数据库 数据库基集簇与数据库实例 KES集簇是由单个KES实例管理的数据库的集合KES集簇中的库使用相同的全局配置文件和监听端口、共享相关的进程和内存结构同一数据库集簇中的进程、相关的内存结构统称为实例 数据库 数据库是一个长期存储在计算机内的、有…...

h5的扫一扫功能 (非微信浏览器环境下)

必须在 https 域名下才生效 <template><div><van-field label"服务商编码" right-icon"scan" placeholder"扫描二维码获取" click-right-icon"getCameras" /> <div class"scan" :style"{disp…...

Typora 导出PDF 报错 failed to export as pdf. undefined 解决方案

情况 我想把一个很大的markdown 导出为 248页的pdf 然后就报错 failed to export as pdf. undefined 原因 &#xff1a; 个人感觉应该是图片太大了 格式问题之类导致的 解决 文件 -> 偏好设置 - > 导出 -> pdf -> 自定义 -> 把大小全部改为24mm (虽然图中是32 …...

[架构之路-239]:目标系统 - 纵向分层 - 中间件middleware

目录 前言&#xff1a; 一、中间件概述 1.1 中间件在软件层次中的位置 1.2 什么是中间件 1.3 为什么需要中间件 1.4 中间件应用场合&#xff08;应用程序不用的底层需求&#xff1a;计算、存储、通信&#xff09; 1.5 中间件分类 - 按内容分 二、嵌入式系统的中间件 2…...

javascript利用xhr对象实现http流的comet轮循,主要是利用readyState等于3的特点

//此文件 为前端获取http流 <!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml" lang"UTF-8"></html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/&g…...

【Mybatis源码】XPathParser解析器

XPathParser是Mybatis中定义的进行解析XML文件的类,此类用于读取XML文件中的节点文本与属性;本篇我们主要介绍XPathParser解析XML的原理。 一、XPathParser构造方法 这里我们介绍主要的构造方法 public XPathParser(InputStream inputStream, boolean validation, Propert…...

辉视智慧酒店解决方案助力传统酒店通过智能升级焕发新生

辉视智慧酒店解决方案基于强大的物联网平台&#xff0c;将酒店客控、网络覆盖、客房智能化控制、酒店服务交互等完美融合&#xff0c;打造出全方位的酒店智慧化产品。利用最新的信息化技术&#xff0c;我们推动酒店智慧化转型&#xff0c;综合运用前沿的信息科学和技术、消费方…...

文件和命令的查找与处理

1.命令查找 which which 接命令 2.文件查找 find 按文件名字查找 准确查找 find / -name "hosts" 粗略查找 find / -name "ho*ts" 扩展名查找 find / -name "*.txt" 按文件类型查找 find / -type f 文件查找 find / -ty…...