首页 > 其他分享 >无根容器内部结构浅析

无根容器内部结构浅析

时间:2023-05-07 14:07:39浏览次数:38  
标签:容器 Slirp 用户 漏洞 内部结构 CVE root 浅析

随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器。本文介绍了无根容器的内部结构,并分析了无根容器网络组件中的漏洞。

随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器。无根容器是不需要root即可创建得容器,尽管无根容器在安全方面具有优势,但它们仍在测试开发中。本文介绍了无根容器的内部结构,并分析了无根容器网络组件中的漏洞。

无根容器

无根容器与常规容器相同,区别在于它们不需要root即可形成。无根容器仍处于早期阶段,无根容器出现的原因有很多。

  1. 添加新的安全层。 如果容器运行时受到攻击,攻击者将无法获得主机的root特权。
  2. 允许多个非特权用户在同一台计算机上运行容器。
  3. 允许隔离嵌套容器。

Linux内核的一项新开发使此方案成为可能,允许无特权的用户创建新的用户空间。 当用户创建并输入新的用户空间时,他将成为该空间的root用户,并获得生成容器所需的大多数特权。

网络连接

为了允许容器联网,通常创建虚拟以太网设备(VETH)负责联网。 但只有root才有权创建此类设备,主要的解决方案是Slirp和LXC-user-nic。

  • Slirp

Slirp最初被设计为面向非特权用户的Internet连接。 随着时间的流逝,它成为虚拟机和仿真器(包括著名的QEMU)的网络堆栈,可对其修改调整以启用无根容器中网络连接。它把容器用户和网络名称空间分开并创默认路由设备。 然后,它将设备的文件传递给默认网络名称空间的父级,使其可以与容器和Internet进行通信。

无根容器内部结构浅析_linux

  • LXC-User-Nic

另一种方法是运行setuid创建VETH设备。 尽管它可以启用容器内的联网功能,但是它会要求容器文件以root权限运行。

存储管理

容器的复杂元素之一是存储管理。 默认情况下,容器使用Overlay2(或Overlay)创建文件系统,但是无根容器不能做到这一点,大多数Linux不允许在用户名称空间中安装overlay文件系统。解决方案是使用其他驱动程序,例如VFS存储驱动程序。虽然有效但效率低。更好的解决方案是创建新的存储驱动程序,适应无根容器的需求。

兼容状态

以下容器引擎支持以下组件无根容器:

无根容器内部结构浅析_linux_02

安全分析

从安全角度来看,无根容器中的漏洞还是配置错误都会导致容器中软件受到破坏,应该始终以有限特权运行软件,当漏洞产生时,影响将降至最低。LXE-user-nic具有多个漏洞,攻击者可利用漏洞提权,例如CVE-2017-5985和CVE-2018-6556。Slirp近年来也披露了多个漏洞。

Slirp – CVE-2020-1983:

在对该软件进行模糊测试时,发现了一个可能导致Slirp崩溃的漏洞。该漏洞分配编号为CVE-2020-1983。

这个问题与Slirp如何管理IP碎片有关。 IP数据包的最大大小为65,535字节,错误是Slirp无法验证分段IP数据包的大小,当它对大于65,535的数据包进行分段时就会会崩溃。

libslirp中的其他漏洞可在容器上执行代码,甚至可从容器逃逸到主机以及其他容器。2020年发现了两个此类漏洞:CVE-2020-8608和CVE-2020-7039,受影响的Slirp版本是4.0.0至4.2.0。

总结

无根容器提供了一种新的容器解决方案,该方法增加了安全层。 它会成为云容器中的下一个演变方向。虽然无根容器仍然存在许多局限性,其功能仍处于试验开发中,随着时间和技术的发展,无根容器可以完全发挥作用并代替传统容器。

标签:容器,Slirp,用户,漏洞,内部结构,CVE,root,浅析
From: https://blog.51cto.com/u_12148962/6251887

相关文章

  • 同步容器与并发容器
    1.同步容器1.1什么是同步容器同步容器是指那些在容器内部已经同步化了,使我们在并发操作使用容器的时候不需要进行手动同步了。1.2同步容器的分类同步容器可以分为两大类:普通类和内部类普通类主要是Vector、Stack、HashTable普通类其实现的方式是通过在方法上添加synchron......
  • 【SSH】SSH框架(三)——Spring IOC和AOP的容器框架
    一、前言      在上一篇博客《【SSH】SSH框架(二)——Struts2框架的简单认识》中小编向大家简单的介绍了SSH框架中的第一个S,也就是Struct2。接下来小编将会向大家分享第二个S——Spring。二、Spring是干什么用的?      其实在小编以前做过的项目中也使用过Spring,那个时候......
  • spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
    关键字:spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)应用场景:很多时候我们想要在某个类加载完毕时干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联),所以当我们去使用这个类做事情时发现包空指针错误,这是因为我们......
  • Java 内存分配全面浅析
    本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java。这类文章网上有很多,但大多比较零碎。本文从认知过程角度出发,将带给读者一个系统的介绍。进入正题前首先要知道的是Java程序运行在JVM(JavaVirtualMachine,Java虚拟机)上,可以把JVM理解成Java程序和操作系......
  • python基础学习-容器
    """容器的通用功能:len(容器)统计容器元素个数max(容器)统计最大元素min(容器)统计最小元素类型转换list(容器)给定容器转换为liststr(容器)给定容器转换为strtuple(容器)给定容器转换为tupleset(容器)给定容器转换set通用排序:sorted(容器,[reverse=True])......
  • JAVA中的两个容器StringBuilder和StringJoiner概述
    JAVA中的两个容器StringBuilder和StringJoiner概述StringBuilder可以看成一个容器,创建之后里面的内容是可以修改的方法名说明publicStringBuilderappend(任意类型)添加数据,并返回对象本身publicStringBuilderreverse()反转容器中的内容publicintlength()返......
  • C++容器(vector、deque、list、map)
    (1)vector:将元素置于一个动态数组中,可以随机存储元素(也就是用索引直接存取)。数组尾部添加或删除元素非常迅速。但在中部或头部就比较费时。*代码演示:*取:at在下标越界时会抛出异常,我们能捕获异常进行处理;而[]下标越界会让程序直接终止;构造函数:cbegin,cend,crbegin,cren......
  • C++ STL容器总结
    https://www.zhihu.com/question/270017615/answer/2951304955作者:linux链接:https://www.zhihu.com/question/270017615/answer/2951304955来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1什么是STL?STL(StandardTemplateLibrary),即标准模板库......
  • Docker(容器)理论总结
    一.什么是Dockerhttps://www.docker.com/Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口2.Docker解决依......
  • 关联容器1
    #include<set>#include<iterator>#include<utility>#include<iostream>usingnamespacestd;intmain(){ set<double>s; while(true){ doublev; cin>>v; if(v==0)break; autor=s.insert(v); if(!r.second) cout<<v<<......