为了进行云原生环境下的安全治理,须关注“Cloud”(云)、“Cluster”(集群)、“Image”( 镜像)、“Container” (容器)以及“Application”( 应用)等组成部分。
Cloud——云,一般指数据中心的基础设施。基础设施一般指运行着 Linux 操作系统的宿主机集群,并通过专业的数 据交换机进行连接。常见的安全问题主要集中在操作系统本身、Web 中间件以及 rootfs 等方面的漏洞。例如,特定 版本内核或者某些驱动模块本身包含有漏洞,CVE-2016-5195(“脏牛漏洞”)就是该类型漏洞的典型代表。该漏洞 存在于特定版本的 Linux 内核,由于内核代码没有正确处理 copy-on-write(COW) 功能写入只读内存映射,导致本地 攻击者可利用该漏洞获取权限。例如,一些基础组件像 bash、ssh 等软件自身的漏洞,近期爆出的 CVE-2021-4034(Linux Polkit 权限提升漏洞)就是该类型漏洞的典型代表,攻击者可利用该漏洞通过精心设计环境变量诱导 pkexec 程序执 行任意代码;再如,一些 Web 中间件像 Tomcat、Weblogic 等软件自身的漏洞,近期爆出的 CVE-2020-2551(Weblogic IIOP 反序列化漏洞)就是该类型漏洞的典型代表,攻击者可利用 IIOP 协议执行远程代码。此外,在基础设施部署过程中, 某些不安全配置的引入也可导致的漏洞等,例如对外暴露了某些不安全的端口。
Cluster——集群,一般指承载云原生环境的编排引擎集群。当前云原生体系建设所使用的编排引擎主要是以 Kubernetes 为基础的各种发行版本。作为 Kubernetes 来说,其本身是由多个组件构成的集群系统。这些组件包括但 不限于 kubelet、Docker、containerd、cri-o、etcd、kube-apiserver、kube-controller、kube-scheduler 以及kube-proxy 等等。这些组件一般都是云原生安全领域重点研究的对象,并确实爆出过一些影响范围广以及威胁较高 的漏洞。比较典型的漏洞是 CVE-2019-5736(Docker runC 容器逃逸漏洞),该漏洞源于程序没有正确地处理文件描 述符,攻击者可利用该漏洞覆盖主机 runC 的二进制文件并以 root 权限执行命令。同时,由于集群部署的过程中涉及 到大量的配置以及权限分配过程,难免会留下一些薄弱的配置选项,一些常见的安全风险包括但不限于 Kubernetes 组件或容器运行时组件未鉴权、允许非安全通道访问的的 Kubernertes Dashboard 服务。它们均可能是导致集群的 被攻击面扩大的主要因素。
Image——镜像,一般指容器运行的基础镜像。镜像安全问题要一分为二分析,分为静态容器镜像与活动容器镜像。 当前云原生体系上的业务应用是以容器的方式进行部署,容器引擎服务支持使用不同的镜像启动相应的容器。为了提 高容器镜像数据的复用度,容器镜像一般都采用分层文件系统的方式进行组织。而大部分被复用的数据主要来自于互 联网或者某些未知的地方。一些攻击者可能会通过某些精心配置的上游镜像投放来实现对系统的渗透,这些方案包括 植入某些可进行漏洞利用的工具或者动态库、Webshell、病毒木马,甚至是添加一些不安全的配置到上游镜像中;同时, 对私有仓库的入侵也可能会导致镜像被污染或者投毒。同时,开发者无心导致的应用漏洞也可能将安全风险带给容器。
Container——容器,一般指容器镜像是以容器的形式运行起来后的状态。与传统的 IT 环境类似,容器环境下的业 务代码本身也可能存在 Bug 甚至安全漏洞。无论是 SQL 注入、XSS 和文件上传漏洞,还是反序列化或缓冲区溢出漏洞, 它们都有可能出现在容器化应用中。与此同时,容器中的 Web 应用容器若对外开放端口,则很有可能被黑客直接利用。 容器虽然天然地与主机内核有着一定的隔离,这使得它们有着一定的安全性。但是攻击者可能轻易打破容器的隔离性。 比如若某容器被配置了“-privileged”等不安全的配置选项,将不受 Seccomp 等安全机制的限制,容器内 root 权限 将变得与宿主机上的 root 权限无异。此外“容器逃逸”问题仍然是运行时容器最为严重的安全风险。因相关程序漏 洞导致的容器逃逸(比如 CVE-2019-5136), 或内核漏洞导致的容器逃逸(比如 CVE-2016-5195)等漏洞风险仍然是 需要重点关注的问题。 容器逃逸攻击的实施往往并非一蹴而就,往往是一系列以“权限提升”为目的的攻击步骤的组合,并且达到容器逃逸 目的可能的途径也是多样化的。 例如,据 SysdigSecure《2021 容器安全和使用报告》中的“默认启用的 Falco 安全策略触发的报警”统计,“在 / etc 下执行写操作”“启动特权容器”以及“在 root 下执行写操作”是最常见的违规事件,它们均可能是容器逃逸攻 击的一环。

Application——应用,一般指各类微服务应用。由于研发人员在开发的过程中,会不可避免地使用一些开源项目的 代码或者组件,这些代码和组件可能存在漏洞;同时,研发人员在代码研发的过程中若使用不安全的编码方式,可能 给微服务应用引入漏洞,进而造成微服务应用对外暴露漏洞,被黑客远程利用。 这些安全问题都应该得到重视,并在正式发布之前进行安全加固,践行“安全左移”。