07-Docker 安全:基于内核的弱隔离系统如何保障安全性?

这篇具有很好参考价值的文章主要介绍了07-Docker 安全:基于内核的弱隔离系统如何保障安全性?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在讨论容器的安全性之前,我们先了解下容器与虚拟机的区别,这样可以帮助我们更好地了解容器的安全隐患以及如何加固容器安全。

Docker 与虚拟机区别

Docker 是基于 Linux 内核的 Namespace 技术实现资源隔离的,所有的容器都共享主机的内核。其实这与以虚拟机为代表的云计算时代还是有很多区别的,比如虚拟机有着更好的隔离性和安全性,而容器的隔离性和安全性则相对较弱。

07-Docker 安全:基于内核的弱隔离系统如何保障安全性?,docker,docker,安全,容器,运维,linux

从图 1 可以看出,虚拟机是通过管理系统(Hypervisor)模拟出 CPU、内存、网络等硬件,然后在这些模拟的硬件上创建客户内核和操作系统。这样做的好处就是虚拟机有自己的内核和操作系统,并且硬件都是通过虚拟机管理系统模拟出来的,用户程序无法直接使用到主机的操作系统和硬件资源,因此虚拟机也对隔离性和安全性有着更好的保证。

而 Docker 容器则是通过 Linux 内核的 Namespace 技术实现了文件系统、进程、设备以及网络的隔离,然后再通过 Cgroups 对 CPU、 内存等资源进行限制,最终实现了容器之间相互不受影响,由于容器的隔离性仅仅依靠内核来提供,因此容器的隔离性也远弱于虚拟机。

你可能会问,既然虚拟机安全性这么好,为什么我们还要用容器呢?这是因为容器与虚拟机相比,容器的性能损耗非常小,并且镜像也非常小,而且在业务快速开发和迭代的今天,容器秒级的启动等特性也非常匹配业务快速迭代的业务场景。

既然我们要利用容器的优点,那有没有什么办法可以尽量弥补容器弱隔离的安全性缺点呢?要了解如何解决容器的安全问题,我们首先需要了解下容器目前存在的安全问题。

Docker 容器的安全问题

(1) Docker 自身安全

Docker 作为一款容器引擎,本身也会存在一些安全漏洞,CVE 目前已经记录了多项与 Docker 相关的安全漏洞,主要有权限提升、信息泄露等几类安全问题。具体 Docker 官方记录的安全问题可以参考这里。

CVE 的维基百科定义:CVE 是公共漏洞和暴露(英语:CVE, Common Vulnerabilities and Exposures)又称常见漏洞与披露,是一个与信息安全有关的数据库,收集各种信息安全弱点及漏洞并给予编号以便于公众查阅。此数据库现由美国非营利组织 MITRE 所属的 National Cybersecurity FFRDC 所营运维护 。

(2) 镜像安全

由于 Docker 容器是基于镜像创建并启动,因此镜像的安全直接影响到容器的安全。具体影响镜像安全的总结如下。

  • 镜像软件存在安全漏洞:由于容器需要安装基础的软件包,如果软件包存在漏洞,则可能会被不法分子利用并且侵入容器,影响其他容器或主机安全。

  • 仓库漏洞:无论是 Docker 官方的镜像仓库还是我们私有的镜像仓库,都有可能被攻击,然后篡改镜像,当我们使用镜像时,就可能成为攻击者的目标对象。

  • 用户程序漏洞:用户自己构建的软件包可能存在漏洞或者被植入恶意脚本,这样会导致运行时提权影响其他容器或主机安全。

(3) Linux 内核隔离性不够

尽管目前 Namespace 已经提供了非常多的资源隔离类型,但是仍有部分关键内容没有被完全隔离,其中包括一些系统的关键性目录(如 /sys、/proc 等),这些关键性的目录可能会泄露主机上一些关键性的信息,让攻击者利用这些信息对整个主机甚至云计算中心发起攻击。

而且仅仅依靠 Namespace 的隔离是远远不够的,因为一旦内核的 Namespace 被突破,使用者就有可能直接提权获取到主机的超级权限,从而影响主机安全。

(4) 所有容器共享主机内核

由于同一宿主机上所有容器共享主机内核,所以攻击者可以利用一些特殊手段导致内核崩溃,进而导致主机宕机影响主机上其他服务。

既然容器有这么多安全上的问题,那么我们应该如何做才能够既享受到容器的便利性同时也可以保障容器安全呢?下面我带你来逐步了解下如何解决容器的安全问题。

如何解决容器的安全问题?

(1) Docker 自身安全性改进

事实上,Docker 从 2013 年诞生到现在,在安全性上面已经做了非常多的努力。目前 Docker 在默认配置和默认行为下是足够安全的。

