云原生服务风险测绘分析(四):Prometheus

一、概述

Prometheus是一套开源的监控、告警、时间序列数据库的组合工具。与Kubernetes由Google内部Borg系统演变而来相似,Prometheus由Google内部的Borgmon[6]监控系统演变而来,最初在2012年由前Google工程师Matt T. Proud于SoundCloud[5]进行研发使用并在短时间内迅速受到业界广泛认可,后于2015年初在GitHub上开源,目前已有42.2K的Star数和7.1的Fork数。其用户社区非常活跃,拥有将近700位贡献者,并在多数云原生组件中被集成。

2016年5月,Prometheus成为继Kubernetes之后第二个正式加入CNCF的项目,同年六月发布1.0版本,并与2018年8月顺利毕业。Prometheus现已被众多的企业、互联网公司和初创公司在其微服务业务环境下使用。

本篇为云原生服务测绘系列的第四篇,主要从资产发现、资产漏洞、资产脆弱性发现三个维度对国内暴露的Prometheus进行了测绘分析,最后笔者针对Prometheus提供了一些安全建议,希望各位读者通过阅读此文可对Prometheus服务风险暴露情况有更清晰的认识。

二、Prometheus资产风险测绘分析

2.1 Prometheus资产暴露情况分析

借助测绘数据,我们可以了解到国内Prometheus资产地区和版本的分布情况,笔者也以这两个维度为各位读者进行介绍。

2.1.1 Prometheus资产地区分布

笔者从测绘数据中得到Prometheus相关资产共5908条数据,地区分布如图1所示(资产数较少的由于篇幅原因不在图中显示)

图1 Prometheus资产地区分布

笔者针对以上Prometheus资产暴露的端口情况进行了统计,如图2所示:

图2 Prometheus资产端口分布

由图1、图2我们可以得出如下信息:

国内暴露的Prometheus资产信息中有约81%的数据来源于北京市、上海市、广东省、浙江省、香港特别行政区、江苏省,其中北京市暴露1403条数据位居第一

国内暴露的Prometheus资产使用的端口主要分布在9090端口,9090为Prometheus Dashboard提供HTTP服务的默认端口,使用9090端口的资产数约占整体资产数的94%

2.1.2 Prometheus资产版本分布

借助测绘数据,笔者对国内暴露的Prometheus资产版本进行了分析,其分布情况如图3所示(资产版本数较少的由于篇幅原因不在图中显示):

图3 Prometheus资产版本分布

上图可以看出在统计的Prometheus资产中,24%的资产未获取到具体版本信息,剩余约76%资产中,绝大多数资产暴露版本分布在2.32.1、2.34.0、2.31.1、2.26.0、2.28.1、2.27.1、2.30.3之中。

2.2 Prometheus脆弱性风险和漏洞介绍

2.2.1 脆弱性风险介绍

Prometheus的2.24.0版本(2021.1.6发布,当前版本为2.35.0)之前,Prometheus未内置认证授权等安全机制,究其原因,笔者查看了官方Q&A文档[7],其中官方是这样解释的:
TLS and basic authentication is gradually being rolled out to the different components.Please follow the different releases and change logs to know which components have already implemented it.

The components currently supporting TLS and authentication are:
· Prometheus 2.24.0 and later
· Node Exporter 1.0.0 and later

可以看出官方计划将TLS和Basic认证机制在不同的组件中实现,目前还在进行中,并给出了当前支持认证机制的具体版本范围,这也同时意味着在2.24.0及之前的版本中,只要用户对外暴露Prometheus的9090端口,那么任何人都可以对Prometheus Dashboard进行未授权访问。虽然Prometheus在2.24.0版本后针对Dashboard引入了TLS及Basic认证方式,但由于引入时间较晚,许多企业及组织已在云上部署了Prometheus,且未及时启用官方提供的认证机制,从而导致大量暴露在互联网Prometheus服务存在未授权访问风险。通过进一步挖掘,笔者发现这些Prometheus服务存在敏感数据泄露的风险,并将一些敏感的数据接口梳理如下:

  • /api/v1/status/config
访问该接口将返回Prometheus服务相关的配置文件内容,文件格式为YAML,该文件内容包括Alertmanager组件(Prometheus告警组件)相关的配置、告警匹配规则、Prometheus任务配置、Prometheus监控的目标节点信息等,完整的内容可参考官方文档[4],示例配置文件如下图所示:

图4 Prometheus数据泄露接口返回内容1

值得注意的是,通过官方文档[4],笔者发现该接口返回的内容定义包含basic_auth配置项,通过此配置项Prometheus可访问到目标服务或监控服务,此配置项含有用户敏感信息,如下图所示:

