就拿Kubered2kas来讲,容器和容器之间的数据网络十分独特。尽管大多数传统IDC内网的技巧仍然可用,但容器技术所构建的是一个全新的内网环境,尤其是当企业采用服务网格等本地云技术进行服务治理时,内网与IDC内网之间的区别就显得尤为明显;因此,了解一下Kubered2kas数据网络的默认设计十分重要,为了避免介绍复杂的Kubered2kas网络知识,我们从攻击者的角度对Kubered2kas数据网络进行简要介绍。
如上边所显示,在我们在Kubered2kes集群中获得某一个容器的shell时,我们默认会访问到以下几个内部数据网络中的目标:在同一个节点上其他容器打开的端口。在其他节点下,其他容器打开了端口。其他节点宿主主机打开端口。当前节点宿主主机打开端口。Kubered2kasSerdubbo可虚拟网络服务端口。其他内部网络服务和端口,可设置主要目标为APISERVER,ETCD,Kubelet,这些。
假如忽略冲突和安装要求,应用masscan和nmap等软件在没有服务网格的容器数据网络中进行服务发现和端口探测,与在传统IDC数据网络中的端口探测相比,差别并不大;当然,由于Kubered2kasSerdubbo虚拟网络出来的服务端口默认情况下并不像容器数据网络那样具有虚拟网络的veth网络接口,因此即使Kubered2kasSerdubbo可以以IP:PORT的形式访问,但无法通过ICMP协议实现Serdubbo的IP发现(Kubered2kasSerdubbo的IP探测意义不大)。另外,假如HIDS、NIDS在解析扫描请求时没有对Kubered2kas的IPIPTunnle进行进一步的解析,则可能会出现某些漏报。
注意:假如Kubered2kes集群应用了服务网格,最多见的便是istio,那样在这个时候,服务网格下的内和内探测的方式会发生很大的变化。请参阅:《腾讯Bluefly:CIS2021-AttackianSerdubboMesh》;由于ISTIO较少与人接触,这里不再展开。同样,我们需要关注多租户集群下的默认网络配置,云产品和开放源码产品在多租户集群下通过容器实现隔离和资源限制的实现并不罕见,例如AzureServerleesens、Kubeless这些。假如直接应用Kubered2kas缺省网络设计,在多租户集群下设计产品,提供客户代码执行权限,即容器权限,这是不合理的,也是十分危险的。
显而易见,客户建立的容器可以直接访问内网和外网和Kubered2kas数据网络。这种情况下,合理的网络设计应该与云服务器VPS的网络设计相一致,内部数据网络的客户和客户不应该相互连接,客户数据网络和企业内部数据网络也应该有一定程度的隔离,上边所显示的所有内部通信路径都应该被切断。假如将所有客户POD放在一个Kubered2kesnamespace下,那就更不应该应用了。