• 云安全—集群攻击入口攻与防


    0x00 前言

    说到云安全肯定不能避免的是集群相关的内容,最出色的就是Kubernetes,也就是k8s。当然docker相关的内容也算是集群的一部分。但是docker容器本身的问题还是归属于容器本身。

    0x01 概述

    在集群攻击入口处的内容主要为:

    • 应用安全
    • 恶意镜像
    • K8s APi Server未授权访问
    • kubelet未授权访问
    • etcd未授权访问
    • Docker Daemon 公网暴露
    • Dashboard面板暴露
    • k8s configfile泄露
    • 私有镜像库暴露

    0x02 应用安全

    这里的应用安全实际上和云服务器的应用安全是一致的,都是针对传统web安全来说,因为部署在哪里都不能让应用安全,改变的是部署方式,并不是应用本身,所以传统web问题依然存在。

    0x02 恶意镜像

    这里的恶意镜像,通常指代的是docker恶意镜像,因为docker镜像的管理更加混乱,任意组织或者个人都可以上传自己制作的docker容器,那么这个问题就很严重,如果直接部署了存在恶意后门的镜像,或者监控等后门,那么去做这种容器的安全就没有任何意义。

    那么应用而生的就是私有仓库,或者第三方提供安全检测的仓库,以及专门的容器检测工具。

    通过私有库和容器检测工具进行风险排查和规避,通过第三方提供的安全库进行风险转移都是一个不错的选择。

    这里不进行展开,会单独出一个docker容器检测,或者私有库搭建的内容

    0x03 K8s APi Server未授权访问

    通常使用 8080 和 6443 端口,将 “system:anonymous” 用户绑定到 “cluster-admin” 用户组,就可以创建特权容器。

    0x04 kubelet未授权访问

    kubelet 是 Kubernetes 集群中的一个组件,它负责管理节点上的容器。kubelet 会定期从 API Server 获取 Pod 的配置信息,并根据配置信息来启动、停止、重启容器以及监控容器的运行情况。kubelet 还负责节点的健康检查,当发现节点出现故障时,会向 Master 报告节点的状态,以便 Master 进行相应的调度。总之,kubelet 是 Kubernetes 集群中非常重要的一个组件。

    1、认证为AlwaysAllow的时候此接口可未授权访问
    2、10255端口出现的pod和node信息信息泄露问题

    0x05 etcd未授权访问

    etcd是一个开源的分布式键值对存储仓库,常用于分布式系统中的协调服务和共享配置。etcd使用Raft一致性算法来维护集群的一致性和高可用性,支持通过HTTP或gRPC接口进行访问和操作。它是Kubernetes等分布式系统的重要组件之一,用于存储集群的配置信息、状态信息、元数据等数据。

    1、client-cert-auth未授权
    2、2379公网泄露
    3、cret证书泄露
    4、client-cert-auth未授权

    0x06 Docker Daemon 公网暴露

    Docker Daemon 是 Docker 的后台进程,它监听 Docker API 请求并管理 Docker 镜像、容器、网络和数据卷等资源。Docker Daemon 运行在宿主机上,并负责执行用户提交的 Docker 命令,例如创建、启动、停止、删除容器,上传和下载镜像等。Docker CLI 客户端通过与 Docker Daemon 进行交互,将用户提交的命令转化为 API 请求,并将请求发送给 Docker Daemon 去处理。

    docker daemon监听在/var/run/docker.sock中创建的unix socket,2375端口用于未认证的HTTP通信,2376用于可信HTTPS通信

    Docker时默认会把2375端口对外开放

    0x07 Dashboard面板暴露

    Dashboard面板是一种可视化的数据展示界面,可以展示各种类型的数据和分析结果。通常用于企业的数据分析和决策制定,可以提供实时的数据和反馈。Dashboard面板通常包括多个组件,如图表、计数器、地图和表格等,用户可以根据自己的需求自定义展示内容和排版布局。

    当Dashboard面板暴露泄露的时候,Dashboard面板本身就会成为一个比较大的攻击面。

    0x08 k8s configfile泄露

    configfile作为K8s集群的管理凭证,其中包含有关K8s集群的详细信息,默认的 kubeconfig 文件 $HOME/.kube/config。

    Kubernetes的配置文件(config file)是一个yaml或json格式的文件,用于指定Kubernetes API对象的属性和配置信息。它可以用来定义一个或多个Deployment、Service、Pod、ConfigMap、Secrets等资源的配置信息,甚至可以定义整个Kubernetes集群的配置信息。

    一个Kubernetes配置文件通常包含以下部分:

    1. Kind: 指定要创建的Kubernetes资源类型,如Deployment、Service、Pod等。

    2. Metadata: 包含关于资源的元信息,如name、namespace、labels、annotations等。

    3. Spec: 指定资源的规格和配置信息,如镜像、容器端口、挂载卷等。

    下面是一个简单的Deployment的yaml配置文件示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.19.2
            ports:
            - containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    其中,apiVersion指定使用的Kubernetes API版本,kind指定要创建的资源类型,metadata包含资源的元信息,spec指定资源的规格和配置信息。这个Deployment文件定义了一个名为nginx-deployment的Deployment,包含3个Pod副本,每个Pod包含一个名为nginx的容器,使用nginx:1.19.2镜像,并监听容器端口80。

    在使用配置文件创建资源时,可以使用kubectl命令行工具的apply子命令,将配置文件中定义的资源应用到Kubernetes集群中,例如:

    $ kubectl apply -f deployment.yaml
    
    • 1

    这个命令将会创建一个名为nginx-deployment的Deployment,并在Kubernetes集群中创建3个Pod副本,每个Pod包含一个名为nginx的容器,使用nginx:1.19.2镜像,并监听容器端口80。Kubernetes的配置文件(config file)是一个yaml或json格式的文件,用于指定Kubernetes API对象的属性和配置信息。它可以用来定义一个或多个Deployment、Service、Pod、ConfigMap、Secrets等资源的配置信息,甚至可以定义整个Kubernetes集群的配置信息。

    一个Kubernetes配置文件通常包含以下部分:

    1. Kind: 指定要创建的Kubernetes资源类型,如Deployment、Service、Pod等。

    2. Metadata: 包含关于资源的元信息,如name、namespace、labels、annotations等。

    3. Spec: 指定资源的规格和配置信息,如镜像、容器端口、挂载卷等。

    下面是一个简单的Deployment的yaml配置文件示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      labels:
        app: nginx
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.19.2
            ports:
            - containerPort: 80
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    其中,apiVersion指定使用的Kubernetes API版本,kind指定要创建的资源类型,metadata包含资源的元信息,spec指定资源的规格和配置信息。这个Deployment文件定义了一个名为nginx-deployment的Deployment,包含3个Pod副本,每个Pod包含一个名为nginx的容器,使用nginx:1.19.2镜像,并监听容器端口80。

    在使用配置文件创建资源时,可以使用kubectl命令行工具的apply子命令,将配置文件中定义的资源应用到Kubernetes集群中,例如:

    $ kubectl apply -f deployment.yaml
    
    • 1

    这个命令将会创建一个名为nginx-deployment的Deployment,并在Kubernetes集群中创建3个Pod副本,每个Pod包含一个名为nginx的容器,使用nginx:1.19.2镜像,并监听容器端口80。

    0x09 私有镜像库暴露

    私有镜像库是一种存储Docker镜像的仓库,通常由组织或个人部署在自己的服务器上,用于存储定制化或私有的Docker镜像,可以与Docker Hub相比较。它允许用户上传、存储和管理Docker镜像,并且可以通过网络访问进行共享。私有镜像库提供了更好的安全性、可控性和自定义化,尤其是对于企业用户而言,在存储和管理Docker镜像方面更加灵活。私有镜像库是一种存储Docker镜像的仓库,通常由组织或个人部署在自己的服务器上,用于存储定制化或私有的Docker镜像,可以与Docker Hub相比较。它允许用户上传、存储和管理Docker镜像,并且可以通过网络访问进行共享。私有镜像库提供了更好的安全性、可控性和自定义化,尤其是对于企业用户而言,在存储和管理Docker镜像方面更加灵活。

    如果私有镜像库暴露的话,那么如果攻击者拥有了操作私有镜像的权限就可以上传恶意镜像,从而进行恶意攻击。

    以上都是集群在初始访问阶段可能遇到的一些问题,如果有任何遗漏再进行补充,并且每一个部分都会单独形成一篇攻与防的文章,以及对一些工具的探讨和整合。

    补充知识

    k8s

    Kubernetes(简称 K8s)是一个开源的容器编排引擎,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 设计,现在由 Cloud Native Computing Foundation (CNCF) 维护。K8s 提供了一个平台来管理容器的部署、运行、扩展和监控,使得容器化应用程序的开发、部署和运维变得更加便捷。Kubernetes 提供了许多功能,包括服务发现、负载均衡、自动扩展、故障恢复、升级和回滚、安全性等,使得在容器上运行的应用程序更加可靠和可用。Kubernetes 可以运行在公有云、私有云甚至本地数据中心中。

  • 相关阅读:
    IDEA04:动态加载配置文件
    数字货币和区块链:跨境电商的未来之革命
    一个程序员的成长之路
    yocto bitcake 使用记录
    计算机毕业设计springboot驾校学员管理系统w42sj源码+系统+程序+lw文档+部署
    难对齐、难保障、难管理?一文了解字节跳动如何解决数据SLA治理难题
    【python绘图—colorbar操作学习】
    云堡垒机和信创堡垒机主要区别讲解
    yolov5s V6.1版本训练PASCAL VOC2012数据集&yolov5官网教程Train Custom Data
    gcc -static参数
  • 原文地址:https://blog.csdn.net/qq_36869808/article/details/133960403