业界要闻:容器安全漏洞与关键更新
首先关注影响广泛的容器安全漏洞——Alpine Linux 基础镜像被曝出存在提权漏洞(编号 CVE-2019-5021)。此漏洞影响范围极大,自 Alpine 3.3 版本起的所有 Docker 镜像均受影响。根本原因在于 Alpine 的 root 用户默认带有空密码,一旦攻击者能够接触容器,可直接利用空密码获取 root 权限,导致容器完全暴露。受影响版本涵盖 3.3、3.4、3.5、3.6、3.7、3.8、3.9 以及 edge 等全部版本。当前容器生态中大量项目(如 Kubernetes 生态的众多组件)在基础镜像层使用 Alpine,因此风险面很广。好消息是 Alpine 官方已在新版 3.9.4 中修复该漏洞,建议立即升级。另外可参考一些开源项目的处理方式,例如 kubernetes-csi 项目已更换基础镜像,其 PR 操作流程值得借鉴。
接着看 Docker 项目自身曝出的严重漏洞(CVE-2018-15664),攻击者可直接触及宿主机文件系统。该漏洞由 SUSE 的 Linux 工程师 Aleksa Sarai 于 5 月 29 日报送。具体触发机制:当用户执行 docker cp 命令时,Docker 需解析文件路径并执行文件操作,两个步骤之间存在极短的时间窗口。攻击者可趁此间隙将符号链接(symlink)插入路径,从而在容器内以 root 身份获取宿主机文件的符号链接。在 docker cp 场景下,这基本等同于获得宿主机任意文件的读写权限。此漏洞本质是 TOCTOU(时间检查-使用时间)攻击的典型变体,利用了 Linux 操作文件时的竞争状态(race condition)。虽然理论上可能影响所有 Docker 版本,但 Docker 官方已发布补丁计划,后续版本会修复。攻击前提是攻击者需具备 docker cp 命令的使用权限。例如阿里云容器服务集群默认启用基于 RBAC 的访问控制,非法用户无法获得容器内 cp 命令权限。作为用户,最稳妥的做法是禁止在多租环境下启用 docker cp,同时使用 apparmor 等手段限制 Docker Daemon。值得庆幸的是,该漏洞利用条件相当苛刻,需要精确构造文件竞态才能生效。更详细的分析可参考阿里专家的专题报告。
上游重要进展
Kubernetes 从 v1.15 开始正式切换到 go module 进行包管理。相比原有的 Godeps,go module 在打包、编译等环节速度优势明显,且能在任何操作系统上方便地复现依赖包。更关键的是,go module 的设计让 Kubernetes 自身被其他项目引用变得更容易——这其实是 Kubernetes 向框架化演进的重要信号。
Envoy 这边有两件事值得关注:一是正在 Redis Proxy 中实现 request mirror 功能,可对请求做镜像,并支持仅对固定百分比的流量做镜像,还能过滤掉 read 相关请求。二是 Envoy 正在增加路由 debug 功能,通过该功能可了解一个调用能否正常路由出去以及路由到了哪个集群。社区之前虽提供了 route table checker 工具,但只能检查静态路由,对通过 xDS 下发的动态路由完全失效,新功能正好补齐了这一短板。
Knative 社区正在探索 stateful-serverless 方向,由 lightbend 公司(著名的 Akka 产品)开发了一个实验性项目。目标是在 Knative 中建立有状态的服务,核心思路是依赖 Akka Cluster 加持久化数据库,可将请求分配给固定容器。演示视频展示了一个简单的计数器服务,KubeCon 上的演讲视频也有更详细讲解。
事件安全方面,Knative 提出了 Eventing Security Requirements 概要设计,主要定义了事件在数据平面上的三个安全策略边界及其对应策略:从事件提供者到事件源(Event Source),需要身份认证和授权;从事件流量入口(Ingress)到 Broker,通过 Token 进行认证;从 Trigger 到消费服务,由消费服务(函数)对持有 Token 的 Trigger 进行认证。
另外提醒:Istio 即将结束对 1.0 版本的支持,请尽快升级。根据 Istio 社区支持政策,最新 LTS 发布后的三个月内,会继续支持上一个 LTS 版本。Istio 1.1 于 3 月 19 日发布,因此对 1.0 的支持将在 2019 年 6 月 19 日结束。之后 1.0 版本将不再有安全问题和关键错误的修复,务必尽快迁移至最新版本。
开源项目推荐
Cilium:基于 Kubernetes Network Policy 的优秀实现。它利用 Linux 核心能力——柏克莱封包过滤器(BPF),在安全性和隔离性上表现极为出色。目前作为 Kubernetes 的 addons 存在,提供强大的安全可视性和强制执行能力,值得深入关注。
本周阅读推荐
Kubernetes 中 Informer 的使用简介:Informer 是编写 Kubernetes 自定义控制器时绕不开的概念,也是通过 WATCH 机制获取 API 对象的主要手段。但很多人对 Informer 以及相关的 Reflector、Delta FIFO Queue、Local Store、WorkQueue 这些概念感到困惑。这篇博客用简单易懂的语言讲清工作原理,强烈推荐阅读。
Service Mesh 发展趋势:云原生中流砥柱:介绍了 Service Mesh 最新的产品动态,分析发展趋势和未来走向,并结合蚂蚁的上云实践,阐述了在云原生背景下 Service Mesh 的核心价值,以及对云原生落地的关键作用。