图5 Prometheus数据泄露接口参数定义[4]

从以上信息我们可以看出若用户将目标服务或监控服务的认证信息写入配置文件,将会导致敏感数据泄露。

  • /api/v1/targets

访问该接口将返回Prometheus目标服务的当前状态,包括活动状态(activeTargets)、下线状态(DroppedTargets)等,示例如下图所示:

图6 Prometheus数据泄露接口返回内容2

我们还可以通过“/targets”接口看到目标服务状态的可视化UI,如下图所示:

图7 Prometheus数据泄露接口返回内容3

  • /api/v1/status/flags
访问该接口将返回Prometheus配置的flag值,如下所示:

图8 Prometheus 数据泄露接口返回内容4

其中,config.file参数提供用于存放Prometheus配置文件(该配置文件与/api/v1/status/config接口返回的配置文件信息一致)的完整目录,若配置文件存放在/home目录下,则可能导致系统用户名泄露。

此外,该接口返回的内容中还包含web.enable-admin-api参数,该参数代表用户是否可以使用其它Web Admin API的权限,默认值为false,如下所示:

图9 Prometheus 数据泄露接口返回内容5

根据官方文档[3],若用户将web.enable-admin-api项参数值设为true,则将额外开启一些管理API供操作者调用,这些管理API允许用户删除Prometheus所有已保存的监控指标以及关闭相应的监控功能,因而攻击者可针对未设置认证机制的Prometheus服务进行访问,并通过修改web.enable-admin-api项为false,直接关闭或删除Prometheus服务提供的指标,危害巨大。

  • /api/v1/status/buildinfo
访问该接口将返回Prometheus服务的构建信息,其中包括Prometheus版本、Go版本、构建日期等敏感信息,如下图所示:

图10 Prometheus 数据泄露接口返回内容6

Prometheus于2013年开源至今,已有约9年时间,在此期间一共曝出两个个漏洞[2],漏洞数量相对较少,从CVE编号信息我们可以看出漏洞披露时间分别在2019、2021年,根据CVSS2.0标准,两个漏洞均为中危漏洞。CVE-2021-29622漏洞类型为开放式重定向、CVE-2019-3826为XSS,其中CVE-2021-29662漏洞在市面上曝光度较大,笔者也针对这两个漏洞进行了信息汇总,其中包括公开暴露的PoC及ExP信息,如图11所示:

图11 Prometheus漏洞介绍

2.3 Prometheus资产脆弱性暴露情况分析

借助测绘数据,笔者从Prometheus漏洞维度,统计了现有暴露资产的漏洞分布情况,如图12所示:

图12 Prometheus漏洞介绍

可以看出,在国内互联网暴露的Prometheus资产中,有713个资产被曝出含有CVE-2021-29622漏洞(XSS), 从上图我们也可以看出命中CVE-2021-29622漏洞的资产数约占总资产数的12%,该漏洞是个重定向漏洞,虽然对业务自身运行无影响,但重定向漏洞可用来作钓鱼攻击,仍存在一定危害。CVE-2019-3826漏洞在互联网上并未发现有疑似暴露信息,从前面的Prometheus漏洞介绍,我们可以进一步了解这两个漏洞,篇幅原因此处不再赘述。

2.4 安全建议

  • 升级Prometheus版本为最新版本
  • 升级Prometheus Dashboard使用认证机制,如Prometheus提供的Basic认证,使用TLS保证数据传输安全
  • 禁止将用户名密码等敏感信息以明文形式写入Prometheusd的配置文件中

三、总结

Prometheus是CNCF第二个毕业的项目,也是除了Kubernetes之外被开发者普遍认为最火爆的项目,在其被大规模部署的同时,脆弱性配置及漏洞导致的风险也不容忽视,本文从测绘角度分析了国内暴露的Prometheus服务及其存在的风险,下一篇笔者将继续针对云原生环境下的其它组件进行相应的测绘风险分析,欢迎各位读者持续关注,若有任何问题欢迎提出,互相交流学习。

参考文献

[1]https://security.archlinux.org/CVE-2021-29622

[2]https://www.cvedetails.com/vulnerability-list/vendor_id-20905/product_id-61503/Prometheus-Prometheus.html

[3]https://prometheus.io/docs/prometheus/latest/querying/api/#tsdb-admin-apis

[4]https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

[5]https://soundcloud.com/

[6]https://sre.google/sre-book/practical-alerting/

[7]https://prometheus.io/docs/introduction/faq/#why-dont-the-prometheus-server-components-support-tls-or-authentication-can-i-add-those

版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。

Spread the word. Share this post!

Meet The Author