云安全攻防(五)之 容器基础设施所面临的风险

news2024/11/20 10:25:55

容器基础设施所面临的风险

容器基础设施面临的风险

我们从容器镜像、活动容器、容器网络、容器管理程序接口、宿主机操作和软件漏洞六个方面来分析容器基础设施可能面临的风险

在这里插入图片描述

容器镜像存在的风险

所有容器都来自容器镜像。与虚拟机镜像不同的是,容器镜像是一个不包含系统内核的联合文件系统(Unionfs),几位进程的正常运行提供基本、一致的文件环境。另外,容器是动态的,镜像是静态的,考虑到这一点,我们从镜像的内容和镜像的流通、使用等几方面开展分析。

不安全的第三方组件

随着容器技术的成熟和流行,大部分流行的开源软件都提供了 Dockerfile 和 容器镜像。在实际的容器化应用开发过程中,人们很少从零开始构建自己的业务镜像,而是将Docker Hub 上的镜像作为基础镜像,在此基础上增加自己的程序或者代码,然后打包成最终的业务镜像并上线运行。例如,为了提供Web服务,开发人员可能会在Django的镜像的基础上,加上自己编写的python代码,然后打包成Web后端镜像。

毫无疑问,这种积累和复用减少了造轮子的次数,大大提高了开发效率和软件质量,推动了现代软件工程的发展。如今,一个较为普遍的情况是,用户自己的代码依赖若干开源组件,这些开源组件本身又有着许多而复杂的依赖树,甚至最终打包好的镜像业务还包含很多用不到的开源组件。这导致许多开发者可能根本不知道自己的镜像中包含多少及哪些组件。包含的组件越多,可能存在的漏洞就越多,大量引入第三方组件的同时也大量映入了风险。2020年,在使用最为广泛的镜像仓库Docker Hub中,约有51%的镜像包含了一个危险的(critical)级别的安全漏洞。这意味着,使用这些或基于这些镜像制作的容器镜像都将面临着安全风险。

大肆传播的恶意镜像

除了有漏洞的可信开源镜像外,以 Docker Hub 为代表的公共镜像仓库中可能还存在着一些恶意镜像,如果使用了这些镜像作为基础镜像,那么这种行为无异于引狼入室,所有基于这些基础恶意镜像开发的镜像都将面临着重大的安全风险和传播风险。

极易泄露的敏感信息

容器的先进性之一在于它提供了“一次开发,随处部署”的可能性,大大的降低了开发者和运维人员的负担。但为了开发和调试方便,开发者可能会将敏感信息,如数据库的密码、证书和私钥等内容直接写到代码中,或者以配置文件的形式存放。构建镜像时,将这些敏感内容一并打包进镜像,甚至上传到公开的镜像仓库,从而造成敏感数据泄露。

活动容器存在的风险

那么,当容器镜像运行起来以后,又将面临哪些风险呢?

不安全的容器应用

与传统的IT环境类似,容器环境下的业务代码本身也可能存在Bug甚至安全漏洞。容器技术并不能解决这些安全问题。无论是SQL注入代码、XSS和文件上传漏洞,还是反序列化或缓冲区溢出漏洞,它们都有可能出现在容器化的应用中。容器在默认情况下连接到桥接网桥提供的子网中。如果在启动时配置了端口映射,容器就能提供对外服务,在这种情况下,容器所提供的服务就有可能被外部的攻击者访问和利用,从而导致容器被入侵。

不受限制的资源共享

与其他虚拟化技术一样,容器并非空中楼阁。既然运行在宿主机上,容器必然要使用宿主机提供的各种资源–计算资源、存储资源等。如果容器使用了过多的资源,就会对宿主机及宿主机上的其他容器造成影响,甚至形成资源耗尽型攻击。然而,在默认情况下,Docker 并不会对容器的资源使用进行限制,也就是说,默认配置启动的容器理论上能够无限使用宿主机的CPU、内存、硬盘等资源。

