Docker容器安全性分析( 四 )


容器内部的数据包经过虚拟网络接口对到达docker0,实现同一子网内不同容器间的通信 。在网桥模式下,同一宿主机内各容器间可以互相通信,而宿主机外部无法通过分配给容器的IP地址对容器进行外部访问 。
由于缺乏容器间的网络安全管理机制,无法对同一宿主机内各容器之间的网络访问权限进行限制 。具体而言,由于各容器之间通过宿主机内部网络的docker0网桥连接以实现路由和NAT转换,如果容器间没有防火墙等保护机制,则攻击者可通过某个容器对宿主机内的其他容器进行ARP欺骗、嗅探、广播风暴等攻击,导致信息泄露、影响网络正常运行等安全后果 。
因此,如果在同一台宿主机上部署的多个容器没有进行合理的网络配置进行访问控制边界隔离,将可能产生容器间的网络安全风险 。
2、MacVLAN
MacVLAN是一种轻量级网络虚拟化技术,通过与主机的网络接口连接实现了与实体网络的隔离性 。
【Docker容器安全性分析】MacVLAN允许为同一个物理网卡配置多个拥有独立MAC地址的网络接口并可分别配置IP地址,实现了网卡的虚拟化 。MacVLAN模式无需创建网桥,即无需NAT转换和端口映射就可以直接通过网络接口连接到物理网络,不同MacVLAN网络间不能在二层网络上进行通信 。
然而,处于同一虚拟网络下各容器间同样没有进行访问权限控制,因此MacVLAN模式依然存在与网桥模式类似的内部网络攻击的安全风险 。
3、Overlay网络
Overlay网络架构主要用于构建分布式容器集群,通过VxLAN技术在不同主机之间的Underlay网络上建立虚拟网络,以搭建跨主机容器集群,实现不同物理主机中同一Overlay网络下的容器间通信 。
与其他组网模式一样,Overlay网络也没有对同一网络内各容器间的连接进行访问控制 。此外,由于VxLAN网络流量没有加密,需要在设定IPSec隧道参数时选择加密以保证容器网络传输内容安全 。
因此,无论采用何种网络连接模式,都难以避免容器间互相攻击的安全风险 。
网络DoS攻击
由于网络虚拟化的存在,容器网络面临着与传统网络不同的DoS攻击安全风险 。Docker容器网络的DoS攻击分为内部威胁和外部威胁两种主要形式 。

  • 内部威胁:针对Docker容器网络环境,DoS攻击可不通过物理网卡而在宿主机内部的容器之间进行,攻击者通过某个容器向其他容器发起DoS攻击可能降低其他容器的网络数据处理能力 。因此,存在容器虚拟网络间的DoS攻击风险 。
  • 外部威胁:由于同一台宿主机上的所有容器共享宿主机的物理网卡资源,若外部攻击者使用包含大量受控主机的僵尸网络向某一个目标容器发送大量数据包进行DDoS攻击,将可能占满宿主机的网络带宽资源,造成宿主机和其他容器的拒绝服务 。
Docker容器安全机制与解决方案
容器虚拟化安全
在传统虚拟化技术架构中,Hypervisor虚拟机监视器是虚拟机资源的管理与调度模块 。而在容器架构中,由于不含有Hypervisor层,因此需要依靠操作系统内核层面的相关机制对容器进行安全的资源管理 。
容器资源隔离与限制
在资源隔离方面,与采用虚拟化技术实现操作系统内核级隔离不同,Docker通过Linux内核的Namespace机制实现容器与宿主机之间、容器与容器之间资源的相对独立 。通过为各运行容器创建自己的命名空间,保证了容器中进程的运行不会影响到其他容器或宿主机中的进程 。
在资源限制方面,Docker通过CGroups实现宿主机中不同容器的资源限制与审计,包括对CPU、内存、I/O等物理资源进行均衡化配置,防止单个容器耗尽所有资源造成其他容器或宿主机的拒绝服务,保证所有容器的正常运行 。
但是,CGroups未实现对磁盘存储资源的限制 。若宿主机中的某个容器耗尽了宿主机的所有存储空间,那么宿主机中的其他容器无法再进行数据写入 。Docker提供的–storage-opt=[]磁盘限额仅支持Device MApper文件系统,而Linux系统本身采用的磁盘限额机制是基于用户和文件系统的quota技术,难以针对Docker容器实现基于进程或目录的磁盘限额 。因此,可考虑采用以下方法实现容器的磁盘存储限制: