云安全学习篇–docker
本文最后更新于 59 天前,其中的信息可能已经过时,如有 错误/失效 请发送邮件到xiaoc1737938763@gmail.com或留言。

docker逃逸是个老话题,之前没有系统学习,学得都比较杂,这次整理一下笔记

逃逸不过三种方法,但是需要注意的是,除了linux内核逃逸,其他都需要root权限

  • 特权模式
  • 危险挂载
  • docker自身组件漏洞或linux内核漏洞

特权模式

Linux Capabilities介绍

Linux 是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的 root 用户,只给普通用户保留有限的权限。root 用户拥有超级管理员权限,可以安装软件、允许某些服务、管理用户等。

作为普通用户,如果想执行某些只有管理员才有权限的操作,以前只有两种办法:一是通过 sudo 提升权限,如果用户很多,配置管理和权限控制会很麻烦;二是通过 SUID(Set User ID on execution)来实现,它可以让普通用户允许一个 owner 为 root 的可执行文件时具有 root 的权限。

SUID 的概念比较晦涩难懂,举个例子就明白了,以常用的 passwd 命令为例,修改用户密码是需要 root 权限的,但普通用户却可以通过这个命令来修改密码,这就是因为 /bin/passwd 被设置了 SUID 标识,所以普通用户执行 passwd 命令时,进程的 owner 就是 passwd 的所有者,也就是 root 用户。

SUID 虽然可以解决问题,但却带来了安全隐患。当运行设置了 SUID 的命令时,通常只是需要很小一部分的特权,但是 SUID 给了它 root 具有的全部权限。这些可执行文件是黑客的主要目标,如果他们发现了其中的漏洞,就很容易利用它来进行安全攻击。简而言之,SUID 机制增大了系统的安全攻击面。

为了对 root 权限进行更细粒度的控制,实现按需授权,Linux 引入了另一种机制叫 capabilities

Linux capabilities 是什么?


Capabilities 机制是在 Linux 内核 2.2 之后引入的,原理很简单,就是将之前与超级用户 root(UID=0)关联的特权细分为不同的功能组,Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。

这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 capabilities,并以此为依据,决定是否可以执行特权操作。

Capabilities 可以在进程执行时赋予,也可以直接从父进程继承。所以理论上如果给 nginx 可执行文件赋予了 CAP_NET_BIND_SERVICE capabilities,那么它就能以普通用户运行并监听在 80 端口上。

capability 名称描述
CAP_AUDIT_CONTROL启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则
CAP_AUDIT_READ允许通过 multicast netlink 套接字读取审计日志
CAP_AUDIT_WRITE将记录写入内核审计日志
CAP_BLOCK_SUSPEND使用可以阻止系统挂起的特性
CAP_CHOWN修改文件所有者的权限
CAP_DAC_OVERRIDE忽略文件的 DAC 访问限制
CAP_DAC_READ_SEARCH忽略文件读及目录搜索的 DAC 访问限制
CAP_FOWNER忽略文件属主 ID 必须和进程用户 ID 相匹配的限制
CAP_FSETID允许设置文件的 setuid 位
CAP_IPC_LOCK允许锁定共享内存片段
CAP_IPC_OWNER忽略 IPC 所有权检查
CAP_KILL允许对不属于自己的进程发送信号
CAP_LEASE允许修改文件锁的 FL_LEASE 标志
CAP_LINUX_IMMUTABLE允许修改文件的 IMMUTABLE 和 APPEND 属性标志
CAP_MAC_ADMIN允许 MAC 配置或状态更改
CAP_MAC_OVERRIDE忽略文件的 DAC 访问限制
CAP_MKNOD允许使用 mknod() 系统调用
CAP_NET_ADMIN允许执行网络管理任务
CAP_NET_BIND_SERVICE允许绑定到小于 1024 的端口
CAP_NET_BROADCAST允许网络广播和多播访问
CAP_NET_RAW允许使用原始套接字
CAP_SETGID允许改变进程的 GID
CAP_SETFCAP允许为文件设置任意的 capabilities
CAP_SETPCAP参考 capabilities man page
CAP_SETUID允许改变进程的 UID
CAP_SYS_ADMIN允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
CAP_SYS_BOOT允许重新启动系统
CAP_SYS_CHROOT允许使用 chroot() 系统调用
CAP_SYS_MODULE允许插入和删除内核模块
CAP_SYS_NICE允许提升优先级及设置其他进程的优先级
CAP_SYS_PACCT允许执行进程的 BSD 式审计
CAP_SYS_PTRACE允许跟踪任何进程
CAP_SYS_RAWIO允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备
CAP_SYS_RESOURCE忽略资源限制
CAP_SYS_TIME允许改变系统时钟
CAP_SYS_TTY_CONFIG允许配置 TTY 设备
CAP_SYSLOG允许使用 syslog() 系统调用
CAP_WAKE_ALARM允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器)