不安全的配置与挂载

"配置与挂载"指的是容器在启动时带有配置选项和挂载选项,我们知道,作为一种虚拟化技术,容器的核心是两大隔离机制:

  • Linux命名空间机制:在文件系统、网络、进程、进程间通信和主机名等方面实现隔离
  • cgroups机制:在 CPU、内存和硬盘等资源方面实现隔离

除此以外,Capabilities、Seccomp和AppArmor等机制通过限制容器内进程的权限和系统调用的访问能力,进一步提高了容器的安全性

为什么配置和挂载也有可能导致风险呢?因为通过简单的配置和挂载,容器的隔离性将被轻易打破,例如:

  • 通过配置 --privikeged 选项,容器将不受Seccomp 等安全机制的限制,容器内root权限将变得与宿主机上的root权限无异
  • 通过配置 --net=host,容器将与宿主机处于同一网络命名空间(网络隔离被打破)
  • 通过配置 --pid=host,容器将与宿主机处于同一进程命名空间(进程隔离被打破)
  • 通过执行挂载 --volume /:/host,宿主机根目录将被挂载到容器内部(文件系统隔离被打破)

容器网络存在的风险

我们刚刚提到,默认情况下每个容器处于自己独立的网络命名空间内,与宿主机之间存在隔离。然而,每个容器都处于由 docker0 网桥构建的同一局域网内,彼此之间互相连通。从理论上来讲,容器之间可能会发生网络攻击,尤其是中间人攻击等局域网内常见的攻击方法

事实上而言也确实如此,容器内的root用户虽然被Docker 禁用了许多权限(Capabilities机制),但它目前依然具有CAP_NET_RAW 权限,具备构造并发送 ICMP、ARP等报文的能力。因此ARP欺骗、DNS劫持等中间人攻击是可能发生在容器网络内的。

容器管理程序接口存在的风险

Socket 是 Docker 守护进程接受请求及返回响应的应用接口,Docker 守护进程主要监听两种形式的Socket:UNIX socket 和 TCP socket。安装完成启动后,Docker 守护进程默认只监听 UNIX socket。

UNIX socket

为什么 UNIX socket 会存在安全风险呢?他的问题主要与Docker 守护进程的高权限有关:Docker 守护进程默认以宿主机的root权限运行。只要能够与该UNIX socket 进行交互,就可以借助Docker 守护进程 以root 权限在宿主机上执行任意的命令,目前来讲,相关的风险主要有两个:

  • 许多用户为了方便,不想每次输入密码时使用sudo或su,就将普通用户也加入了docker 用户组,这使得普通用户有权限直接访问UNIX socket。那么一旦攻击者获得了这个普通用户的权限,他就能够借助 Docker UNIX socket 在宿主机上提升为root权限
  • 为了实现在容器内管理容器,用户可能会将Docker UNIX socket 挂载 到容器内部,如果该容器被入侵,攻击者就能借助这个socket 实现容器逃逸,获得宿主机的root 权限

TCP socket

在较新版本的Docker 中,Docker 守护进程默认不会监听TCP socket。用户可以通过配置文件来设置Docker 守护进程开启对TCP socket的监听,默认监听端口一般是 2375.然而默认情况下,Docket 守护进程 TCP socket 的访问是无加密的且无认证的。因此,任何网络可达的访问者都可以通过该TCP socket 来对 Docker 守护进程下发命令。列如,以下命令能够列出IP为192.168.41.10的主机上的所有活动容器:

docker -H tcp://192.168.41.10:2375 ps

显而易见,攻击者也能够通过这样的TCP socket 对目标主机上的Docker 守护进程下发命令,从而实现对目标主机的控制。控制方式与通过UNIX socket 的控制类似。

宿主机操作系统存在的风险

