对于容器而言,由于底层的基础架构非常复杂,稍有不慎,就可能会带来严重的安全后果。因此,在享受容器带来便捷性红利之前,如何让容器“不裸奔”,这成为了容器推广普及一大障碍。
当然,确保容器安全是一个持续的过程。像其他测试和质量控制措施一样,应该将安全集成到开发过程中来,尽可能实现自动化,减少手动处理的工作量,同时,安全还应该扩展到底层基础架构的运行与维护当中来。
青藤蜂巢,在对容器安全进行深入研究之后,正式提出容器安全“五个保护”:
●保护容器主机的安全
●保护容器网络流量安全
●保护容器中应用的安全
●保护容器管理技术堆栈
●保护构建管道的完整性
图1:一站式容器安全解决方案
保护容器主机的安全
要保护主机安全,首先要保护主机操作系统。应尽可能使用经过优化的分布式操作系统来运行容器,例如Container Linux、RancherOS、Ubuntu Core、Google的Container-Optimized OS或RedHat Atomic等发行版本。这些发行版本都已经删除了可有可无的服务,优化了性能并减少了攻击面。如果使用常规Linux发行版或Windows系统,则通常需要禁用或删除不必要的服务并加固操作系统。
然后添加主机安全产品,确保主机按预期状况运行,实时监控主机风险状况包括漏洞、不合规配置、弱密码等等,还需要实时进行入侵检测,在入侵行为尚未造成危害之前及时发现和响应。
监控容器网络流量安全
容器投入生产后,需要与其他容器和资源进行交互。进入网络的流量通常会受到其他安全控制措施的保护。部署在网络边界处的Web网关和IPS具有一定的过滤功能,可以防止发生直接攻击或尝试进行水坑攻击(先攻击某项服务,然后攻击其访问者)。
关于容器流量的另一项安全挑战是监控和保护容器之间的流量。攻击者在系统中找到一个立足点后,就会迅速进行横向行动,扩大影响范围。比如主机A的Apache向主机B的MongoDB请求数据;同时也有可能是主机内部容器之间的流量,比如主机A内部的Apache服务器请求主机A内部的MongoDB的流量。
为应对这类威胁,目前有两种入侵防御方案,一种是在网络边界处部署IPS设备,另一种是以软件形式在物理主机上部署入侵防御软件。但是部署在边界处的IPS无法监控主机内部容器之间的流量,部署在主机内部IPS软件,也无法对跨主机的容器之间的流量进行入侵防御。
针对容器东西向流量入侵防御,以docker为例,目前有一种方式是在物理主机内部连接容器的网桥上设置Netfilter钩子,利用钩子截获所有进出容器的东西向流量。对截获的东西向流量进行清洗,判断所述东西向流量中的报文是否属于恶意流量。若属于恶意流量,则阻止相关连接。
图2:监控容器流量
保护容器管理技术堆栈
在容器部署问题,通常会使用两个关键基础设施,即私有容器镜像仓库和容器编排工具Kubernetes。
容器镜像仓库是用于搜索、存储和分发容器的,简化了容器的共享工作,并帮助团队充分利用彼此的工作成果,提高了工作效率。为了确保每个容器都符合开发和安全基准,需要对容器镜像实时进行漏洞扫描。在将容器镜像推送到镜像仓库中去之前,要先对容器镜像进行漏洞扫描,查看是否存在已知漏洞、恶意软件以及明文秘钥,这样有助于减少下游的安全问题。此外,还需要确保镜像仓库本身也采取了良好的保护措施。镜像仓库应该运行在加固系统或信誉良好的云服务之上。
Kubernetes是一款复杂的容器编排工具,让企业实现了应用的自动化部署,给企业带来了巨大的业务收益。从安全角度来看,Kubernetes还提供了实现许多运营和安全控制的功能。实施Pod(集群级别的资源)和网络安全策略后,可以采用不同方案来满足风险承受能力。
保护容器中的应用安全
在构建一款应用时,开发人员很少会从头开始。通常的做法是从一个现有容器着手,例如像Ubuntu或CentOS这样的低层容器,或者像node或nginx这样的更高层容器,或者是组织机构自定义的容器。不管选择在哪个容器上构建数据,关键是要确保构建应用的底层容器基础是安全的,不会给数据造成风险。
从首选镜像仓库中拉取镜像部署容器时,也是如此。需要有一个相应的工作流程,确保使用的容器安全可靠,可抵御常见威胁。为此,需要进行容器镜像扫描,扫描容器的内容,查看是否存在任何问题,然后再用于构建应用。在投入生产之前,还要进行最后的安全检查。
进行镜像扫描主要是为了查找恶意软件、已知漏洞以及任何秘钥或机密信息(例如应用程序编程接口(API)密钥和令牌),以便在继续开发应用之前降低风险。这一步可确保在安全容器基础之上构建应用。
镜像扫描功能不仅限于确定使用的容器基础是安全可靠的,还应该成为编码流程不可或缺的一部分。这是一个完全自动化的过程,可以快速轻松地识别开发应用和容器时遇到的任何问题。在开发过程的早期阶段捕获漏洞、恶意软件或明文秘钥之类的问题,更易于解决并节省您的时间。
虽然一旦将应用构建到容器中并部署到生产环境中,就不会再发生变化。但是,容器投入生产运行后,是会实时发生变化的。容器会产生应用数据,生成日志文件、缓存文件等等。
安全监控软件,包括有助于确保在容器中开展的活动中是否存在一些风险。例如,如果存在漏洞,则安全引擎可以检测是否有人在尝试进行漏洞利用,并通过丢弃数据包来保护应用。
确保构建管道的完整性
除了容器环境之外,容器构建管道也日益成为攻击者的目标。攻击者已开始将攻击转移到持续集成/持续交付的早期阶段(CI/CD)管道。如果攻击者攻陷了容器构建服务器、代码存储库或开发人员工作站,那么攻击者就可以在组织机构的环境中驻留很长时间。因为大多数安全程序不会主动监控这些关键资源。
对此,第一步是确保这些系统具有强大的安全控制措施,并进行随时更新。组织机构的代码通常是其最具价值的资产之一,因此,需要保护代码的安全。
第二步是在整个管道中实施强大的访问控制策略。这可以从代码存储库和分支策略着手,一直扩展到容器存储库。这需要确保实施最小特权原则(仅提供完成任务所需的访问权限)并定期审核该访问情况。
总结
对于容器安全而言,从来都没有一个解决方案可以作为万能良药。尽管容器本身很简单,但容器底层的基础架构会越来越复杂。这就需要像关键资产一样,了解、监控和保护基础架构。毫无疑问,各大企业可以从容器技术中受益,但与任何新技术一样,必须制定强有力的“由外而内”安全计划,自动化实现容器以及容器构建管道的安全。
来源:freebuf.com 2021-05-21 10:05:06 by: 青藤云安全
请登录后发表评论
注册