容器,是未来IT创新和数字化转型第一驱动力,这几年已经成为开发人员最爱。容器构造之精密,丝毫不亚于建筑大师蜜蜂所造蜂房。正如达尔文赞叹蜜蜂的巢房是自然界最令人惊讶的神奇建筑,蜂房是自然界最经济有效的建筑。在这里,青藤推出“蜂巢之声”栏目,和大家讲讲堪比大自然鬼斧神工般的容器,其安全该怎么做?
创新互联是一家集网站建设,新华企业网站建设,新华品牌网站建设,网站定制,新华网站建设报价,网络营销,网络优化,新华网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。虽然现在容器的使用率还不是特别高,但是许多组织机构也正在加速采用容器,容器化是未来发展的所趋。根据Gartner预测,到2023年将有超过70%组织会在生产环境中运行超过3个容器应用程序。如下图所示,越来越多组织将采用容器化部署应用,对超过一半的应用程序进行容器化处理的组织百分比从23%增至29%,增长率为22%。同时,将少于10%的应用程序打包的组织的数量从32%下降到21%。
容器化部署应用程序占比
但是,开发人员常常用不安全的方式来部署容器,而安全团队却很少或根本没有机会参与。如何让容器更加安全使用?
一、安全左移和自动化是容器安全前提
在当今快节奏的容器DevOps中,部署容器时,安全人员必须注意容器共享OS内核带来潜在风险、镜像漏洞、错误配置、容器间网络流量问题。不管是防火墙还是入侵防御系统,并不适用于容器环境。
此外,随着现代环境越来越多地由软件控制,并实现了自动化,停止作业进行安全评估已不再可行。标准的做法是尽可能地将安全融入生产,并且通过微服务进行快速迭代。
安全左移
现在容器镜像是由开发人员构建的,因此,开发人员承担了许多其他职责。开发人员对以前由其他团队处理的活动所具有的控制权越来越多,包括一部分测试和运营。
无论是在测试环境中还是在生产环境中,由开发人员构建的容器镜像的运行方式都是相同的。因此,容器镜像必须是独立的而且适配各类环境,只需配置好与容器相关的安全和加固策略,适当调整可与生产资源连接的基本操作系统即可。
因此,容器安全必须左移,从代码编写和编译时就要确保容器安全。如果在生产过程中解决安全问题必然会产生大量浪费,因为修复发现的问题就要终止创新管道,并将容器返回到开发阶段。
自动化
容器是DevOps实践承载方式之一,微服务事实上成为新应用程序体系结构。借助容器化微服务,不同的开发团队通过为每个微服务建立并行开发管道,可将创新速度提高十倍以上。
当这些微服务投入生产时,编排软件可以对其进行部署和管理。编排软件是基于策略来运行的,从而让容器部署实现远超人工可以实现的效果。这就有效地让人员从容器化生产环境运营中抽出身来,让他们能够进行策略制定和监控异常。这就意味着支持自动化、API和策略运行,从而让容器具有自行评估和采取措施的能力。
二、全生命周期方案
构建阶段
(1)安全镜像扫描
通常,容器镜像是从根镜像的基础上构建出来的,根镜像提供了操作系统组件和应用程序中间件(例如node.js或Tomcat)。然后,开发人员通过自己的代码对根镜像进行拓展,形成微服务的应用程序结构。一般情况下,无需修改即可直接使用Kafka或Vertica等应用中间件。
但是,如果是从Docker Hub等公共仓库获取根镜像时,开发人员无法了解那些未经测试和未经验证的根镜像究竟会带来哪些安全风险。因此,需要通过容器镜像扫描,检测是否包含了常用漏洞和风险(CVE),减少最终容器镜像的攻击面。
正确的镜像扫描应包括以下几个级别:
·进行镜像扫描,检查根镜像,检测开源镜像库中是否有已知的第三方漏洞。
·对配置和部署脚本进行静态扫描,及早发现错误配置问题,并对已部署的镜像进行动态基础架构加固扫描。
(2)对受信镜像进行签名和注册
在查看容器镜像时,确保已对其进行了扫描和测试以确保安全。了解这一点很重要,因为这会影响下一个阶段(例如转移到生产环境中)的其他检查点。
在成功进行镜像扫描和创建安全评分后,可以对容器镜像重新签名,包括安全评分和测试结果,标明该容器镜像已经过测试并达到特定的安全状态等级。
(3)观察应用程序行为
当开发人员通过许多容器化的微服务形成其工作负载和应用程序时,网络将成为应用程序结构。网络动态绑定所有微服务。以前,所有逻辑都是在编译时绑定的。现在,微服务是解绑的,并根据需要在运行时与其他服务形成连接。
当然,判断正常行为和异常行为并非易事。将一个应用程序分解为可服务多个应用程序的微服务时,威胁建模要困难得多。建议在开发和集成时观察微服务架构,了解哪些是正常行为,这有助于威胁建模。在生产中,可通过威胁模型检测异常行为,进行隔离。
分发
(1)审核已知内容
随着容器镜像从一个镜像仓库迁移到另一个镜像仓库(不管是内部还是外部运行的),遇到包含未知漏洞的镜像风险都会增加。容器安全系统需要在通过容器镜像仓库时验证容器镜像,一旦发现不合规情况,就要拦截和隔离相关镜像。
每次将容器升级到新状态时(例如,从开发到测试或从测试到生产),都应执行额外的强制措施,以确保在上一阶段为了方便进行调试/监视/基准测试而添加的任何配置不会随容器本身而进入下一个阶段。
(2)审核风险评分
容器和镜像层的安全策略非常广泛,因此,很难设置一个人为管理的统一且易于维护的安全策略。对安全策略进行编码,对每个检查点的每个容器镜像生成一个风险评分,这样就可以实现容器生命周期的标准化,并对每个重要的检查点中设置低安全阈值,如果没有达到低水平,将对容器生命周期进行控制。
风险评分还有助于促进Dev、Sec和Ops的协同合作,因为这个统一的风险评分是对这三方的综合评分,这有助于促进不同团队和专业人士保持统一行为。
部署
(1)自动部署
开发人员正在以不断加快的速度创建容器格式的微服务。不仅DevOps管道难以管理,而且在生产环境中,在调度和编排方面,人工操作要让位于机器操作,因为编排和调度程序可以实现容器化微服务的自动化部署。编排程序可以比人做出更好的布局和扩展决策,因此,可以统一稳定地实施安全策略。
为了将管理良好的安全状态始终维持在一个可接受的水平上,要将容器安全软件与部署系统联系起来,以便您按统一方式遵守安全策略。
基于基础架构即代码(IaC)原则,要对所编写的、支持自动化部署任务的代码进行扫描和验证,按照应用程序代码级别,发现代码中存在的漏洞。
(2)安全基础架构
在主机上部署干净无漏洞的容器仍然会有安全风险,需要实施相关的加固实践,否则,针对流氓容器的保护就太少了。例如,以CIS基准或公司加固策略为基准,查看与加固实践存在哪些偏差;向管理员发出警报,并为容器化的基础架构提供安全评分。
(3)用户和机器审计
通过完整的审核跟踪,团队可以调查导致安全事件的原因,并据此采取补救措施并实施新的安全策略。这就需要知道谁做了什么,哪个容器编排程序将哪个镜像部署到了物理或虚拟主机,或者为什么阻止了容器镜进行部署或访问给定资源。
容器安全系统需要与人为操作系统和机器操作系统连接起来,对容器基础设施上发生的所有事件创建准确的审计跟踪,并记录其自身的行动和活动。
运行
(1)秘钥管理
在很多系统中,密码和安全令牌之类的秘钥是安全系统的一个重要组成部分。在主机上部署容器镜像或访问基于网络的资源时需要这些秘钥。若将秘钥存储在容器或环境变量中,所有有权访问该容器的人都会可以看到。
容器系统要求在进行操作(例如容器部署)时使用秘钥。因此,容器安全系统通常需要访问秘钥系统,在容器命令中注入正确的秘钥进行部署和运行。因此,容器的秘钥管理需要采用专门解决方案。例如,与HashiCorp的Vault之类的秘钥系统集成后,仅特定用户和容器可以访问特定秘钥。
(2)与主机隔离
在主机上运行的容器可能会访问主机资源,例如计算资源、存储资源和网络资源。此外,由于容器通常包含微服务,因此从本质上讲,容器应仅限于一些特定任务,并且每个容器通常负责的任务只有一个。
一旦流氓容器获得对主机资源(尤其是网络)的访问权限,就可以从网络上获取更多资源,进一步渗透到其他主机和系统。应该限制正在运行的容器的访问权限,并且这些容器只能使用已批准的特定主机资源,从而限制其对主机和网络的影响。
(3)容器网络安全
一台主机上有多个容器,每个容器都与同一主机或基于网络的服务上的相邻容器进行交互,仅依靠网络安全措施是不够的,因为主机内部发生的一切对于这些解决方案都是不可见的。
容器安全解决方案需要更靠近主机上发生事件的地方。比如,通过容器化的agent,它会监控所有主机网络活动,主机上运行的容器的流入和流出,并观察容器是如何与不同主机的另一个网络进行交互的。了解了网络交互情况之后,可以通过网络流量加固活动来阻止任何异常活动。
应根据在构建阶段进行的威胁建模,预先规划适当的网络分段,并对其进行实施和验证,确保失陷容器尽可能少地影响其他网段,而不会对整个网络造成重大影响系统。
(4)应用程序配置文件加固
应用程序架构是由众多微服务构建而成,每个微服务都具有一个或多个实例,可以实现弹性扩展。应用程序架构中的容器在不断发生变化,主要由编排产品来实现的。
因此,想要维持正确的应用程序拓扑和观察异常行为也愈发困难。例如,异常行为可能是由软件缺陷带到了生产环境中造成的,也可能是通过第三方开放源代码库渗透的恶意代码引起的。
建议,在开发阶段捕获正常的应用程序拓扑和行为,然后将其用于与生产环境的实际行为进行对比,从而发现异常情况。另外,可以先让应用程序运行一段时间,确定在生产环境中的预期应用程序,然后再捕获哪些属于正常网络行为,并将其另存为正常应用程序行为配置文件。
三、写在最后
从简单的应用容器化,到云原生应用的开发,容器技术成为了其最基础也是最核心的支 撑技术。新技术带来便捷与利益的同时,其安全性也需要引起足够的重视。近年来,由于容器以及容器应用环境引发的安全风险与安全事件不断的被曝出,容器网络、容器镜像、暴露的 API、容器的隔离等问题成为了容器使用时需要着重考虑的问题。
目前,市场上涌现了一批容器安全产品安全厂商,如Twistlock、Aqua等等,国内自研容器安全产品的则有青藤云安全。基于青藤Agent的主机防护能力,监控宿主机上容器相关的文件、进程、系统调用等等信息,增加其Agent中对于容器的清点、监控、防护能力,以实现一个Agent,实现宿主机安全、容器安全两种防护的效果。