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

K8s使用Secret对象对access key、密码、OAuth token和ssh key等敏感信息进行统一管理 。 pod定义时可以引用secret对象以便在运行时访问 。 攻击者可以通过pod内部service account或更高权限用户来获取这些secret内容 , 从中窃取其他服务的通信凭证 。
示例:查看并下载K8s secret保存的凭据:
xy@x-8 ~> kubectl get secrets --namespace=kube-systemNAME TYPE DATA AGEadmin-token-ltbcr kubernetes.io/service-account-token 3 184dalibaba-log-controller-token-9kv4m kubernetes.io3 184daliyun-acr-credential-helper-token-vwmlw kubernetes.io3 184dattachdetach-controller-token-l5bfh kubernetes.io3 184dbootstrap-signer-token-qbrx7 kubernetes.io3 184dbootstrap-token-509e2b bootstrap.kubernetes.io/token 6 184dcertificate-controller-token-dgpjn kubernetes.io3 184dcloud-node-controller-token-647sw kubernetes.io3 184d...xy@x-8 ~> kubectl get secret alibaba-log-controller-token-9kv4m --namespace=kube-system -o yaml6.2 云产品AK泄露
云原生的应用部署流程中会涉及到各种云产品的API通信 , 当某应用被攻破后 , 攻击者可以通过K8s secret或者挂载到本地的凭证文件来获取相关服务的AK并进行横向移动 。 一种常见的场景是:入侵WEB应用后获取云存储(OSS)、云数据库(RDS)、日志服务的通信凭证 , 并进一步窃取数据 。
示例:关于云产品AK的扫描规则已被工具化:
CSDN云上容器 ATT&CK 矩阵详解,阿里云助力企业容器化安全落地
本文插图
6.3 K8sService Account凭证泄露
此类场景多见于办公网运维PC、跳板机以及通过SSH管理的master节点上 。 黑客在攻破此类服务器时 , 可以检查本地是否存在kubectl鉴权所需的配置文件(一般在$HOME/.kube/config) , 该文件通常包含了登录K8s集群的全部信息 。
6.4 应用层API凭证泄露
在复杂业务场景以及微服务架构中 , K8s各个服务之间、容器与VM之间会通过API方式进行通信 , 窃取其通信凭证可用于横向渗透 。
6.5 利用K8s准入控制器窃取信息
K8s准入控制器(Admission Controller)用于hook客户端对API Server的请求 。 其中变更(mutating)控制器可以修改被其接受的对象;验证(validating)控制器可以审计并判断是否允许该请求通过 。 准入控制器是可以串联的 , 在请求到达API Server之前 , 如有任何一个控制器拒绝了该请求 , 则整个请求将立即被拒绝 , 并向终端用户返回一个错误 。
为了便于用户部署自己的准入服务 , K8s提供了动态准入控制(Admission Webhook)功能 , 即用于接收准入请求并对其进行处理的HTTP回调机制 。
一种利用动态准入控制实现持久化的方式:攻击者在获取cluster-admin权限后 , 可以创建恶意的准入控制器hook掉所有的API访问 , 引用攻击者的外部webhook作为validating服务 , 这样k8s就会将携带敏感信息的API请求发送到攻击者所用服务器 。
示例:利用准入控制器后门 , 使用通配符hook全部操作 , 使用failurePolicy和timeoutSeconds参数做到用户侧无感 , 从而实现隐蔽的数据窃取(如:K8s secret创建时发送到API的AK信息) 。
apiVersion: admissionregistration.k8s.io/v1kind: ValidatingWebhookConfiguration...webhooks:- name: my-webhook.example.com failurePolicy: Ignore timeoutSeconds: 2 rules: - apiGroups: ["*"] apiVersions: ["*"] operations: ["*"] resources: ["*/*"] scope: "*"...7. Discovery/探测
7.1 访问K8s API Server
(参考2.4利用Service Account连接API Server执行指令)攻击者进入pod之后 , 可以通过curl或wget等http客户端 , 或使用编译好的报文构造工具 , 直接访问K8s REST API , 当service account具有高权限时可以直接下发命令进行横向移动 。 而当用户具有低权限时 , 也可能通过API Server探测到集群内部的资源信息、运行状态以及secret , 有利于寻找下一个突破点 。


推荐阅读