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

4.2 K8s Rolebinding添加用户权限
K8s使用基于角色的访问控制(RBAC)来进行操作鉴权 , 允许管理员通过 Kubernetes API 动态配置策略 。 某些情况下运维人员为了操作便利 , 会对普通用户授予cluster-admin的角色 , 攻击者如果收集到该用户登录凭证后 , 可直接以最高权限接管K8s集群 。 少数情况下 , 攻击者可以先获取角色绑定(RoleBinding)权限 , 并将其他用户添加cluster-admin或其他高权限角色来完成提权 。
4.3 利用挂载目录逃逸
参考(3.2通过挂载目录向宿主机写入文件) , 攻击者在容器内部可以利用挂载通道修改宿主机文件来实现逃逸 。
4.4 利用操作系统内核漏洞逃逸
操作系统内核安全(如Linux内核)是容器安全体系的基石 , 是实现容器隔离设计的前提 。 内核漏洞的利用往往从用户空间非法进入内核空间开始 , 在内核空间赋予当前或其他进程高权限以完成提权操作 。 在云原生场景中 , 云厂商会在VM层为操作系统内核漏洞进行补丁修复 , 避免用户被已公开的内核漏洞攻击 。
4.5 利用Docker漏洞逃逸
Docker软件历史上出现过多个高危安全漏洞 , 目前仍有一定影响的是两个2019年的漏洞:Docker runc RCE(CVE-2019-5736)和Docker cp RCE(CVE-2019-14271) 。 两个漏洞均利用了Docker本身的功能设计缺陷 , 利用覆盖容器内部runc文件、libnss库 , 从而实现从容器到宿主机的逃逸行为 。 从攻击者角度来看 , 这两个漏洞均需要与宿主机交互才会触发payload执行 , 实战中并不高效 , 但Docker既要隔离又要通信的机制设计或许会在未来暴露出更多问题 。 在云服务商提供的托管K8s集群以及Serverless服务中 , Docker服务自身安全性会由云服务商维护 , 相比自建 , 安全性会更有保障 。
4.6 利用K8s漏洞进行提权
容器化基础设施每一环的软件漏洞都会带来安全风险 。 Kubernetes特权升级漏洞(CVE-2018-1002105)允许普通用户在一定前提下提升至K8s API Server的最高权限 。 该漏洞需要用户拥有对某个namespace下pod的操作权限 , 同时需要client到API Server和kubelet的网络通路来实施攻击 。 同样 , 该漏洞在云服务中已经被服务商修复 , 在自建的K8s集群中仍有发挥空间 。
4.7 容器内访问docker.sock逃逸
当docker.sock被挂载到容器内部时 , 攻击者可以在容器内部访问该socket , 管理docker daemon 。
此时容器内部可以与docker deamon通信 , 并另起一个高权限的恶意容器 , 从而拿到root shell 。
示例:与docker deamon通信:
容器即隔离 , 容器在设计上使用cgroup、namespace等对宿主机的资源进行隔离及调度使用 , 同时也支持使用Linux capabilities做细粒度的权限管控 。 从这一角度来看 , 不安全的权限分配会为容器逃逸提供通路 。
示例:K8s YAML配置中对capabilities的支持:
securityContext: capabilities: drop: - ALL add:- NET_BIND_SERVICEdocker会以白名单方式赋予容器运行所需的capabilities权限 , 我们可以在docker run命令中使用 --cap-add 以及 --cap-drop 参数控制capabilities 。 以下命令对容器开放了宿主机的进程空间 , 同时赋予容器CAP_SYS_PTRACE权限 , 此时攻击者在容器内部可以注入宿主机进程从而实现逃逸 。
docker run -it --pid=host --cap-add=CAP_SYS_PTRACE ubuntu5.1 容器及宿主机日志清理
攻击者在获得一定权限之后 , 可以擦除容器内部及宿主机的系统日志以及服务日志 , 为企业的入侵事件复盘以及溯源增加难度 。 目前容器运行时安全解决方案中均采用实时的日志采集、自保护方案以及日志采集异常的预警 , 来解决日志恶意擦除导致的溯源问题 。 同时 , 在云原生的容器攻防战场中 , 恶意卸载安全产品agent以切断日志采集能力也逐渐成为了常见的攻击方式 。


推荐阅读