Docker 自身是基于 Linux 的多种 Namespace 实现的,其中有一个很重要的 Namespace 叫作 User Namespace,User Namespace 主要是用来做容器内用户和主机的用户隔离的。在过去容器里的 root 用户就是主机上的 root 用户,如果容器受到攻击,或者容器本身含有恶意程序,在容器内就可以直接获取到主机 root 权限。Docker 从 1.10 版本开始,使用 User Namespace 做用户隔离,实现了容器中的 root 用户映射到主机上的非 root 用户,从而大大减轻了容器被突破的风险。

因此,我们尽可能地使用 Docker 最新版本就可以得到更好的安全保障。

(2) 保障镜像安全

为保障镜像安全,我们可以在私有镜像仓库安装镜像安全扫描组件,对上传的镜像进行检查,通过与 CVE 数据库对比,一旦发现有漏洞的镜像及时通知用户或阻止非安全镜像继续构建和分发。同时为了确保我们使用的镜像足够安全,在拉取镜像时,要确保只从受信任的镜像仓库拉取,并且与镜像仓库通信一定要使用 HTTPS 协议。

(3) 加强内核安全和管理

由于仅仅依赖内核的隔离可能会引发安全问题,因此我们对于内核的安全应该更加重视。可以从以下几个方面进行加强。

宿主机及时升级内核漏洞

宿主机内核应该尽量安装最新补丁,因为更新的内核补丁往往有着更好的安全性和稳定性。

使用 Capabilities 划分权限

Capabilities 是 Linux 内核的概念,Linux 将系统权限分为了多个 Capabilities,它们都可以单独地开启或关闭,Capabilities 实现了系统更细粒度的访问控制。

容器和虚拟机在权限控制上还是有一些区别的,在虚拟机内我们可以赋予用户所有的权限,例如设置 cron 定时任务、操作内核模块、配置网络等权限。而容器则需要针对每一项 Capabilities 更细粒度的去控制权限,例如:

  • cron 定时任务可以在容器内运行,设置定时任务的权限也仅限于容器内部;

  • 由于容器是共享主机内核的,因此在容器内部一般不允许直接操作主机内核;

  • 容器的网络管理在容器外部,这就意味着一般情况下,我们在容器内部是不需要执行ifconfigroute等命令的 。

由于容器可以按照需求逐项添加 Capabilities 权限,因此在大多数情况下,容器并不需要主机的 root 权限,Docker 默认情况下也是不开启额外特权的。

最后,在执行docker run命令启动容器时,如非特殊可控情况,--privileged 参数不允许设置为 true,其他特殊权限可以使用 --cap-add 参数,根据使用场景适当添加相应的权限。

使用安全加固组件

Linux 的 SELinux、AppArmor、GRSecurity 组件都是 Docker 官方推荐的安全加固组件。下面我对这三个组件做简单介绍。

  • SELinux (Secure Enhanced Linux): 是 Linux 的一个内核安全模块,提供了安全访问的策略机制,通过设置 SELinux 策略可以实现某些进程允许访问某些文件。

  • AppArmor: 类似于 SELinux,也是一个 Linux 的内核安全模块,普通的访问控制仅能控制到用户的访问权限,而 AppArmor 可以控制到用户程序的访问权限。

  • GRSecurity: 是一个对内核的安全扩展,可通过智能访问控制,提供内存破坏防御,文件系统增强等多种防御形式。

这三个组件可以限制一个容器对主机的内核或其他资源的访问控制。目前,容器报告的一些安全漏洞中,很多都是通过对内核进行加强访问和隔离来实现的。

资源限制

在生产环境中,建议每个容器都添加相应的资源限制。下面给出一些执行docker run命令启动容器时可以传递的资源限制参数:

  --cpus                          限制 CPU 配额
  -m, --memory                    限制内存配额
  --pids-limit                    限制容器的 PID 个数

例如我想要启动一个 1 核 2G 的容器,并且限制在容器内最多只能创建 1000 个 PID,启动命令如下:

$ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh

推荐在生产环境中限制 CPU、内存、PID 等资源,这样即便应用程序有漏洞,也不会导致主机的资源完全耗尽,最大限度降低安全风险。

(4) 使用安全容器

容器有着轻便快速启动的优点,虚拟机有着安全隔离的优点,有没有一种技术可以兼顾两者的优点,做到既轻量又安全呢?

答案是有,那就是安全容器。安全容器是相较于普通容器的,安全容器与普通容器的主要区别在于,安全容器中的每个容器都运行在一个单独的微型虚拟机中,拥有独立的操作系统和内核,并且有虚拟化层的安全隔离。

安全容器目前推荐的技术方案是 Kata Containers,Kata Container 并不包含一个完整的操作系统,只有一个精简版的 Guest Kernel 运行着容器本身的应用,并且通过减少不必要的内存,尽量共享可以共享的内存来进一步减少内存的开销。另外,Kata Container 实现了 OCI 规范,可以直接使用 Docker 的镜像启动 Kata 容器,具有开销更小、秒级启动、安全隔离等许多优点。

