【云安全专题-7】Docker与K8s架构安全

admin 2026-01-17 01:28:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章从攻击者视角剖析Docker与K8s架构安全,指出容器共享宿主机内核导致Namespace逃逸、CgroupsDoS、UnionFS镜像投毒三大风险,并给出Dockerdaemon、socket、registry及K8sAPIServer、etcd、Kubelet未授权等关键攻击面,附实战命令速查与云原生CI/CD投毒、供应链、监控组件横向移动完整攻防路径,强调动态IP与快速CI/CD让传统边界防护失效。 综合评分: 92 文章分类: 云安全,容器安全,红队,漏洞分析,内网渗透


cover_image

【云安全专题-7】Docker 与 K8s 架构安全

原创

Ca1m Ca1m

FunnyHacking

2026年1月16日 13:47 上海

🚀 前言

在前面的章节中,我们攻克了 EC2(计算)、S3(存储)和 RDS(数据)。现在,我们要进入一个全新的、更复杂的维度——云原生(Cloud Native)

随着“微服务”和“DevOps”的普及,传统的虚拟机(VM)因为启动慢、资源重,逐渐被**容器(Container)**取代。而当容器数量达到成千上万时,就需要一个“指挥官”来管理,这就是 Kubernetes (K8s)

对于安全人员来说,战场变了:

  • • 边界模糊:IP 地址是动态变化的,传统的防火墙策略失效。
  • • 攻击面下沉:从操作系统层下沉到了容器引擎和编排层。
  • • 速度加快:CI/CD 流水线让代码从提交到上线只需几分钟,恶意代码也能随之快速扩散。

本章作为云原生篇的起点,我们将剥开 Docker 和 K8s 的外衣,看清其内部骨架。


一、 容器引擎:Docker 的本质

很多人把 Docker 比作轻量级的虚拟机,这在功能上没错,但在安全原理上是大错特错的。

1. 核心技术:进程级的“障眼法”

虚拟机拥有独立的操作系统内核,而容器是共享宿主机内核的。Docker 利用了 Linux 内核的三大特性,制造了一个“隔离”的幻觉:

  • • Namespaces (命名空间) —— 隔离视野

  • • 作用:让进程“看不见”其他进程。

  • • PID Namespace:容器内的进程以为自己是 PID 1(上帝进程),实际上在宿主机上它只是个普通进程。

  • • Mount Namespace:让容器拥有独立的文件系统视图。

  • • 安全视角:**容器逃逸(Container Escape)**的核心逻辑,往往就是打破了 Namespace 的隔离,让进程“看”到了宿主机。

  • • Cgroups (控制组) —— 限制资源

  • • 作用:限制进程能用多少 CPU、内存。

  • • 安全视角:如果未做限制,恶意容器可以耗尽宿主机资源,造成 DoS(拒绝服务)

  • • UnionFS (联合文件系统) —— 镜像分层

  • • 作用:Docker 镜像是一层层叠加的(Layer)。

  • • 安全视角镜像投毒。黑客可以在基础镜像中植入后门,上层应用无论怎么构建,都自带后门。

2. Docker 架构中的攻击面

  • • Docker Daemon (dockerd):守护进程,通常以 Root 权限运行。

  • • 危险:如果你能控制 Docker Daemon,你就等于拥有了宿主机的 Root 权限。

  • • Docker Socket (/var/run/docker.sock)

  • • 危险:这是 Docker 客户端与 Daemon 通信的管道。如果攻击者挂载了这个 Socket 到容器内部,他就可以在容器里指挥宿主机创建新容器、挂载宿主机根目录,实现秒级逃逸

  • • Docker Registry:镜像仓库(如 Harbor)。

  • • 危险:仓库未授权访问,导致私有镜像泄露或被篡改。


3. Docker 常用命令速查 (Cheat Sheet)

在云安全实战中,我们经常需要快速搭建靶场、分析恶意镜像或从受损容器中提取证据。以下是精简后的核心命令集。

🛠️ 1. 环境安装与国内源配置

  • • 一键安装
  curl -fsSL https://get.docker.com | sh
  • • 配置国内加速器 (关键): 由于网络原因,国内直接拉取 Docker Hub 经常超时。建议配置加速器(如阿里云、网易、腾讯云等)。编辑文件:vi /etc/docker/daemon.json
  {
    "registry-mirrors": [
      "https://docker.mirrors.ustc.edu.cn",
      "https://hub-mirror.c.163.com"
    ]
  }

