目前市场上总共有40000多个独立的容器托管平台,这些平台具有默认的容器配置,可以快速被识别。Kubernetes和Docker容器平台各自都有超过20000个独立的容器。但这并不一定意味着这4万多个平台中的每一个容器都容易受到攻击,甚至是敏感数据的泄漏。另外,云服务中看似简单的错误配置可能会对组织造成严重影响。例如,Docker Hub丢失的19万个帐户的密钥和令牌就是攻击者利用云环境中的密钥和令牌存储的弱安全配置的结果。还有-Ladders(美国最受欢迎的招聘网站)在今年发生了超过1370万用户信息被泄露的事件,原因就是基本容器配置错误。

在本文的研究中,研究人员能够使用简单的搜索词轻松地在全球找到20353个Kubernetes容器。这些容器位于美国、爱尔兰、德国、新加坡和澳大利亚,其中绝大多数托管在Amazon上。研究人员还能够使用简单的搜索词轻松地在全球找到23354个Docker容器,这些容器分别托管在中国、美国、德国、香港和法国,其中绝大多数托管在Amazon上。

然后,研究人员对这些暴露在网络中的容器进行了进一步的研究,以了解哪些服务被暴露,哪些信息被泄露。研究人员发现这些网站不但向公众公开了数据库实例,而且还公开了个人信息。

下面的研究重点介绍了Unit 42对错误配置容器的研究结果、识别公开服务的方法以及保护容器服务的缓解措施。在本文中,研究人员将识别容器服务中常见的错误配置。这允许研究人员的读者以一种更安全、更私有的方式部署他们的容器平台结构,从而避免了研究人员在本文中介绍的数据收集方法。

云服务

云服务可以是通过互联网连接提供的任何服务,云服务允许组织快速部署、维护和支持需要专用服务可用性的项目,这些服务可能会在其设计的服务产品中遇到需求波动,常见的例子有API网关、web服务和数据库。受管理的服务提供商或自助服务的内部组织促进了多个编排平台,这些编排平台为容器提供了配置功能,并可以为平台提供策略执行。此功能涵盖安全性或审核日志记录,基于角色的访问控制以及针对云基础架构的网络连接强制实施。选择合适的编排平台或服务提供商可以极大地帮助云容器的安全。

通过Shodan能发现什么线索?

为了确定哪些云服务和容器平台暴露于外网中, Unit 42使用了Shodan。虽然本次研究的重点不是识别物联网设备,但一些相同的技术可以用于识别连接到外网的云系统和容器。与物联网设备一样,容器也与互联网相连,并可能因配置不当而被公开曝光。

Shodan会不断地扫描可公开访问的网络地址空间,进行请求,然后记录每个特定地址的每个端口或服务的响应。响应被保存到数据库中,然后提供给Shodan成员。Shodan提供了增强的系统分析、服务分类和标记特性等服务,这些服务提供了对每个识别系统的功能和范围的进一步了解。其中一些数据可以通过免费的Shodan帐户获得,通常有一个速率限制,以避免自动滥用,而由Shodan团队策划的其他分析内容仅对付费帐户持有人可用。付费会员好处的例子有:增加返回结果的速率限制、针对详细搜索请求的高级过滤功能、增加对特定净范围变化的警报、对预定义标准的自动扫描,以及查询特定分析标记的能力。为了突出在本博客中确定的查找容器服务的易用性,可以使用一个免费的Shodan帐户来执行下面的示例。

寻找暴露在网络中的默认容器

简单地使用“kubernetes”、“docker”甚至“k8s”(kubernetes的缩写,因为在“k”和“s”之间有8个字符)的关键术语进行搜索,就可以用来识别默认的容器。

以下是一些使用Shodan网站的简单搜索示例和结果:

Kubernetes

对术语“Kubernetes”进行Shodan搜索,总共得到20353个包含该术语的设备。还有额外的元数据信息返回,这允许研究人员深入研究可能有趣的结果。诸如热门国家,服务,组织,操作系统和产品之类的项目。从返回的信息中可以看到,美国拥有数量最多的包含术语“Kubernetes”的设备,研究人员还可以看到Amazon.com是托管这些设备中大多数的组织。。

图2演示了一个使用Shodan命令行接口(CLI)工具的示例。它显示了一个特定关键字的" count "功能示例。在本例中,包含关键字“Kubernetes”的设备的当前计数,如图所示,设备的总数与图1相同。有关Shodan CLI提供的可用命令的更多信息,请关注Shodan CLI页面。可以这样说,具有Shodan搜索的可编写脚本的功能对于希望执行复杂搜索的研究人员非常有益。