与虚拟机不同,作为一种轻量级虚拟化的技术,容器通常与宿主机共享内核。这意味着,如果宿主机内核本身存在的安全漏洞,理论上,这些漏洞是能够在容器内进行利用的。通过这些漏洞,攻击者可能实现权限提升,甚至从容器中逃逸,获得宿主机的控制权。列如,在存在CVE-2016-5195 脏牛漏洞的容器环境中,攻击者可以借助该漏洞向进程 vDSO 区域写入恶意代码,从而实现容器逃逸。

无法根治的软件漏洞

任何软件都存在漏洞,Docker 自然不会例外。在已经曝光的漏洞中,CVE-2019-14271、CVE-2019-5736 等漏洞能够导致容器逃逸,属于高危漏洞,其中CVE-2019-14271的CVSS 3.x 风险评分更是高达 9.8 分。

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

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

相关文章

基于埋点日志数据的网络流量统计 - PV、UV

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 一、 网站总流量数统计 - PV 1. 需求分析 2. 代码实现 方式一 方式二 方式三:使用process算子实现 方式四:使用process算子实现 二、网站独立访客数统计 - UV 1. …

新闻稿代写软件有哪些?聪明灵犀工具助你撰写合格新闻稿

新闻稿代写软件有哪些?新闻稿是一种重要的宣传工具,但是撰写优秀的新闻稿需要一定的写作技巧和经验。幸运的是,现在有许多新闻稿代写软件可供使用,这些工具可以帮助你撰写出更优质的新闻稿。本文将介绍一些常用的新闻稿代写软件以…

【性能调优-实例演示】CPU爆了怎么定位问题--》调试指令性能分析工具

性能调优 定位生产性能问题 生产环境,CPU Memory 告警 top:找出占CPU比较高的进程${pid}(内存增长,CPU居高不下)top -Hp ${pid}:显示所有线程的CPU占比,观察进程中的线程,找出哪个…

Vol的学习

首先学习基础用法 1.查看系统基本信息 vol.py -f 路径 imageinfo 2.查看进程命令行 vol.py -f 路径 --profile系统版本 cmdline vol.py -f 路径 --profile版本 cmdscan 3.查看进程信息 vol.py -f 路径 --profile系统 pslist 通过树的方式返回 vol.py -f 路径 --profile系统…

淘宝资源采集(从零开始学习淘宝数据爬取)

1. 为什么要进行淘宝数据爬取? 淘宝数据爬取是指通过自动化程序从淘宝网站上获取数据的过程。这些数据可以包括商品信息、销售数据、评论等等。淘宝数据爬取可以帮助您了解市场趋势、优化您的产品选择以及提高销售额。 淘宝作为全球的电商平台,每天都有…

从初学者到专家:Java 数据类型和变量的完整指南

目录 一、字面常量 1.1什么常量? 1.2常见的六种常量类型 二、数据类型 2.1什么是数据类型? 2.2基本数据类型: 2.3引用数据类型 三、变量 3.1什么是变量? 3.2变量的命名规则 3.3变量的作用域 3.4变量的被final修饰 四…

C++ 外部变量和外部函数

1.外部变量 如果一个变量除了在定义它的源文件中可以使用外,还能被其他文件使用,那么就称这个变量为外部变量。命名空间作用域中定义的变量,默认情况下都是外部变量,但在其他文件中如果需要使用这一变量,需要用extern…

CAS - 原理简介

CAS是JDK提供的非阻塞原子操作,它通过硬件保证了比较-更新的原子性。它是非阻塞的且自身具有原子性,也就是说CAS效率高、可靠。CAS是一条CPU的原子指令(cmpxchg指令),不会造成所谓的数据不一致问题,Unsafe类提供的CAS方法&#xf…

【内网穿透】内网穿透应用场景

伴随着科学技术的进步,我们身边出现了越来越多的电子设备,特别是移动电子设备的普及,给我们的生活带来极大的便利,而软件技术的发展,更为这些软件设备带来更多应用的可能。虽然移动设备覆盖了了我们生活的绝大部分场景…

