高校数据中心云原生平台安全风险研究
2022-03-18谢超群
◆谢超群
高校数据中心云原生平台安全风险研究
◆谢超群
(福建中医药大学现代教育技术中心 福建 350000)
随着高校信息系统逐步向微服务架构发展,基于Docker容器技术和Kubernetes容器编排技术构建的云原生平台在高校数据中心规模扩展迅速。云原生平台架构复杂,相比传统虚拟化模式存在着更多的安全风险。本文结合高校数据中心云原生部署现状,按照云原生的系统架构从容器安全、容器编排系统安全、服务网格安全、微服务安全四个方面深入分析了云原生平台所面临的常见安全风险,为高校数据中心云原生安全防护奠定了基础。
云原生安全;微服务;容器;Kubernetes;服务网格
1 引言
随着近年来微服务架构信息系统的不断普及,高校数据中心采用Docker容器技术和Kubernetes容器编排技术构建的云原生平台的规模增长迅速,由于云原生平台架构的复杂性,云原生平台相比传统的虚拟化技术,存在更多被利用的安全风险点,从云原生的体系架构上来分析,高校数据中心云原生平台面临着容器安全风险、容器编排系统安全风险、服务网格安全风险、微服务安全风险。云原生安全风险思维导图如图1所示。
图1 云原生安全风险思维导图
2 容器安全风险
容器技术为云原生平台的微服务应用提供容器运行资源,对云原生系统的安全非常重要。容器技术在云原生平台上遇到的常见安全风险有:容器镜像制作和发布、容器逃逸和容器资源耗尽服务攻击。
容器镜像制作和发布的安全风险主要包含镜像漏洞利用、镜像投毒。容器镜像漏洞利用是指开发者可能发布了有漏洞的容器镜像,攻击者利用容器镜像的漏洞对运行的容器进行攻击和提权等操作。比如容器镜像中的root密码被设置为空,攻击者可直接获取到容器的root权限,对容器进行任意的操作。镜像投毒是指攻击者制作包含恶意代码的容器镜像,上传恶意容器镜像到容器镜像仓库,引导受害者运行镜像仓库中的恶意镜像,从而入侵和利用受害者主机。镜像投毒包含三种类型:投送恶意挖矿镜像、投送恶意后门镜、投送恶意exploit镜像,投送恶意挖矿镜像指在镜像中插入恶意挖矿代码,引导受害者主机下载和运行恶意挖矿容器镜像,从而获取经济利益的行为。投送恶意后门镜像指在镜像中插入后门代码,受害者在主机上运行恶意后门镜像后,直接获得受害者容器的控制权。投送恶意exploit镜像,是指利用当前热门的容器宿主机漏洞,制作恶意exploit镜像引导受害者下载和运行恶意exploit镜像,从而进行容器逃逸最终获取容器宿主机控制权限的行为[1]。
容器逃逸是指攻击者利用容器配置不当、容器危险挂载、linux内核漏洞从运行的容器中逃逸,进而获取容器宿主机控制权的行为。容器逃逸包括配置不当导致的容器逃逸、危险挂载导致的容器逃逸、Linux内核漏洞导致的容器逃逸。配置不当导致的容器逃逸是指用户不当配置了容器的环境参数或运行参数,扩大了容器运行的底层安全风险,攻击者可以通过危险配置的容器参数,从容器中逃逸获取宿主机资源的控制权。比如开启容器的特权模式参数,攻击者可以直接在容器中挂载宿主机磁盘,并切换到宿主机根目录,从而进一步实现容器逃逸。危险挂载导致的容器逃逸是指用户为实现特定功能或方便操作,将宿主机的某些敏感卷挂载进了容器,攻击者可以利用敏感卷进一步获取宿主机资源的控制权,从而从容器逃逸到宿主机中[2]。比如用户在容器中挂载了Docker的守护监听套接字Docker Socket,攻击者控制了容器之后可利用Docker Socket创建一个挂载宿主机根目录的新容器,并在容器中使用chroot命令切换到挂载的宿主机根目录,从而进一步实现容器逃逸。Linux内核漏洞导致的容器逃逸是指利用宿主机Linux内核漏洞,在容器中运行有效漏洞利用代码,从而获得宿主机控制权完成容器逃逸。比如利用著名的脏牛Linux内核漏洞在容器中加载有效的shellcode,劫持内存中正常的函数调用过程,从而获取从宿主机反弹回来的shell来获取控制权,实现成功的容器逃逸[3]。
传统虚拟机占用的资源会对使用的宿主机资源规定一个阈值,但容器占用的宿主机资源相比于传统虚拟机并未规定一个资源占用的上限。因此攻击者可在一个可控制的容器运行恶意代码或对一个容器发起拒绝服务攻击,导致被攻击的容器将宿主机的资源耗尽,从而使其他在宿主机的容器使用不到足够的资源,最终无法对外提供服务。
3 容器编排系统安全风险
目前主流的容器编排系统主要以开源容器编排系统Kubernetes为主,Kubernetes在云原生平台中负责调度和管理容器相关资源,因此Kubernetes容器编排系统的安全在云原生平台显得非常重要。常见的Kubernetes容器编排系统安全风险主要包含以下几种:Kubernetes控制权限安全风险、Kubernetes网络安全风险、拒绝服务攻击安全风险。
Kubernetes控制权限安全风险主要包含Kubernetes系统组件配置不当、Kubernetes权限提升漏洞。Kubernetes系统组件配置不当是指对Kubernetes系统组件进行了不安全的配置,导致攻击者可经过未授权的访问,获取到Kubernetes容器编排系统控制权限。比如Kubernetes的核心组件API Server,默认情况下API Server能以http提供无认证和授权机制的远程调用服务,攻击者可未经授权调用API Server的服务来操控整个Kubernetes集群。Kubernetes权限提升漏洞是指利用Kubernetes的系统漏洞,构造特殊的系统请求,来获取Kubernetes集群的控制权。比如利用Kubernetes的核心组件API Server的漏洞,构造特殊的系统请求,攻击者能将API Server作为代理,在未授权的情况下对后端的宿主机发送执行任意的控制指令,从而实现对整个Kubernetes集群的控制[4]。
Kubernetes网络安全风险主要是指在Kubernetes容器编排系统中,容器POD组成的局域网存在安全风险。比如攻击者获取了Kubernetes集群中的某个容器POD的控制权后,通过ARP欺骗诱导其他的容器POD以为它是集群的DNS服务器,当其他的容器POD发起域名请求时会通过被控制的容器POD进行DNS查询请求,从而攻击者可对其他POD的网络请求流量进行劫持或篡改,威胁整个Kubernetes集群的网络通信安全。
Kubernetes拒绝服务攻击主要包含基于流量的拒绝服务攻击和基于漏洞的拒绝服务攻击。基于流量的拒绝服务攻击是指攻击者通过操控多台主机对Kubernetes的系统组件进行大流量的服务请求,从而导致Kubernetes系统组件无法正常服务,造成Kubernetes集群无法正常运行。基于漏洞的拒绝服务攻击是指攻击者利用Kubernetes系统组件的漏洞,构造特殊服务请求从而导致Kubernetes系统组件无法正常运行,进而造成Kubernetes集群无法正常运行。比如Kubernetes的核心组件API Server存在一个拒绝服务漏洞,攻击者可以构建恶意的YAML或JSON的请求,导致API Server快速消耗主机的CPU和内存,从而可能导致Kubernetes集群运行崩溃[5]。
4 服务网格安全风险
服务网格作为云原生平台的基础设施,主要负责代理处理微服务之间的通信请求。在云原生平台中,一个应用服务通常由多个微服务构成,这些微服务形成了复杂的调用请求拓扑,服务网格作为轻量级的透明网络代理,来实现在调用请求拓扑中的微服务请求的可靠传递。目前服务网格的安全风险主要包含服务间的中间人攻击和服务间的越权攻击。
服务间的中间人攻击是指服务网格未对服务网络代理之间的通信进行加密,攻击者如获取一个服务的控制权之后,可以窃听、伪造服务之间网络流量,从而造成服务的数据泄露风险或伪造身份进而控制其他的服务。比如服务网格Istio默认未采用双向的TLS认证,攻击者一旦控制网格中的某个服务之后,便可窃听其他服务的网络流量或者伪造身份控制其他服务,进而实现在服务网格的中间人攻击。
服务间的越权攻击是指攻击者通过服务网格中的不当的认证授权配置和漏洞,攻击者可以在获取某个服务控制权限下,进而获得其他服务控制权的越权攻击。服务网格的越权攻击主要包含东西向的越权攻击和南北向的越权攻击。东西向的越权攻击是指针对服务网格中各个服务之间访问未认证授权的攻击。比如常见的Istio服务网格默认并未对服务间的通信下发有效的认证授权策略,一旦在攻击者入侵某个Istio服务网格的服务之后,如果这个服务具有访问其他一些服务的权限,攻击者将能直接利用这个服务越权入侵到其他的服务,进而对整个服务网格中服务造成严重威胁[6]。南北向的越权攻击是指外界通过服务网格的网关,利用服务的漏洞和服务间未认证授权策略,对服务网格中的服务进行越权攻击。比如Istio服务网格的API网关负责对外部的API请求作安全控制,如API网关未配置防护策略,攻击者便可利用服务的漏洞获取服务的控制权,并利用服务间的未认证授权访问,来进一步提权入侵其他的服务,最终控制整个云原生服务网格。
5 微服务安全风险
随着高校数据中心应用微服务化,高校云原生平台的微服务数量增长迅速。微服务主要采用API相互调用的方式来完成相应的应用功能,暴露的众多微服务API端口成为安全防护的缺口。同时微服务间的认证授权访问配置复杂,人为因素导致认证授权访问配置不当,攻击者便可利用其进行越权攻击,目前常见的微服务安全风险包括微服务数据泄露、微服务授权访问风险、微服务WEB应用风险。
微服务数据泄露分为应用层、容器层、Kubernetes容器编排层的数据泄露。应用层的数据泄露是指攻击者利用应用的数据访问API接口的漏洞或未加密的访问协议,进行越权或中间人攻击,从而获取应用存储的数据。容器层的数据泄露是指开发者在制作容器镜像时,将敏感信息写入了环境变量、源码或Dockerfile,导致容器承载的微服务存在泄露敏感数据的风险。Kubernetes容器编排层的数据泄露是指由于Kubernetes默认安全机制往往不完善,导致攻击者可利用Kubernetes的安全缺陷,来获取微服务的敏感信息。比如Secerts资源可用于存储微服务的数据库登录信息,默认Secerts资源都是明文存储在Etcd组件中,如Etcd组件未开启TLS加密访问,攻击者入侵到Kubernetes集群内部后便可访问Etcd组件获取明文存储的Secerts资源,造成微服务登录信息的大量泄漏。
传统的单体架构应用可作为一个整体对用户进行授权。但在微服务架构下,微服务不仅需要对用户授权,还需要对其他服务进行访问授权。如果微服务的授权访问出现配置不当的情况,攻击者便可以利用服务的访问授权,从一个微服务非法访问其他的微服务。Kubernetes管理的容器集群中,承载微服务的容器POD默认是可以互相通信,如果POD之间的网络访问策略没有设置,攻击者可以快速从某一个被控制的微服务POD,非法入侵到其他的微服务POD中[7]。
微服务Web应用对外部用户是开放的,攻击者可以从外部对微服务发起各种WEB攻击,如WEB拒绝服务攻击、SQL注入攻击、跨站脚本攻击等[8]。当攻击者通过Web应用攻击获取到微服务所在容器POD的控制权限后。可以进一步利用Kubernetes集群的安全漏洞或微服务访问授权配置不当对其他容器POD进行入侵和控制,直接威胁到整个Kubernetes集群的正常运行。
6 结束语
近年来,随着基于Docker容器技术和Kubernetes容器编排技术的云原生平台在高校数据中心的不断普及,云原生平台的安全问题已经成为高校数据中心需要解决的难题。本文根据云原生平台的体系架构,从容器安全风险、容器编排系统安全风险、服务网格安全风险、微服务安全风险四个方面深入分析了云原生平台在高校数据中心所面临的安全风险,为进一步保障高校数据中心云原生平台的安全性提供了理论支持。
[1]任兰芳,庄小君,付俊. Docker容器安全防护技术研究[J]. 电信工程技术与标准化,2020(03):73-78.
[2]胡俊,李漫. 容器安全解决方案探讨与研究[J]. 网络空间安全,2018(12):105-113.
[3]CVE-2016-5195.[DB/OL].(2016-5)[2021-5]. https://dirtycow.ninja/.
[4]CVE-2018-1002105 [DB/OL].(2018-11)[2021-5]. https://github.com/kubernetes/kubernetes/issues/71411/.
[5]CVE-2020-8552 [DB/OL].(2020-02)[2021-5]. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-8552/.
[6]Istio自身服务的安全风险 [DB/OL].(2021-05)[2021-5].http://rui0.cn/archives/1597/.
[7]Kubernetes Security 101[DB/OL].(2020-05)[2021-5].https://www.stackrox.com/post/2020/05/kubernetes-security-101/.
[8]OWASP Top 10 Web Security Risks [DB/OL].(2021-1)[2021-5].https://owasp.org/www-project-top-ten/.
福建省教育厅项目-基于Zabbix高校数据中心运维监控平台的构建研究(JAT200213)