配置完成后重启服务: systemctl restart docker

📦 2. 镜像管理 (Images)

  • • 搜索与拉取
  docker search centos      # 搜索
  docker pull centos:7      # 拉取指定版本
  • • 查看镜像历史 (安全审计)
  docker&nbsp;history&nbsp;<image_id> --no-trunc
  • • 红队技巧:查看每一层构建命令,常用于发现开发者泄露的密码或恶意镜像的后门指令。

  • • 清理虚悬镜像

  docker image prune

🏃 3. 容器生命周期 (Containers)

  • • 启动容器 (常用参数)
  # -d: 后台运行
  # -p: 端口映射 (宿主机端口:容器端口)
  # --name: 指定名称
  docker run -d --name web_server -p 8080:80 nginx
  • • 查看容器
  docker ps &nbsp; &nbsp; &nbsp;# 查看运行中
  docker ps -a &nbsp;&nbsp;# 查看所有 (含已退出)
  • • 停止与删除
  docker stop <container_id> &nbsp; &nbsp; &nbsp;&nbsp;# 停止
  docker&nbsp;rm&nbsp;-f <container_id> &nbsp; &nbsp; &nbsp;# 强制删除
  docker&nbsp;rm&nbsp;-f $(docker ps -aq) &nbsp; &nbsp;# 💣 暴力删除所有容器

🕵️ 4. 交互与文件传输 (实战重点)

  • • 进入容器 (Get Shell)
  docker&nbsp;exec&nbsp;-it <container_id> /bin/bash
  # 如果没有 bash,尝试 sh
  docker&nbsp;exec&nbsp;-it <container_id> sh
  • • 注意:推荐使用 exec,exit 后容器不会停止。

  • • 文件传输 (docker cp): 这是红队最常用的命令,用于上传利用工具或下载敏感文件取证。

  # 📥 从容器下载文件到本地 (取证)
  docker&nbsp;cp&nbsp;<container_id>:/var/www/html/config.php ./evidence/

  # 📤 从本地上传文件到容器 (上传 fscan/webshell)
  docker&nbsp;cp&nbsp;./fscan <container_id>:/tmp/fscan

💾 5. 镜像迁移 (Save vs Export)

很多内网环境不通公网,需要手动导入导出镜像。注意两者的区别:

  • • Save / Load (针对镜像 Image)
  docker save -o image.tar <image_name>
  docker load -i image.tar
  • • 特点:保存完整的镜像层级信息,支持回滚,体积稍大。

  • • 场景:完整的环境迁移。

  • • Export / Import (针对容器 Container)

  docker&nbsp;export&nbsp;-o container.tar <container_id>
  docker import container.tar <new_image_name>
  • • 特点:仅保存容器当下的快照,丢失历史层级,体积较小。
  • • 场景:制作基础发行版。

🔍 6. 信息收集 (Inspect)

  • • 查看容器详情
  docker inspect <container_id>
  • • 重点关注:Mounts (挂载点,是否挂载了宿主机敏感目录)、Env (环境变量,是否泄露 AK/SK)。

二、 容器编排:Kubernetes (K8s) 的帝国

如果说 Docker 是单独的乐手,K8s 就是交响乐团的指挥家。K8s 的架构非常庞大,我们只关注红队眼中的核心组件

K8s 是典型的 Master-Node(控制节点-工作节点)架构。

1. Control Plane (Master 节点) —— 大脑

这是攻击者梦寐以求的目标,拿下了 Master 就拿下了整个集群。

  • • API Server (kube-apiserver) —— 唯一的入口

  • • 功能:所有组件(包括用户命令 kubectl)都要通过 HTTP REST API 跟它交互。

  • • 端口:默认 6443。

  • • 安全视角API Server 未授权访问是 K8s 里的“S3 桶配置错误”。如果配置不当,攻击者可以直接通过 API 创建恶意 Pod。

  • • etcd —— 记忆库

  • • 功能:存储集群所有状态的数据库(Key-Value)。

  • • 端口:默认 2379。

  • • 安全视角:etcd 里存着集群的所有秘密 (Secrets),包括账号密码、证书、Token。拿下 etcd = 拿下集群

  • • Controller Manager & Scheduler:负责决策和调度,相对攻击面较小。

