1.4.1 如何防护短生命周期的容器
曾有人研究容器的生命周期[4],即从一个容器创建到其销毁的时间间隔(TTL),发现容器的生命周期分布呈三种类型,如图1-4所示。
图1-4 容器的TTL分布
1)虚拟机型。有一小部分容器被当成虚拟机使用,即将本来放置于一个虚拟机中的程序集合部署到单个容器中,那么这些容器的生命周期与虚拟机是相当的,平均在83天左右,最长的为333天。
2)原生型。有一部分容器是以Docker的命令启动和管理的,这部分容器完成独立的功能,因而生命周期在数十天。
3)编排型。还有大量的容器是由编排系统管理的,很多容器根据业务动态生成和销毁,这类容器的生命周期在1天以内。
经过进一步统计发现,46%的容器生命周期短于1小时,11%的容器生命周期短于1分钟。容器安全和虚拟化安全的最大差别看似是隔离技术强度,但其实应是生命周期,甚至没有之一,因为这会影响到攻防双方的战术偏好。
对于攻击者而言,在攻击链的整个阶段,他们是不会优先考虑在容器中持久化的。原因很简单,如果试图这么做,很有可能在数小时或数天内容器就销毁了,持久化的努力也就付诸东流。因而,攻击者会投入大部分精力去攻击更为持久化的东西,如代码、第三方库、镜像等资产。可见,开发安全和供应链安全将是云原生环境中的重点安全措施。
而对于防守者而言,容器的短生命周期、轻量级隔离特性同样存在很大的变数。传统在宿主机或虚拟机上安装杀毒软件的机制对于追求微服务和轻量级的容器而言还是过重了,很难想象在一个运行一两个进程的容器中安装杀毒软件套件,并实时对进程、文件进行查杀。
近年来终端侧兴起了终端检测与响应(Endpoint Detection and Response,EDR)系统,该系统通过捕获终端上的进程行为、状态等日志并对其进行分析和规则匹配,发现终端上的恶意攻击。但在容器环境中,一方面,容器逃逸等攻击手法往往利用操作系统层面隔离的漏洞,与通常终端上的恶意软件攻击手法不同,现有的规则检测不能直接适用;另一方面,容器运行的进程行为与桌面终端有很大的差别,在这种场景中更适合用行为特征对工作负载进行识别,类似于用户和实体行为分析(User and Entity Behavior Analytics,UEBA),不过容器上的日志只能体现短时间内的进程、业务模式,无法通过机器学习等方式对正常模式进行画像,这对于高度依赖客户侧做训练的很多UEBA算法是致命的。
因而,如何防护短生命周期的容器是一个非常重要的问题,解决过程中需要转变很多之前固有的防护思维,具体我们将在第7章进行分析。