本文来自twt企业IT社区。
引言
由于容器在隔离和安全性方面存在的天然缺陷,随着安全攻防的演练和安全意识的提升,容器的弱安全性和分布式复杂性成为容器企业级应用的阻碍,容器云采用面临着安全挑战。如何使企业在云原生时代具备容器安全防护能力是推进容器云企业级应用的一个重要方面。
一、容器云安全特点
云原生环境下和传统以安全域划分实现安全管控的方法有所不同。网络安全域划分限制了云原生的弹性和扩展性能力。云原生消除了这种硬网络边界,通过软件来定义边界和网络,对网络安全能力、身份认证和权限管控提出了更高的要求。容器云作为云原生应用的部署运维平台,居于云原生技术架构的中心。容器的弹性、生命周期短、轻量和数量众多、故障自愈(异常重启迁移)等也使容器安全具备动态、敏捷迭代、更大攻击面、难以跟踪等特点。
1.动态难跟踪
采用容器最核心的是用其按需弹性伸缩的能力,所以也使容器云环境持续在动态变化中。容器云环境中容器可能不断地被创建和销毁、自我复制、从一台节点迁移到另外一台节点等。这和传统服务器上部署一个或几个固定的应用或组件是不一样的,管理方式也面临着挑战,安全的防护意识和手段也需要变革。动态变化的容器安全除了通过安全左移尽可能消除安全漏洞外,也需要将传统通过防火墙、黑白名单等静态安全防护方式转变为多种手段的实时检测和防护。
2.敏捷迭代
轻量的容器适合承载微服务化应用,以支持应用快速变更、敏捷迭代、弹性可扩展性等需求。采用DevOps化的应用发布非常频繁,可能是传统应用发布方式的几倍、几十倍甚至几百倍等。容器安全漏洞往往通过快速发布一个修复了漏洞的新的版本来替换,而不是为容器安装补丁。提升了业务服务的迭代速度。
3.更大的攻击面
云原生架构体系涉及的技术和组件众多,容器云平台自身也拥有众多的开源组件,这势必会带来很多潜在的风险,比如操作系统内核漏洞、操作系统组件漏洞、log4j漏洞、Jackson Json漏洞、k8s漏洞、SpringCloud漏洞等。另外,很多企业的镜像都是来自于互联网,这些镜像往往本身就存在很多漏洞,有的甚至被注入木马;微服务化使镜像和容器的数量成倍的增加,也就使暴露的漏洞数量成倍增加;容器云大二层网络模式更暴露了大量的业务IP,带来了更大的攻击面。
4.更多风险来源
由于镜像来源于不同的地方,特别是很多企业供应商众多,开发人员数量庞大,很多基础镜像来源不明,可能存在很多风险,镜像扫描虽然可以消除大部分漏洞,但一些经过处理隐藏的文件可能难以被探测到。另外由于容器云平台存在更大的攻击面,其潜在风险就可能数倍增加。
容器云安全特点也使容器云平台的建设和运营面临着安全防护意识和安全防护方式的挑战。
二、容器云安全挑战
1.安全防护意识挑战
相对于传统网络分域安全管控,云原生的大一统网络模式模糊了安全边界概念。如果要实现容器云平台的弹性伸缩、自由扩展能力,在网络层和资源层就不能有那么多限制,网络边界不能划分的太细。当前由于攻防演练等要求,企业内部物理网络安全域有划分的越来越小的趋势,导致很多公司在不同的安全域安装容器云集群,也使集群数量倍增,但每个集群都不大,资源有限,做不到合理弹性;另外需要在众多的防火墙上配置端口访问权限,使容器云管理变的复杂化,使业务访问效率和交互性能下降。
笔者分享过容器云安全意识所面临的挑战,需要认识到传统网络安全和云原生安全的不同,尽可能减少风险接触面;同时需要认识到架构发展的趋势,以融合架构逐步引领单体竖井架构转型,实现企业级复用;通过安全等基础设施自服务化来赋能研发和业务团队,促进企业DevOps组织团队的建设和优化,从而协调生产关系适应生产力的发展。
只有想不到,没有做不到。安全意识的提升和变革是最难的。特别这么多年固有的思维方式,以及变革可能带来的不稳定和风险,都会阻碍新方式和方法的采用。
2.安全防护方式挑战
容器云安全防护方式也不同于传统网络安全的被动防御,需要从被动转换为主动防护,从静态检测转变为交互式检测。容器在带来弹性可扩展性等便利的同时,也封装了内部逻辑,对很多人来说是一个“黑盒”,如果仅采用传统的镜像文件静态扫描,很难发现容器运行时的危险操作。
容器云主动的防护方式,首先可以利用安全左移思想,将安全隐患尽可能消除在开发阶段。但安全左移不是说不重视容器运行时环境,运行时的安全措施一点也不能少。安全左移重要的一点是提升研发的安全意识,减少引入不必要的漏洞。其次,安全能力可以作为一种基础设施,提供安全自服务能力,赋能应用研发和运维团队,降低安全应用门槛。比如说,容器pod运行时危险命令执行、敏感目录挂载、异常流量或异常访问等可以通过权限管控直接让应用研发和应用运维人员可见,这样也可以快速定位问题。
面对云原生环境下和传统网络环境下并存的容器云环境安全挑战,不少的企业和组织也提供了很多的方案、很多的安全框架及安全模型。在安全攻防应对上,当前Att&CK框架比较受关注。
三、ATT&CK框架
ATT&CK框架由美国研究机构MITRE在2013年提出的,它将已知攻击者的行为汇总为战术和技术的结构化列表,相对全面的呈现了攻击者在进行网络攻击时所采取的行为和技术,对于企业进行安全攻防建设具有非常重要的参考价值。(读者有兴趣可以搜索“ATT&CK”以获取更多更深入的内容。)
ATT&CK也对比了众多的报告,列出了攻击者最常用的攻击手段,另外Red Canary也基于客户环境发生的恶意事件的分析提出了供给者常用的攻击手段,结合两项分析结果,可以看到常用的攻击技术有PowerShell、脚本执行、命令行界面、注册表Run Keys/启动文件夹、伪装、混淆文件或信息、凭据转储等。我们在建设容器云平台的时候,就要求禁用命令行操作,不提供终端工具,所有的操作通过平台界面完成,这样可以有效的进行操作审计,规避误操作等问题。
四、容器云安全攻防应对
ATT&CK框架有数百种攻击技术,并且可能随着技术应用和发展而不断开发出新的技术,作为容器云安全攻守的守方,该如何应对?知己知彼,是安全应对的第一步。
1.知己知彼
容器云安全攻防应对中,知己首先要对容器云上的相关资产进行梳理。容器云平台自身可能实现了部分能力,但往往并没有全面梳理资产,很多资产不可见。比如说每个容器创建了多少进程,如果看不到,就无从监控和应对。容器云平台安全首先要对容器相关的资产从不同的视角进行梳理,做到可见、可管理。
知彼是要对攻击者的手段有所了解。ATT&CK的战术和技术框架给我们了一个非常好的参考。通过ATT&CK框架可以了解到哪种战术有哪些技术手段,从而根据自己的资产和技术能力选择合适的架构和方案。
2.选择合适的架构和方案
笔者在规划容器云安全架构时,定义了纵向分层、横向分段的安全网格方案(可参考:《基于容器特点和传统网络安全能力进行容器云安全规划设计》),对容器云平台不同点的安全问题更有针对性地采取合适的安全措施。其实这和ATT&CK的战术和技术框架有点类似。安全涉及方方面面,既需要整体的规划实现协作关联、也需要每一个点实实在在的防护措施。比如说,镜像漏洞问题,既需要在开发阶段选择安全的基础镜像和构建安全合规的服务镜像,通过安全扫描,满足合规要求才能上传镜像库。但如果不按要求绕过流程直接上传镜像到镜像库,甚至直接上传镜像到容器节点,可能会带来一些风险。因此在不同的点位都需要安全检查:代码安全检查、流水线镜像安全检查、镜像仓库镜像检查、节点镜像检查、容器运行时镜像检查等。
容器云安全分层中,可以把业务服务、租户用户的访问控制和k8s层的认证授权关联起来,明确层次之间映射的关系。很多人不在k8s层创建ServiceAccount,直接用Apiserver的admin账号,这会存在隐患。有Apiserver的admin权限,就可以查看集群内所有的资产和资源,也就失去了通过命名空间进行隔离的意义,所有的服务都可能被泄露。
3.选择合适的应对技术
通过安全网格划分,可以有针对性地选择合适技术,提升安全能力,增强检测和应对能力。容器云平台有众多的开源组件和服务,攻击面庞大,比如说网络、主机节点、存储,容器运行时,镜像,编排及组件安全,应用、数据等。针对ATT&CK框架每项攻击技术MITRE也提供了应对方法Shield防御技术,比如说”进程发现“,可以通过隐藏主动防御进程和进程诱饵来吸引攻击者,获得攻击者信息以便进一步采取措施。
4.持续演练、总结和改进
攻击的手段层出不穷,只有熟悉攻击的手段和方法,持续的监控和响应,才能构建坚实的防御。有条件的情况下可以尝试不断进行攻防演练,总结不足,持续的改进完全弱点,才能不断地增强安全能力。有时候可能牵一发而动全身,所以也往往不愿意去动它。但这种隐患会一直存在,很难说在某个时刻会带来损失。因此,最好的的方法是持续去发现安全问题,并修复这些问题。
云原生时代,在利用容器的优势的同时,容器云安全面临着众多的挑战。认识到容器云的安全特点并选择合适的技术架构、方法和手段来持续增强容器云安全能力,应对潜在安全风险和攻击行为,也是采用容器云平台需要重点考虑的一个方面。