Shodan CLI Kubernetes查询结果

图3显示了总共509个包含术语“k8s”的设备,值得注意的是,美国仍然是返回结果最多的国家,而Amazon.com仍然是托管k8s设备最多的平台。

Shodan的CLI也显示了k8s设备的相同计数值;

图5显示了23354个包含“ Docker”一词的设备,这比Kubernetes设备多1001个,这可能是由于Docker是一个更老、更成熟的容器平台。

搜索结果显示,Kubernetes和Docker容器平台都有超过20000个设备器公开暴露在网络上,并且Kubernetes平台还具有多达509个使用其常用缩写k8配置的设备。这并不一定意味着这40000多个平台中的每一个都容易受到漏洞利用或潜在的敏感数据泄漏,它只是着重指出,即使以无法重命名容器的最基本形式,也存在配置错误的做法

寻找暴露在网络中的默认服务

为了确定配置错误的容器服务所面临的风险,研究人员首先需要为研究人员的研究建立基准并了解研究人员正在研究的环境。默认情况下,Elastic,Kibana和MySQL服务分别使用以下端口9200、5601和3306。Shodan可以提供关于每个服务中有多少可以被公共访问的基本信息。

Elastic数据库

Elastic数据库使用TCP端口9200作为数据库中包含的数据的默认Rest API接口,当通过浏览器导航到Elastic数据库时,用户将看到一个JSON格式的响应,其中包含允许查看的数据集。图6显示了一个Shodan搜索的结果,研究人员计算了向公众开放TCP端口9200的设备的总数。共有144.8万台设备被确认,其中130万台位于美国境内。将近一半的设备(775284)返回了“googleusercontent[.]com”域。当在谷歌基础架构内的已知问题上执行与域和端口9200相关的额外研究时,导致这是一个托管在谷歌云基础架构上的Elastic服务。这是一个非常有力的指标,表明几乎所有这些被识别的设备都承载着Elastic服务,该域也占所有Elastic服务的53%。

Kibana

Kibana是一个数据库可视化工具,用于向用户提供图形用户界面(GUI)来查看数据库信息。默认情况下,Kibana通过TCP端口5601使用HTTPS web浏览器连接。在图7中,研究人员显示了一个Shodan搜索的结果,研究人员计算了向公众开放TCP端口5601的设备总数。总共识别出349403台设备,其中288159台位于美国境内。与Elastic结果的情况一样,大多数条目(56635条)来自“incapdns[.]net”域。此域是一个为组织提供虚拟主机服务的网站托管服务。该域占所有端口5601条目的16%。

MySQL

默认情况下,MySQL协议用于促进通过TCP端口3306与SQL数据库的网络通信。图8中显示了Shodan搜索的结果可以看出向公众开放TCP端口3306的设备总数。全球共有481.6万台设备,其中213.8万台位于美国境内。有趣的是,Google Cloud服务在这些结果中排名下降7位,而Amazon是托管数量最多的MySQL协议支持服务的域名。需要注意的是,没有哪个托管平台承载了绝大多数支持MySQL协议的服务,最高的百分比仅为4%,为Amazon平台。

概括地说,这些结果为研究人员提供一个参考架构,让研究人员了解公众可获得的服务的范围。在撰写本文时,有1448102台设备监听端口9200349403台设备监听端口56014816638台设备监听端口3306。需要注意的是,这些独立的系统中所包含的数据并不是对公众开放的,研究指出,绝大多数系统需要认证凭证才能访问所包含的数据。此外,这些系统中可能有几个没有托管支持Elastic、Kibana或MySQL协议的服务,而是托管了另一个服务,它只是监听这些服务默认执行的相同端口。因此,这些结果并不能很大程度上帮助研究人员识别容器的错误配置。

缩小研究范围

既然研究人员已经确定了研究的环境,现在研究人员将缩小范围以确定可能存在的任何错误配置的容器。研究人员从增加初始基线查询开始,将多个搜索组合在一起。例如,搜索具有默认容器名称的默认端口,“port:9200”(Elastic数据库RestAPI端口),术语为“Kubernetes”,这种查询格式将使研究人员能够识别在默认Kubernetes容器平台上运行的默认Elastic服务。