2. Node (Worker 节点) —— 苦力

这是业务代码运行的地方,也是攻击者渗透的第一站。

  • • Kubelet —— 节点管家

  • • 功能:负责管理该节点上的 Pod,向 API Server 汇报状态。

  • • 端口:默认 10250。

  • • 安全视角Kubelet 未授权访问。如果 10250 端口暴露,攻击者可以直接命令该节点运行恶意容器。

  • • Kube-proxy:负责网络转发。

  • • Container Runtime:真正运行容器的软件(Docker 或 Containerd)。

3. K8s 里的核心概念 (黑话扫盲)

  • • Pod:K8s 的最小调度单元。一个 Pod 里可以有一个或多个容器(Container)。
  • • Service:定义一组 Pod 的访问策略(解决 IP 变动问题)。
  • • Namespace (K8s 命名空间):不要和 Linux Namespace 搞混。这是 K8s 的逻辑隔离,用来区分“开发环境”、“生产环境”。
  • • Secret / ConfigMap:用来存配置和密码。

三、 云原生生态圈:常见的“猪队友”

K8s 很少独立存在,通常伴随着一套庞大的生态系统。这些组件往往也是攻击入口。

1. CI/CD 流水线 (Jenkins / GitLab CI)

  • • 地位:DevOps 的心脏。
  • • 攻击点流水线投毒 (Pipeline Poisoning)。攻击者修改 .gitlab-ci.yml 或 Jenkinsfile,在构建阶段植入挖矿木马或窃取云凭证。

2. 镜像仓库 (Harbor / Docker Hub)

  • • 地位:软件供应链的源头。
  • • 攻击点:弱口令、镜像包含漏洞(CVE)、恶意镜像上传。

3. 服务网格 (Istio / Linkerd)

  • • 地位:解决微服务间的通信和监控。
  • • 攻击点:Istio 的 Sidecar 代理配置错误可能导致鉴权绕过。

4. 监控系统 (Prometheus / Grafana)

  • • 地位:集群的眼睛。
  • • 攻击点:Grafana 弱口令或未授权访问。通过监控数据可以获取大量内网拓扑和敏感信息。

四、 云原生安全视角:从上帝视角看攻击链

结合 [HackTricks CI/CD 矩阵] 和实战经验,云原生的攻击路径通常如下:

  1. 1. 初始访问
  • • Web 应用漏洞(RCE/SQLi)拿到 Pod 的 Shell。
  • • K8s API Server 或 Kubelet 端口公网暴露。
  • • GitLab/Jenkins 弱口令。
  1. 2. 执行与持久化
  • • 在容器内运行挖矿脚本。
  • • 创建恶意的 DaemonSet(让恶意 Pod 在每个节点上都运行)。
  1. 3. 权限提升与逃逸
  • • Docker 逃逸:利用特权模式(Privileged)、挂载 Docker Socket 或内核漏洞,从容器跳到宿主机 Node。
  1. 4. 横向移动
  • • 利用 Service Account (SA) 的 Token 访问 API Server。
  • • 通过内网网络攻击其他 Pod。
  1. 5. 目标达成
  • • 窃取 etcd 中的 Secrets。
  • • 控制整个集群资源进行挖矿。

五、 结语

Docker 像一个个集装箱,K8s 则是自动化码头。 对于攻击者,这是一个“到处都是 API,到处都是凭证”的乐园;对于防御者,这是一个“动态变化、难以捉摸”的迷宫。

理解了这些基础架构,你才能看懂后续的高阶操作。

👉 下一章预告:打破牢笼——Docker 容器逃逸的 N 种姿势


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:FunnyHacking Ca1m Ca1m《【云安全专题-7】Docker 与 K8s 架构安全》

某团全系验证码 网络安全文章

某团全系验证码

文章总结: 文章以图文方式复盘某团6种验证码的逆向要点:图标点选需按hint+requestCode还原乱序切片,切割方向由resize_str控制;连线类二次
评论:0   参与:  0