Mybatis引出的一系列问题-JDBC 的探究

1 引入对JDBC的理解-1 一般来说,Java应用程序访问数据库的过程是: 装载数据库驱动程序;通过jdbc建立数据库连接;访问数据库,执行sql语句;断开数据库连接。 Public void FindAllUsers(){//1、装载sqlserve…

面试热题(接雨水问题)

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 我们看到题的第一步,永远是对入参进行判断 public int trap(int[] height) {if (height null) {return 0;}...} 但是我们想想看,接…

uniapp微信小程序底部弹窗自定义组件

基础弹窗效果组件 <template><view><viewclass"tui-actionsheet-class tui-actionsheet":class"[show ? tui-actionsheet-show : ]"><view class"regional-selection">底部弹窗</view></view><!-- 遮罩…

教你使用Pyinstaller将Python源码打包成可执行程序exe的方法

pyinstaller是一个常用的Python打包工具&#xff0c;可以将Python程序打包成独立的可执行文件&#xff0c;支持Windows、Linux和macOS等平台。 ★★★Pyinstaller有许多参数&#xff0c;以下是其中一些主要参数的含义&#xff1a; -F, --onefile&#xff1a;打包一个单个文件…

Excel如何把两列互换

第一步&#xff1a;选择一列 打开excel&#xff0c;选中一列后将鼠标放在列后&#xff0c;让箭头变成十字方向。 第二步&#xff1a;选择Shift键 按住键盘上的Shift键&#xff0c;将列往后移动变成图示样。 第三步&#xff1a;选择互换 完成上述操作后&#xff0c;松开鼠标两…

Netty框架:ByteBuf空间不够时自动扩充空间

说明 使用Netty的ByteBuf&#xff0c;空间不够时可以自动扩充。扩充时&#xff0c;不是一个字节一个字节的扩充&#xff0c;而是扩充一段空间。对于不同的ByteBufAllocator实现&#xff0c;每次扩充的空间大小也不相同。 代码举例 使用Unpooled分配ByteBuf 下面这段代码&am…

数据结构 | 搜索和排序——搜索

目录 一、顺序搜索 二、分析顺序搜索算法 三、二分搜索 四、分析二分搜索算法 五、散列 5.1 散列函数 5.2 处理冲突 5.3 实现映射抽象数据类型 搜索是指从元素集合中找到某个特定元素的算法过程。搜索过程通常返回True或False&#xff0c;分别表示元素是否存在。有时&a…

快速WordPress个人博客并内网穿透发布到互联网

快速WordPress个人博客并内网穿透发布到互联网 文章目录 快速WordPress个人博客并内网穿透发布到互联网 我们能够通过cpolar完整的搭建起一个属于自己的网站&#xff0c;并且通过cpolar建立的数据隧道&#xff0c;从而让我们存放在本地电脑上的网站&#xff0c;能够为公众互联网…

Qt+GDAL开发笔记(二):在windows系统msvc207x64编译GDAL库、搭建开发环境和基础Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/132077288 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

阿里云平台注册及基础使用

首先进入阿里云官网&#xff1a; 阿里云-计算&#xff0c;为了无法计算的价值 点击右上角“登录/注册”&#xff0c;如果没有阿里云账号则需要注册。 注册界面&#xff1a; 注册完成后需要开通物联网平台公共实例&#xff1a; 注册成功后的登录&#xff1a; 同样点击右上角的…

改进的智能优化算法定性分析:探索与开发分析(Analysis of the exploration and exploitation)

目录 一、改进的智能优化算法探索与开发分析 二、GWO1与GWO探索与开发分析运行结果 三、GWO1与GWO探索与开发实验对比分析 四、代码获取 一、改进的智能优化算法探索与开发分析 智能优化算法旨在将搜索过程分为两个阶段&#xff1a;探索和开发。平衡这两个阶段对于增强算法…