为了关注托管在Kubernetes容器上的Elastic服务,研究人员使用“port:9200”和“Kubernetes”进行了搜索。从图9可以看出,结果从仅Kubernetes的20353个惟一结果(图1)和port:9200的140万个惟一结果(图6)缩小到总共13个惟一结果。大部分设备都在中国境内,而美国只有2台。

为了专注于托管Elastic服务的Docker容器,研究人员使用“port:9200”和“Docker”作为关键词汇进行了搜索,图10显示了总共39个包含默认Docker容器上托管的默认Elastic服务的设备。

研究人员将结果缩小到13个运行在默认Kubernetes平台上的默认Elastic容器和39个运行在默认Docker平台上的默认Elastic容器,而不是140万个默认Elastic容器,此数量更易于分析和进行更深入的研究。

Shodan记录了每个系统的IP地址,并使用以下Shodan CLI命令从识别的Elastic容器中收集这些地址:

shodan search –fields ip_str port:9200

使用生成的IP地址,研究人员调查了选定的系统,以确定它们是否包含敏感信息。

示例 1

以下系统的确向公众公开了一个不受保护的Elastic数据库,这个数据库不包含任何敏感信息,但是,它是Elastic数据库可以提供的信息类型的一个很好的例子。研究人员导航到Elastic系统并执行搜索查询‘<ipaddress>:9200/_search?q=*’。该查询返回以下JSON数据,参见图11。

图11 查询Elastic数据库的JSON结果

示例 2

示例 2使用了默认服务在默认容器中包含敏感信息,研究人员使用之前定义的URL查询格式导航到Elastic容器:

<ipaddress>:9200/_search?q=*

在调查过程中,一个名为 “users-registered-2018*” 的数据库被识别出来,然后研究人员将数据库添加到搜索查询中:

<ipaddress>:9200/users-registered-2018*/_search?q=*

研究人员总共识别出了包含在数据库中的19个用户电子邮件地址,参见图12。

虽然电子邮件地址的隐私性比不上信用卡号,社会保险号或其他高度敏感的信息,但是,他们会经常成为恶意行为者的目标。利用电子邮件地址进行恶意操作的一个例子是鱼叉式网络钓鱼攻击。恶意行为者可以收集组织的信息,如地理位置、办公大楼的数量或类型,最重要的是,员工姓名。这些信息允许攻击者构建目标电子邮件,即商业电子邮件泄露(BEC),其中包含受害者熟悉的信息,诱使他们点击恶意链接,导致账户被泄露。

经过进一步研究,这个系统不仅托管了一个Elastic数据库,没有任何形式的认证机制来帮助保护它所包含的数据,而且还托管了另外一个不安全的服务,一个与Elastic容器一起运行的Kibana容器。

研究人员查询了‘<ipaddress>:5601’,并且能够访问Kibana仪表板,该仪表板包含除了最初在Elastic服务中发现的其他数据库信息之外的其他数据库信息。另外研究人员还发现了另外两个数据库,一个包含内部基础设施IP地址,另一个包含定制内部集成系统的日志信息。最后,从2018年9月到11月,用户注册数据库似乎只有两个月的生命周期,但截至撰写本文时,这些服务仍在运行。此外,在撰写本文时,数据库的所有者尚未确定。

缓解措施

1.使用那些专注于容器安全策略的云安全平台或托管服务商;

2.通过使用防火墙控件或容器平台网络策略,将对容器上托管的服务的访问限制为内部网络或事先指定的人员,以下链接可帮助协助安全访问容器:

2.1Docker的iptable配置;

2.2Kubernetes的网络策略;

3. 为容器建立基本的认证要求,以下两个链接提供了如何为Docker或Kubernetes建立基本认证实践的有用说明:

3.1Docker——令牌的防护;

3.2Kubernetes——身份验证的防护;

4.确定每个容器中存储或管理的数据类型,并使用适当的安全性做法来确保这些数据类型的安全。

5.将服务隔离到自己的容器中,不要在单个容器上托管多个服务,这将提高容器本身的资源效率,并有助于实施有效的安全策略。

总结

默认配置可能会对组织造成重大的安全风险,Unit 42进行的研究证明了搜索默认配置的易用性,并演示了潜在的攻击者如何利用Shodan这样的开源工具。错误的配置,例如使用默认容器名称和使默认服务端口暴露于外网,使组织容易受到目标侦察的攻击。使用适当的网络策略或防火墙可以防止内部资源暴露给公共网络。

本文翻译自:https://unit42.paloaltonetworks.com/misconfigured-and-exposed-container-services/

声明:本文来自嘶吼专业版,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。