首页 > 系统相关 >【容器安全系列Ⅵ】- Linux seccomp隔离

【容器安全系列Ⅵ】- Linux seccomp隔离

时间:2024-09-07 11:51:44浏览次数:14  
标签:容器 调用 系统 Linux 过滤器 seccomp Docker

图片

       在本系列中,我们介绍了各种安全层,这些安全层不仅可以将容器与主机上的其他进程隔离开来,还可以将容器与其底层主机隔离开来。在这篇文章中,我们将讨论容器运行时如何将 seccomp 过滤器用作“最后一道防线”。

Syscalls 和 seccomp 概述

       Seccomp 过滤器是一种限制进程可以执行哪些 Linux 系统调用的方法。系统调用本质上是用户空间程序和 Linux 内核之间的接口。每当程序需要访问主机内核提供的服务时(例如,打开文件或创建新进程时),它都会使用系统调用来获取它。

       Linux 提供了大量的系统调用,目前大概有 300 多个系统调用可用。需要注意的是,系统调用因底层硬件架构而异。比如你将在基于 ARM 的系统和 AMD64 系统之间的系统调用表中看到差异。

       Seccomp 过滤器是编写的 Berkeley 数据包过滤器 (BPF) 程序,用于限制进程可以进行的系统调用,从而允许实施非常细粒度的限制。最广泛使用的例子是在容器中,用户通常以 root 身份运行,但需要阻止可能导致容器突破的危险系统调用。

Docker 容器中的 Seccomp 筛选器

       作为 Docker 实施的默认限制集的一部分,seccomp 过滤器将应用于任何新容器。此过滤器可以捕获其他保护层(例如Capability)允许容器中的操作的情况。从历史上看,在一些情况下,Docker 的 seccomp 过滤器会阻止安全漏洞。一个例子是 CVE-2022-0185,它使用 unshare 系统调用来利用漏洞。此系统调用就会被 Docker 的 seccomp 过滤器阻止。

       为了创建这种 seccomp 过滤,Docker 创建了一个调用允许列表,然后阻止了列表中未列出的任何系统调用。这意味着我们可以避免在 Linux 内核中添加新的危险系统调用(即可用于逃逸容器的系统调用)的风险。

       让我们通过展示被阻止的系统调用的实用程序来说明 Docker 的 seccomp 过滤器的效果。在本例中,我们将使用 unshare ,它在主机上创建新的命名空间。

       首先,我们将使用 docker run -it ubuntu:22.04 /bin/bash 命令运行一个标准的 Docker 容器并执行 unshare。由于seccomp 过滤器,这会导致“操作不被允许”。

图片

取消被 seccomp 阻止的共享

       接下来,我们在禁用 seccomp 过滤器的情况下执行 docker run --security-opt seccomp=unconfined -it ubuntu:22.04 /bin/bash 启动一个容器。如果我们再次尝试运行相同的命令,我们可以看到它成功了。

图片

禁用 Docker 的 seccomp 筛选器时允许取消共享

创建自定义 seccomp 筛选器

       尽管 Docker 默认的 seccomp 配置文件提供了良好的隔离策略,但在某些情况下,需要更加个性化的限制。在这些情况下,您将需要一个自定义 seccomp 配置文件。

       对于 Docker,您可以指定 JSON 格式的 seccomp 配置文件。例如,如果您想要一个空白的 seccomp 配置文件来阻止所有系统调用,则它看起来像这样:

{
  "defaultAction": "SCMP_ACT_ERRNO",
  "architectures": [
    "SCMP_ARCH_X86_64",
    "SCMP_ARCH_X86",
    "SCMP_ARCH_X32"
  ],
  "syscalls": [
  ]
}

       defaultAction 代表了当系统调用与策略的任何部分不匹配时将执行的操作。在本例中,其动作为 SCMP_ACT_ERRNO,这意味着将返回错误并拒绝调用。

       当然,这个策略肯定是不可用的,这会影响到容器的正常使用,因为所有容器都需要进行系统调用。一个更实际的例子可能是阻止 Docker 通常允许的某些功能集。例如,您可能希望阻止 io_uring 系统调用集,因为它们在过去几年中涉及大量内核漏洞。

       在这里,最好的方法是从 Docker 的默认 seccomp 策略开始,然后删除相关的系统调用。在本例中,该策略包括三个io_uring相关的系统调用:

"io_uring_enter",
"io_uring_register",
"io_uring_setup",

       我们需要做的就是删除这些条目,将配置文件另存为新文件,并在启动时将其提供给我们的 Docker 容器。

       要提供自定义 seccomp 配置文件,只需将配置文件的名称作为参数传递给 docker run 命令即可。因此,例如,如果您有一个名为 no_io_uring.json 的配置文件,则可以将其应用于新容器,如下所示:

docker run -it --security-opt seccomp=no_io_uring.json ubuntu:22.04 /bin/bash

       生成自定义 seccomp 配置文件的另一个选项是审核应用程序生成的系统调用,然后使用此审核日志创建仅允许这些系统调用的自定义配置文件。像 Inspektor Gadget 这样的工具可以帮助自动化这个过程。

结论

        Seccomp 过滤器为希望阻止对特定系统调用的访问的容器和其他 Linux 进程提供了细粒度的“最后一道防线”。它是 Docker 容器安全性的有用补充,在阻止一些可能允许容器突破的漏洞方面发挥了重要作用。我们还了解了创建自定义 seccomp 过滤器如何有助于在不中断业务的情况下为容器增添另一层安全防护。

       通过本系列文章,我们可以了解,虽然 Docker 容器的安全模型感觉有点像一个封闭的盒子,但它实际上是一系列可以使用的标准 Linux 工具的集合。

标签:容器,调用,系统,Linux,过滤器,seccomp,Docker
From: https://blog.csdn.net/weixin_45581780/article/details/141932126

相关文章

  • Linux系统安装ansiblle环境
    前言:这里是生产环境红帽系统,如果是别的系统,本地源的配置方法不一样。一、主节点服务器Redhat8配置使用阿里源:备份:sudo/etc/yum.repos.d/CentOS-Base.repo/opt/yum/下载新的CentOS-Base.repo到/etc/yum.repos.d/(这里用的CentOS8.0)命令:sudowget-O/etc/yum.repos.d/red......
  • linux中vim实用冷门命令大全
    感谢浪浪云支持发布浪浪云活动链接:https://langlangy.cn/?i8afa52文章目录1.快速保存和退出2.局部替换替换当前行中的文本替换当前行中的所有匹配替换整个文件中的内容确认替换3.高效删除和复制删除命令复制命令粘贴命令4.快速移动行内移动屏幕内移动文件内移......
  • ffmpeg(各个系统版本安装- Windows11-Mac-Linux)
    各个系统上的安装不建议使用编译安装,大佬的话可以编译安装会各种环境问题,直接使用别人安装好的就行1.Windows11上安装ffmpeg1.官网下载ffmpeg进入DownloadFFmpeg网址,点击下载windows版ffmpeg,使用别人编译好的版本即可在releasebuilds里面选择一个版本(使用release......
  • linux mysql忘记root密码了
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在使用Linux系统和MySQL数据库时,有时候会遇到一个比较棘手的问题,那就是忘记了root密码。当忘记了root密码后,用户就无法再进行数据库操作,这对于系统和数据的安全造成了一定的影响。但是,不必担心,因为有一些方法可以帮助你重置MySQL......
  • linux之shell
    Shell编程shell简介shell的作用1.解释执行用户输入的程序或者指令2.用户输入一条指令,shell解释一条3.键盘输入指令,Linux给与响应-----这个过程称之为交互式响应流程shell是一块包裹着系统核心的壳,处于操作系统的最外层,与用户直接对话,shell可以把用户的输入,解释......
  • 【第99课】云原生篇&K8s安全&实战场景&攻击Pod&污点Taint&横向移动&容器逃逸
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第97课】云上攻防-云原生篇&Kubernetes&K8s安全&API&Kubelet未授权访问&容器执行
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • 【第96课】云原生篇&Docker安全&系统内核&版本漏洞&CDK自动利用&容器逃逸
    免责声明本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。文中所涉......
  • Linux 性能优化(网络、磁盘、内存、日志监控)
    1、CPU性能监控1.2、平均负载基础平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数。查看cpu个数:grep'modelnam......
  • mysql在linux安装
    在Linux上安装MySQL5.7版本的步骤可以分为多个部分,包括下载、安装、配置以及启动MySQL服务。以下是一个详细的步骤指南:一、下载MySQL5.7安装包访问MySQL官方网站:前往MySQL官方网站下载适用于Linux的MySQL5.7安装包。通常,你会找到如mysql-5.7.xx-linux-glibc2.xx-x86_64.tar.......