结语

容器技术带来的技术革新是空前的,但是随之而来的容器安全问题也是我们必须要足够重视的。本课时解决 Docker 安全问题的精华我帮你总结如下:

07-Docker 安全:基于内核的弱隔离系统如何保障安全性?,docker,docker,安全,容器,运维,linux

到此,相信你已经了解了 Docker 与虚拟机的本质区别,也知道了容器目前存在的一些安全隐患以及如何在生产环境中尽量避免这些安全隐患。文章来源地址https://www.toymoban.com/news/detail-798677.html


到了这里,关于07-Docker 安全:基于内核的弱隔离系统如何保障安全性?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用overlayfs实现文件系统的安全隔离

    OverlayFS,一种堆叠文件系统,不直接参与磁盘空间结构的划分,是建立在其它的文件系统之上,其作用就像一个文件集合,可以将不同目录和文件合并到一个指定的目录上; mount -t overlay -o options overlay mount point mount point是最终overlay的挂载点mergeddir; overlay的options有如下:  

    2024年04月13日
    浏览(24)
  • 基于硬件隔离增强risc-v调试安全1_问题描述

    安全之安全(security²)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。   /

    2024年02月10日
    浏览(41)
  • 如何在多租户环境中实现高度的隔离与安全

    在当今的互联网时代,多租户系统已经成为企业和组织中不可或缺的技术基础设施。多租户系统可以让多个租户共享同一个系统,从而降低成本,提高资源利用率。然而,在多租户环境中,如何实现高度的隔离与安全成为了一个重要的技术挑战。 在这篇文章中,我们将从以下

    2024年02月22日
    浏览(37)
  • 黑客可利用 Windows 容器隔离框架绕过端点安全系统

    新的研究结果表明,攻击者可以利用一种隐匿的恶意软件检测规避技术,并通过操纵 Windows 容器隔离框架来绕过端点安全的解决方案。 Deep Instinct安全研究员丹尼尔-阿维诺姆(Daniel Avinoam)在本月初举行的DEF CON安全大会上公布了这一发现。 Microsoft的容器体系结构(以及扩展的

    2024年02月09日
    浏览(42)
  • linux 隔离内核

    1、 编辑grub 2、修改 or 3、update 4、查看更改 最终还是要重启系统。

    2024年02月14日
    浏览(35)
  • 【web安全】弱口令,以及不同领域的弱口令爆破

    简单的理解就是简单的,容易让别人猜出来的密码。 弱口令分了三类 简单常用的易记密码 这种密码是人均常用的密码,比如活到了这么大,我见过很多很多的wifl密码是88888888或者12345678这种的密码。很多情况下数据库教你改密码的教程都是拿123456做例子,照着做完步骤后也

    2024年01月18日
    浏览(44)
  • 基于变形模板的弱监督体图像分割

    背景 有许多方法可以对网络进行弱监督训练来分割2D图像。依赖于对3D图像的2D切片的子集的完全监督 本文方法 提出了一种真正弱监督的体积分割方法,因为我们只需要在目标对象的表面上提供一组稀疏的3D点,而不是详细的2D掩模 使用3D点来变形3D模板,使其大致匹配目标对

    2024年02月07日
    浏览(39)
  • 解决华为手机驱动与Win11的内核隔离冲突问题

    将华为手机通过USB数据线连接电脑时,会安装相应的驱动,这部分驱动会引起Win11提示内存隔离冲突,可能会影响系统更新或一些软件更新安装。 通过Win11系统自带的 pnputil 工具写在相应的区间,指令范例: 1、通过 win+R 运行cmd 2、以管理员身份运行命令提示符 执行下述指令

    2024年04月26日
    浏览(56)
  • Linux内核的两种安全策略:基于inode的安全与基于文件路径的安全

    在Linux中,一切皆为文件,实现系统安全的策略主要可分为两种:基于 inode 的安全、基于文件路径的安全。 基于inode的安全 为文件引入安全属性,安全属性不属于文件内容,它是文件的元数据,应该与 inode 关联,一些内核安全模块将安全属性存储在文件的扩展属性中,这种

    2024年02月12日
    浏览(45)
  • Linux Cgroups进程资源限制管理 之 资源子系统限制/控制、Docker资源隔离与限制原理解读

    Linux cgroups(控制组)最初由Google工程师Paul Menage在2006年提出,并在Linux内核的2.6.24版本中首次引入。自那时以来,cgroups一直是Linux内核的一部分,并在容器化技术等领域中发挥着至关重要的作用。随着时间的推移,cgroups功能不断得到改进和扩展,以满足对资源管理和隔离性能

    2024年02月21日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包