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


示例:通过Cloud Shell管理集群:
CSDN云上容器 ATT&CK 矩阵详解,阿里云助力企业容器化安全落地
本文插图
3.Persistence/持久化
3.1 部署远控客户端
(参考2.3部分通过K8s控制器部署后门容器)攻击者通过K8s DaemonSet向每个Node中植入后门容器 , 这些容器可以设置为特权容器并通过挂载宿主机的文件空间来进一步向每个Node植入二进制并远控客户端 , 从而完成Node层持久化 , 且后续操作不会触发K8s层的审计策略 。
3.2 通过挂载目录向宿主机写入文件
一种常见的容器逃逸方法 , 如果容器/Pod启动时将VM的核心目录以写权限挂载(如/root, /proc, /etc等) , 则攻击者进入容器后可以修改敏感文件进行逃逸 , 如利用/etc/crontab执行定时任务、修改/root/.ssh/authorized_keys获取SSH登录权限、读取其他进程空间内容等 。
示例:不安全的目录挂载:
写入SSH凭证
(echo -e "\n\n";cat id_rsa_new.pub) >> /root/.ssh/authorized_keys3.3 K8s cronjob持久化
Cronjob是K8s controller的一种 , 用于创建基于时间的调度任务(类似主机的/etc/crontab) 。 攻击者在获取controller create权限后可以创建cronjob实现持久化 。
示例:cronjob持久化
xy@x-8 ~/D/test> cat cronjob.yamlapiVersion: batch/v1beta1kind: CronJobmetadata: name: echotestspec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: container image: nginx args: - /bin/sh - -c - echo test restartPolicy: OnFailurexy@x-8 ~/D/test> kubectl create -f cronjob.yamlcronjob.batch/echotest createdxy@x-8 ~/D/test> kubectl get cronjobsNAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGEechotest */1 * * * * False 3 26s 3m8s3.4 在私有镜像库的镜像中植入后门
(参考1.8私有镜像库暴露)攻击者在接管企业私有镜像库之后 , 可以进行拉取私有镜像窃取信息、删除仓库中的镜像、替换仓库中的镜像、为已有镜像添加后门、在镜像服务中创建后门账号等恶意操作 。
一种持久化攻击方式是在dockerfile中加入额外的恶意指令层来执行恶意代码 , 同时该方法可以自动化并具有通用性 。 同时在Docker镜像的分层存储中 , 每一层的变化都将以文件的形式保留在image内部 , 一种更为隐蔽的持久化方式是直接编辑原始镜像的文件层 , 将镜像中原始的可执行文件或链接库文件替换为精心构造的后门文件之后再次打包成新的镜像 , 从而实现在正常情况下无行为 , 仅在特定场景下触发的持久化工具 。
3.5 修改核心组件访问权限
攻击者通过ConfigMap修改Kubelet使其关闭认证并允许匿名访问 , 或暴露API Server的未授权HTTP接口 , 使其在后续渗透过程中拥有持续的后门命令通道 。
4. Privilege Escalation/权限提升
4.1 利用特权容器逃逸
Docker允许特权容器访问宿主机上的所有设备 , 同时修改AppArmor或SELinux的配置 , 使特权容器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限 。 在这种情况下 , 攻击者从特权容器逃逸是极其容易实现的 。
示例:将系统盘挂载到容器内部 , 读写宿主机文件:
root@d000b330717d:/# fdisk -lDisk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectorsUnits: sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisklabel type: dosDisk identifier: 0xe2eb87faDevice Boot Start End Sectors Size Id Type/dev/vda1 * 2048 83886046 83883999 40G 83 Linuxroot@d000b330717d:/# mkdir /mnt1root@d000b330717d:/# mount /dev/vda1 /mnt1root@d000b330717d:/# cd /mnt1root@d000b330717d:/mnt1# lsbin etc initrd.img.old lost+found opt run sys varboot home lib media proc sbin tmp vmlinuzdev initrd.img lib64 mnt root srv usr vmlinuz.old