
◎系统权限(Capability):root用户拥有全部的权限,以root身份运行容器很危险;但如果以非root身份在后台运行容器的话,由于缺少权限会处处受限,系统权限机制可以提供细粒度的权限访问控制,控制容器运行所需的root用户权限,即使攻击者取得了root权限,也不能获得主机的较高权限,将会限制进一步的破坏,如图3所示。

3.2 容器隔离
Linux通用安全技术为容器提供了基础隔离,但未实现100%隔离。安全容器通过增加额外的隔离层可以进一步增加容器的安全性。它是一种容器运行时技术,为容器应用提供一个完整的操作系统执行环境(常常是 Linux ABI),将应用的执行与宿主机操作系统隔离开,避免应用直接访问主机资源,从而可以在容器主机之间或容器之间提供额外的保护。
gVisor和Kata Containers是两个有代表性的安全容器实现,其中Kata Containers通过使用硬件虚拟化,利用轻量级的虚拟机为容器提供隔离,每一个Container/Pod运行于独立的虚拟机上,它们不再从主机内核上获取相应所有的权限,Kata Containers结构及原理如图4所示,与VM一样能提供强隔离性。

3.3 镜像安全
作为容器运行的基础,容器镜像的安全在整个容器安全生态中占据着重要位置。容器镜像由若干层镜像叠加而成,通过镜像仓库分发和更新。因此,可以从镜像构建安全、仓库安全以及镜像分发安全3个方面实现镜像安全。
◎镜像构建安全:在构建镜像时,验证所依赖镜像的完整性和来源,只安装必要的软件包,使用恰当的指令,缩小攻击面,并利用加密技术,保护好密码、令牌、密钥和用户秘密信息等。
◎镜像仓库安全:镜像仓库分为公共镜像仓库和私有镜像仓库,使用的公共镜像仓库应为官方发布的最新版本镜像,对下载的镜像要经过漏洞扫描评估,并保持定时更新。对于私有镜像仓库,一方面保持仓库自身的安全性,如在使用时要配置相应的安全证书;另一方面使用镜像过程中,利用用户访问权限控制确保交互过程的安全性。
◎镜像分发安全:在镜像下载和上传时,利用数字签名和https来保障容器镜像的完整性和机密性,抵御中间人攻击等威胁。
3.4 访问控制
网络的基本防护手段是隔离和访问控制,容器网络防护可使用容器环境自身安全机制或第三方微隔离产品。对于K8S网络,其自身安全策略对每个Pod的入口强制执行访问控制,从而能够隔离高风险的微服务,但Pod内容器间通信和离开Pod的出口流量无法控制。第三方微隔离产品可以比K8S更详细地记录出入网络连接、深入检测网络中威胁和攻击、检测数据泄露,以及实现7层微隔离和网络可视化。
3.5 运行环境加固
利用安全基线对容器主机和K8S进行安全检查和加固,将会进一步增加容器的安全性。CIS发布的Docker基线已成为Linux主机配置和Docker主机加固的最佳实践。通过创建一个特权容器,将Docker主机安全配置与CIS基线进行对比,可以发现安全问题并实施加固。同样,CIS也发布了K8S基线,传统的漏洞扫描工具和独立的容器安全产品(如Aqua Security和NeuVector)已经在GitHub上发布了脚本,可实现自动化的K8S安全检查。
4 容器安全实践
随着DevOps兴起,软件开发人员与运维人员之间紧密合作,通过自动化流程来完成软件开发、测试、发布和维护,整个过程更加快捷、频繁和可靠,缩短了软件上线时间,减少了很多重复性和人工工作。现在,针对容器安全风险,已经形成了多种安全控制措施,如何将它们融入DevOps中高效保护应用系统,是容器安全实践需要考虑的首要问题。
为此,我们秉承DevSecOps理念,提出了容器全生命周期安全保护方案,该方案利用容器安全管理系统,通过容器编排技术将安全容器部署于容器环境中,进行持续的检测和分析,实现容器环境的资源可视化管理、镜像风险管理、容器运行时安全管理、合规性检测和微服务API风险管理,最终保障容器在构建、部署和运行整个生命周期的安全。
4.1 总体架构
容器安全防护方案采用模块化和分层设计,通过与容器运行环境进行对接,实时获取容器环境中的镜像和容器等对象的相关信息,利用各种安全能力进行监控和分析,实施统一的安全管理,最后通过图形化方式为用户展示容器环境的安全态势,如图5所示。

◎安全管理层:负责安全管理功能,包括容器环境的资产管理、策略管理和安全能力管理等,通过安全能力适配将各种管理信息下发给各种安全能力,以及收集各种安全信息,经集中分析和处理后,集中对用户展示容器环境的主机、容器、镜像和网络等对象的安全状态。
◎安全能力层:负责提供具体安全能力,为容器环境提供安全保护,安全能力涉及系统安全扫描、镜像文件分析、恶意文件分析、入侵检测和微隔离等。