阅读: 10
一、概述
近年来随着云原生服务的大规模应用,互联网上暴露的相应资产越来越多,通过网络空间测绘技术可对暴露的资产进行数据统计及进一步的分析,从而有效赋能态势感知、漏洞预警、风险溯源等技术领域。
笔者近期针对云原生各类服务进行了具体的测绘分析。本篇为云原生服务测绘系列的首篇,主要从资产发现、资产脆弱性和漏洞介绍、资产脆弱性发现三个维度分析了我们日常使用的Docker及Kubernetes服务所存在的风险。针对Kubernetes服务,由于其主要暴露资产的方式是通过API Server,Kubelet以及Kubernetes Dashboard组件,考虑到这几个组件的脆弱性、资产指纹均不一,但又与Kubernetes服务有着紧密的联系,故笔者将分别对这些组件进行介绍。最后笔者针对每个组件提供了一些安全建议,希望各位读者通过阅读此文可对云原生服务风险暴露有更清晰的认识。
注:文中统计的测绘数据为近一个月的国内数据,相关技术仅供研究交流,请勿应用于未授权的渗透测试。
二、Docker资产风险测绘分析
2.1 Docker资产暴露情况分析
借助测绘数据,我们可以了解到国内Docker资产地区和版本的分布情况,笔者也以这两个维度为各位读者进行介绍。
2.1.1 Docker资产地区分布
笔者从测绘数据中得到Docker相关资产共179条数据,地区分布如图1所示:
以上Docker资产暴露的情况笔者进行了统计,如下表所示:
端口 | 资产数 |
2375 | 100 |
2376 | 13 |
其它 | 66 |
从以上数据我们可以看出,国内暴露的Docker资产多数来源于北京市、上海市、广东省、浙江省,其中北京暴露数据量最大;端口则主要分布在2375端口和2376端口,其中2375端口数量最多。
2.1.2 Docker资产版本分布
通过测绘数据,笔者对国内暴露的Docker资产版本进行了分析,其分布情况如图2所示:
从上图可以看出,近50%的Docker资产未获取到具体版本,剩余50%可统计的Docker资产版本中,v1.13.1版本暴露最多,约占已知版本资产总数的33%,第二暴露多的版本为18.09.7,约占已知版本资产总数的10%。
2.2 Docker资产脆弱性和漏洞介绍
2.2.1 脆弱性介绍
通过测绘数据,我们得知暴露的Docker资产端口主要为2375、2376端口,这两个端口为Docker的TCP Socket端口,在版本较新的Docker中,Docker守护进程默认不会监听TCP Socket。用户可通过配置文件来设置Docker守护进程开启对TCP Socket的监听,默认监听端口通常为2375。然而,默认情况下对Docker守护进程TCP Socket的访问是无加密且无认证的。因此,任何网络可达的访问者均可通过该TCP Socket来对Docker守护进程下发命令。2376端口用于与Docker守护进程进行TLS通信,因此需要配置证书才可实现通信加密,默认不开启。
若开放了2375,2376(未配置证书)端口,以下命令能够列出IP为192.168.1.101的主机上的所有活动容器:
docker -H tcp://192.168.1.101:2375 ps
docker -H tcp://192.168.1.101:2376 ps
显而易见,攻击者也能够通过这样的TCP Socket对目标主机上的Docker守护进程下发命令,从而实现对目标主机的控制。控制方式与通过Unix Socket的控制类似,只是需要通过-H tcp://参数来设置目标地址和端口。
2.2.2 漏洞介绍
Docker自2013年发布以来,共曝出34个漏洞[2],根据CVSS 2.0标准,其中含高危漏洞9个,中危漏洞7个,中高危漏洞类型以容器逃逸、命令执行、目录遍历、权限提升为主。
更多内容各位读者可以参考CVE网站对Docker漏洞的统计,此处由于篇幅原因不再赘述。
2.3 Docker资产脆弱性暴露情况分析
借助测绘数据,笔者从Docker脆弱性及CVE漏洞维度,统计了现有暴露资产的漏洞分布情况,如图3所示:
可以看出,在国内互联网暴露的179个Docker资产中,有81个资产被曝出含有未授权访问脆弱性,57个资产被曝出含有CVE-2021-21284漏洞, 53个资产被曝出含有CVE-2020-27534漏洞,49个资产被曝出含有CVE-2019-14271漏洞,其中每个资产可能命中多条CVE。
值得一提的是,早在2018年绿盟科技发布的《容器安全技术报告》[1]中已针对全球范围内5-7月暴露的Docker资产(2375端口)进行了分析,其中中国地区共暴露197个资产,与本次Docker的测绘数据(2375端口)量对比多出近一倍,由此我们可以看出,经过三年半的时间,2375端口的暴露量在不断减少,从侧面也可以反映出Docker用户的安全意识在不断增强。
2.4 安全建议
- 建议不开启2375端口远程监听
- 使用Docker的TLS端口(2376)并为其配置证书
- 应用CIS Docker Benchmark最佳实践[3]
- 根据官方通告及时升级版本,更新补丁
三、Kubernetes资产风险测绘分析
3.1 Kubelet
Kubelet 是在Kubernetes集群中每个节点上运行的代理组件,它是工作节点上的主要服务,职责为定期从Kubernetes API Server组件中接收