Privileged 特权模式

首先来讲一下特权模式

docker run --rm -it --privileged=true ubuntu:18.04

判断是否为特权模式

在容器内部执行下面的命令,从而判断容器是不是特权模式,如果是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff

cat /proc/self/status | grep CapEff

特权模式下逃逸很简单,直接挂载宿主机根目录,添加任务计划或公钥即可

执行fdisk -l

Device       Start       End   Sectors  Size Type
/dev/sda1     2048     4095     2048   1M BIOS boot
/dev/sda2     4096   1054719   1050624 513M EFI System
/dev/sda3 1054720 125827071 124772352 59.5G Linux filesystem

然后挂载宿主机根目录到任意目录下

mkdir /test && mount /dev/sda3 /test

此时添加任务计划或写入公钥就可以获取宿主机shell了

SYS_PTRACE权限

https://blog.csdn.net/CQ17743254852/article/details/133853670?spm=1001.2014.3001.5502

SYS_ADMIN权限

https://blog.csdn.net/CQ17743254852/article/details/133824649?spm=1001.2014.3001.5502

危险挂载

Docker Socket挂载

Docker Socket挂载是将docker socket api挂载进容器内,因此容器内可以操作宿主机的docker socket api,所以我们可以新建一个容器,将宿主机的根目录挂载进新的容器内

docker run -itd --name test -v /var/run/docker.sock:/var/run/docker.sock ubuntu:18.04

判断是否存在docker socket

root@410264c5488a:/# ls -lah /var/run/docker.sock
srw-rw---- 1 root 138 0 Jun 16  2024 /var/run/docker.sock
root@410264c5488a:/# find / -name docker.sock
/run/docker.sock

容器内安装docker,新建一个容器,将宿主机的根目录挂载进新的容器内,然后chroot到宿主机目录即可

procfs文件挂载

https://blog.csdn.net/CQ17743254852/article/details/133847625?spm=1001.2014.3001.5502

docker自身组件漏洞或linux内核漏洞

CVE-2019-5736

https://blog.csdn.net/CQ17743254852/article/details/133857208?spm=1001.2014.3001.5502

CVE-2020-15257

https://blog.csdn.net/CQ17743254852/article/details/133799809?spm=1001.2014.3001.5502

参考文章:

https://wiki.teamssix.com/CloudService

评论

  1. test
    Windows Chrome 137.0.0.0
    中国 联通
    4 天前
    2025-6-27 13:49:52

    aaatest

  2. aa
    Linux Firefox 128.0
    中国 联通
    4 天前
    2025-6-27 13:56:14

    aaatest

  3. testuser
    Linux Firefox 128.0
    中国 联通
    4 天前
    2025-6-27 14:21:45

    testaaa

  4. 1+1
    Windows Chrome 116.0.5845.97
    四川省凉山彝族自治州 移动
    4 天前
    2025-6-27 14:23:04

    测试

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